diff --git a/js/src/nanojit/NativeX64.cpp b/js/src/nanojit/NativeX64.cpp index a08b0b0a151b..4974d1c9925f 100644 --- a/js/src/nanojit/NativeX64.cpp +++ b/js/src/nanojit/NativeX64.cpp @@ -171,9 +171,9 @@ namespace nanojit static inline uint64_t mod_disp32(uint64_t op, Register r, Register b, int32_t d) { NanoAssert(IsGpReg(r) && IsGpReg(b)); NanoAssert((b & 7) != 4); // using RSP or R12 as base requires SIB - if (isS8(d)) { + uint64_t mod = (((op>>24)&255)>>6); // mod bits in addressing mode: 0,1,2, or 3 + if (mod == 2 && isS8(d)) { // op is: 0x[disp32=0][mod=2:r:b][op][rex][len] - NanoAssert((((op>>24)&255)>>6) == 2); // disp32 mode int len = oplen(op); op = (op & ~0xff000000LL) | (0x40 | (r&7)<<3 | (b&7))<<24; // replace mod return op<<24 | int64_t(d)<<56 | (len-3); // shrink disp, add disp8