diff options
Diffstat (limited to 'src/3rdparty')
-rw-r--r-- | src/3rdparty/masm/assembler/MacroAssemblerX86Common.h | 4 | ||||
-rw-r--r-- | src/3rdparty/masm/assembler/MacroAssemblerX86_64.h | 10 | ||||
-rw-r--r-- | src/3rdparty/masm/assembler/X86Assembler.h | 23 |
3 files changed, 35 insertions, 2 deletions
diff --git a/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h b/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h index 53cb80c210..520cf915fa 100644 --- a/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h +++ b/src/3rdparty/masm/assembler/MacroAssemblerX86Common.h @@ -318,7 +318,7 @@ public: { m_assembler.sarl_i8r(imm.m_value, dest); } - + void rshift32(RegisterID src, TrustedImm32 imm, RegisterID dest) { if (src != dest) @@ -362,7 +362,7 @@ public: move(src, dest); urshift32(imm, dest); } - + void sub32(RegisterID src, RegisterID dest) { m_assembler.subl_rr(src, dest); diff --git a/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h b/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h index 3aaa0fd1bc..db0e880cb9 100644 --- a/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h +++ b/src/3rdparty/masm/assembler/MacroAssemblerX86_64.h @@ -295,6 +295,16 @@ public: m_assembler.xorq_ir(imm.m_value, srcDest); } + void urshift64(TrustedImm32 imm, RegisterID dest) + { + m_assembler.shrq_i8r(imm.m_value, dest); + } + + void lshift64(TrustedImm32 imm, RegisterID dest) + { + m_assembler.shlq_i8r(imm.m_value, dest); + } + void load64(ImplicitAddress address, RegisterID dest) { m_assembler.movq_mr(address.offset, address.base, dest); diff --git a/src/3rdparty/masm/assembler/X86Assembler.h b/src/3rdparty/masm/assembler/X86Assembler.h index a3a480541c..1875ebaff0 100644 --- a/src/3rdparty/masm/assembler/X86Assembler.h +++ b/src/3rdparty/masm/assembler/X86Assembler.h @@ -683,6 +683,29 @@ public: } } + void shrq_i8r(int imm, RegisterID dst) + { + // ### doesn't work when removing the "0 &&" + if (0 && imm == 1) + m_formatter.oneByteOp64(OP_GROUP2_Ev1, GROUP2_OP_SHR, dst); + else { + m_formatter.oneByteOp64(OP_GROUP2_EvIb, GROUP2_OP_SHR, dst); + m_formatter.immediate8(imm); + } + } + + void shlq_i8r(int imm, RegisterID dst) + { + // ### doesn't work when removing the "0 &&" + if (0 && imm == 1) + m_formatter.oneByteOp64(OP_GROUP2_Ev1, GROUP2_OP_SHL, dst); + else { + m_formatter.oneByteOp64(OP_GROUP2_EvIb, GROUP2_OP_SHL, dst); + m_formatter.immediate8(imm); + } + } + + #endif void sarl_i8r(int imm, RegisterID dst) |