Index: src/assembler_ia32.h |
diff --git a/src/assembler_ia32.h b/src/assembler_ia32.h |
index 9ceab2530c8244acba6efd27a030d78d5742d16e..fe031345b02422ebb38de8e8d3045bdf2d230d8c 100644 |
--- a/src/assembler_ia32.h |
+++ b/src/assembler_ia32.h |
@@ -361,16 +361,31 @@ public: |
// In practice, we always normalize the Dest to a Register first. |
}; |
+ typedef void (AssemblerX86::*TypedEmitAddrGPR)(Type, const Address &, |
+ GPRRegister); |
+ typedef void (AssemblerX86::*TypedEmitAddrImm)(Type, const Address &, |
+ const Immediate &); |
+ struct GPREmitterAddrOp { |
+ TypedEmitAddrGPR AddrGPR; |
+ TypedEmitAddrImm AddrImm; |
+ }; |
+ |
// Operations to emit XMM instructions (and dispatch on operand type). |
typedef void (AssemblerX86::*TypedEmitXmmXmm)(Type, XmmRegister, XmmRegister); |
typedef void (AssemblerX86::*TypedEmitXmmAddr)(Type, XmmRegister, |
const Address &); |
- typedef void (AssemblerX86::*TypedEmitAddrXmm)(Type, const Address &, |
- XmmRegister); |
- struct XmmEmitterTwoOps { |
+ struct XmmEmitterRegOp { |
TypedEmitXmmXmm XmmXmm; |
TypedEmitXmmAddr XmmAddr; |
- TypedEmitAddrXmm AddrXmm; |
+ }; |
+ |
+ typedef void (AssemblerX86::*EmitXmmXmm)(XmmRegister, XmmRegister); |
+ typedef void (AssemblerX86::*EmitXmmAddr)(XmmRegister, const Address &); |
+ typedef void (AssemblerX86::*EmitAddrXmm)(const Address &, XmmRegister); |
+ struct XmmEmitterMovOps { |
+ EmitXmmXmm XmmXmm; |
+ EmitXmmAddr XmmAddr; |
+ EmitAddrXmm AddrXmm; |
}; |
typedef void (AssemblerX86::*TypedEmitXmmImm)(Type, XmmRegister, |
@@ -442,6 +457,7 @@ public: |
void movd(GPRRegister dst, XmmRegister src); |
void movd(const Address &dst, XmmRegister src); |
+ void movq(XmmRegister dst, XmmRegister src); |
void movq(const Address &dst, XmmRegister src); |
void movq(XmmRegister dst, const Address &src); |
@@ -460,6 +476,7 @@ public: |
void movaps(XmmRegister dst, XmmRegister src); |
+ void movups(XmmRegister dst, XmmRegister src); |
void movups(XmmRegister dst, const Address &src); |
void movups(const Address &dst, XmmRegister src); |
@@ -591,15 +608,16 @@ public: |
void fincstp(); |
- void cmpl(GPRRegister reg, const Immediate &imm); |
- void cmpl(GPRRegister reg0, GPRRegister reg1); |
- void cmpl(GPRRegister reg, const Address &address); |
- void cmpl(const Address &address, GPRRegister reg); |
- void cmpl(const Address &address, const Immediate &imm); |
- void cmpb(const Address &address, const Immediate &imm); |
+ void cmp(Type Ty, GPRRegister reg0, GPRRegister reg1); |
+ void cmp(Type Ty, GPRRegister reg, const Address &address); |
+ void cmp(Type Ty, GPRRegister reg, const Immediate &imm); |
+ void cmp(Type Ty, const Address &address, GPRRegister reg); |
+ void cmp(Type Ty, const Address &address, const Immediate &imm); |
- void testl(GPRRegister reg1, GPRRegister reg2); |
- void testl(GPRRegister reg, const Immediate &imm); |
+ void test(Type Ty, GPRRegister reg0, GPRRegister reg1); |
+ void test(Type Ty, GPRRegister reg, const Immediate &imm); |
+ void test(Type Ty, const Address &address, GPRRegister reg); |
+ void test(Type Ty, const Address &address, const Immediate &imm); |
void And(Type Ty, GPRRegister dst, GPRRegister src); |
void And(Type Ty, GPRRegister dst, const Address &address); |
@@ -698,6 +716,7 @@ public: |
void nop(int size = 1); |
void int3(); |
void hlt(); |
+ void ud2(); |
void j(CondX86::BrCond condition, Label *label, bool near = kFarJump); |
void j(CondX86::BrCond condition, const ConstantRelocatable *label); |