Index: src/mips/macro-assembler-mips.h |
diff --git a/src/mips/macro-assembler-mips.h b/src/mips/macro-assembler-mips.h |
index 1f815d91c05d04652265ef789ccdedbe858170eb..a979475ce7d27ac6dd62233f10e91f5c0aa725b3 100644 |
--- a/src/mips/macro-assembler-mips.h |
+++ b/src/mips/macro-assembler-mips.h |
@@ -1484,11 +1484,19 @@ const Operand& rt = Operand(zero_reg), BranchDelaySlot bd = PROTECT |
void NumberOfOwnDescriptors(Register dst, Register map); |
template<typename Field> |
- void DecodeField(Register reg) { |
+ void DecodeField(Register dst, Register src) { |
static const int shift = Field::kShift; |
static const int mask = Field::kMask >> shift; |
- srl(reg, reg, shift); |
- And(reg, reg, Operand(mask)); |
+ static const int size = Field::kSize; |
+ srl(dst, src, shift); |
+ if (shift + size != 32) { |
+ And(dst, dst, Operand(mask)); |
+ } |
+ } |
+ |
+ template<typename Field> |
+ void DecodeField(Register reg) { |
+ DecodeField<Field>(reg, reg); |
} |
// Generates function and stub prologue code. |