fix mov([rip+label], imm)
diff --git a/test/rip-label-imm.cpp b/test/rip-label-imm.cpp
index 5abff0c..a4016fd 100644
--- a/test/rip-label-imm.cpp
+++ b/test/rip-label-imm.cpp
@@ -3,22 +3,22 @@
/*
dump of vc
-0000000000350000 F3 0F C2 05 77 00 00 00 00 cmpeqss xmm0,dword ptr [350080h]
-0000000000350009 F7 05 6D 00 00 00 21 00 00 00 test dword ptr [350080h],21h
-0000000000350013 0F BA 25 65 00 00 00 03 bt dword ptr [350080h],3
-000000000035001B C4 E3 79 0D 05 5B 00 00 00 03 vblendpd xmm0,xmm0,xmmword ptr [350080h],3
-0000000000350025 C4 E3 79 0F 05 51 00 00 00 04 vpalignr xmm0,xmm0,xmmword ptr [350080h],4
-000000000035002F C4 E3 7D 19 1D 47 00 00 00 0C vextractf128 xmmword ptr [350080h],ymm3,0Ch
-0000000000350039 C4 E3 75 46 05 3D 00 00 00 0D vperm2i128 ymm0,ymm1,ymmword ptr [350080h],0Dh
-0000000000350043 C4 E3 79 1D 15 33 00 00 00 2C vcvtps2ph mmword ptr [350080h],xmm2,2Ch
-000000000035004D C7 05 2D 00 00 00 34 12 00 00 mov dword ptr [350084h],1234h
-0000000000350057 C1 25 22 00 00 00 03 shl dword ptr [350080h],3
-000000000035005E D1 2D 1C 00 00 00 shr dword ptr [350080h],1
-0000000000350064 48 0F A4 05 13 00 00 00 03 shld qword ptr [350080h],rax,3
-000000000035006D 48 6B 05 0B 00 00 00 15 imul rax,qword ptr [350080h],15h
-0000000000350075 C4 E3 FB F0 05 01 00 00 00 15 rorx rax,qword ptr [350080h],15h
-000000000035007F C3 ret
-0000000000350080 F0 DE BC 9A 78 56 34 12
+0000000000450000 F3 0F C2 05 77 00 00 00 00 cmpeqss xmm0,dword ptr [450080h]
+0000000000450009 F7 05 6D 00 00 00 21 00 00 00 test dword ptr [450080h],21h
+0000000000450013 0F BA 25 65 00 00 00 03 bt dword ptr [450080h],3
+000000000045001B C4 E3 79 0D 05 5B 00 00 00 03 vblendpd xmm0,xmm0,xmmword ptr [450080h],3
+0000000000450025 C4 E3 79 0F 05 51 00 00 00 04 vpalignr xmm0,xmm0,xmmword ptr [450080h],4
+000000000045002F C4 E3 7D 19 1D 47 00 00 00 0C vextractf128 xmmword ptr [450080h],ymm3,0Ch
+0000000000450039 C4 E3 75 46 05 3D 00 00 00 0D vperm2i128 ymm0,ymm1,ymmword ptr [450080h],0Dh
+0000000000450043 C4 E3 79 1D 15 33 00 00 00 2C vcvtps2ph mmword ptr [450080h],xmm2,2Ch
+000000000045004D C7 05 29 00 00 00 34 12 00 00 mov dword ptr [450080h],1234h
+0000000000450057 C1 25 22 00 00 00 03 shl dword ptr [450080h],3
+000000000045005E D1 2D 1C 00 00 00 shr dword ptr [450080h],1
+0000000000450064 48 0F A4 05 13 00 00 00 03 shld qword ptr [450080h],rax,3
+000000000045006D 48 6B 05 0B 00 00 00 15 imul rax,qword ptr [450080h],15h
+0000000000450075 C4 E3 FB F0 05 01 00 00 00 15 rorx rax,qword ptr [450080h],15h
+000000000045007F C3 ret
+0000000000450080 F0 DE BC 9A 78 56 34 12
*/
struct Code : Xbyak::CodeGenerator {
Code()
diff --git a/xbyak/xbyak.h b/xbyak/xbyak.h
index 63dc227..5ef3419 100644
--- a/xbyak/xbyak.h
+++ b/xbyak/xbyak.h
@@ -1869,16 +1869,16 @@
db(imm, size);
} else if (op.isMEM()) {
verifyMemHasSize(op);
- opModM(static_cast<const Address&>(op), Reg(0, Operand::REG, op.getBit()), B11000110);
- int size = op.getBit() / 8;
- if (size <= 4) {
- sint64 s = sint64(imm) >> (size * 8);
+ int immSize = op.getBit() / 8;
+ if (immSize <= 4) {
+ sint64 s = sint64(imm) >> (immSize * 8);
if (s != 0 && s != -1) throw Error(ERR_IMM_IS_TOO_BIG);
} else {
if (!inner::IsInInt32(imm)) throw Error(ERR_IMM_IS_TOO_BIG);
- size = 4;
+ immSize = 4;
}
- db(static_cast<uint32>(imm), size);
+ opModM(static_cast<const Address&>(op), Reg(0, Operand::REG, op.getBit()), B11000110, NONE, NONE, immSize);
+ db(static_cast<uint32>(imm), immSize);
} else {
throw Error(ERR_BAD_COMBINATION);
}