Index: src/arm/macro-assembler-arm.h |
diff --git a/src/arm/macro-assembler-arm.h b/src/arm/macro-assembler-arm.h |
index 98d2087179fd5e8e91a4d24212a944f9dd1fbf2e..cd36062623e76413fb997aba156453ffdda7de6f 100644 |
--- a/src/arm/macro-assembler-arm.h |
+++ b/src/arm/macro-assembler-arm.h |
@@ -1356,11 +1356,19 @@ class MacroAssembler: public Assembler { |
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; |
- mov(reg, Operand(reg, LSR, shift)); |
- and_(reg, reg, Operand(mask)); |
+ static const int size = Field::kSize; |
+ mov(dst, Operand(src, LSR, shift)); |
+ if (shift + size != 32) { |
+ and_(dst, dst, Operand(mask)); |
+ } |
+ } |
+ |
+ template<typename Field> |
+ void DecodeField(Register reg) { |
+ DecodeField<Field>(reg, reg); |
} |
// Activation support. |