Index: src/x64/macro-assembler-x64.h |
diff --git a/src/x64/macro-assembler-x64.h b/src/x64/macro-assembler-x64.h |
index 8f0d6724e0f9daa6e37713f27e4bd32b75f7c165..d9893d62109a7db7fe8e13958462a2cc26e79924 100644 |
--- a/src/x64/macro-assembler-x64.h |
+++ b/src/x64/macro-assembler-x64.h |
@@ -1011,10 +1011,11 @@ class MacroAssembler: public Assembler { |
template<typename Field> |
void DecodeField(Register reg) { |
- static const int shift = Field::kShift; |
+ static const int shift = Field::kShift + kSmiShift; |
static const int mask = Field::kMask >> Field::kShift; |
- shrl(reg, Immediate(shift)); |
- andl(reg, Immediate(mask)); |
+ shrp(reg, Immediate(shift)); |
+ andp(reg, Immediate(mask)); |
+ shlp(reg, Immediate(kSmiShift)); |
} |
// Abort execution if argument is not a number, enabled via --debug-code. |