aboutsummaryrefslogtreecommitdiffstats
path: root/src/3rdparty
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty')
-rw-r--r--src/3rdparty/masm/assembler/MacroAssemblerX86Common.h4
-rw-r--r--src/3rdparty/masm/assembler/MacroAssemblerX86_64.h10
-rw-r--r--src/3rdparty/masm/assembler/X86Assembler.h23
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)