Index: src/assembler_ia32.h |
diff --git a/src/assembler_ia32.h b/src/assembler_ia32.h |
index 6192e91de9a7e55a1a66a6a4bd39f7d3713474cf..b5c9a16097649bce33c2e9aab68026c802631109 100644 |
--- a/src/assembler_ia32.h |
+++ b/src/assembler_ia32.h |
@@ -336,13 +336,32 @@ public: |
static const bool kNearJump = true; |
static const bool kFarJump = false; |
+ // Operations to emit GPR instructions (and dispatch on operand type). |
+ typedef void (AssemblerX86::*TypedEmitGPR)(Type, GPRRegister); |
+ typedef void (AssemblerX86::*TypedEmitAddr)(Type, const Address &); |
+ struct GPREmitterOneOp { |
+ TypedEmitGPR Reg; |
+ TypedEmitAddr Addr; |
+ }; |
+ |
+ typedef void (AssemblerX86::*TypedEmitGPRGPR)(Type, GPRRegister, GPRRegister); |
+ typedef void (AssemblerX86::*TypedEmitGPRAddr)(Type, GPRRegister, |
+ const Address &); |
+ typedef void (AssemblerX86::*TypedEmitGPRImm)(Type, GPRRegister, |
+ const Immediate &); |
+ struct GPREmitterRegOp { |
+ TypedEmitGPRGPR GPRGPR; |
+ TypedEmitGPRAddr GPRAddr; |
+ TypedEmitGPRImm GPRImm; |
+ }; |
+ |
// 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 TypedXmmEmitters { |
+ struct XmmEmitterTwoOps { |
TypedEmitXmmXmm XmmXmm; |
TypedEmitXmmAddr XmmAddr; |
TypedEmitAddrXmm AddrXmm; |
@@ -393,7 +412,7 @@ public: |
void movw(GPRRegister dst, const Address &src); |
void movw(const Address &dst, GPRRegister src); |
- void leal(GPRRegister dst, const Address &src); |
+ void lea(Type Ty, GPRRegister dst, const Address &src); |
void cmov(CondX86::BrCond cond, GPRRegister dst, GPRRegister src); |
@@ -404,7 +423,9 @@ public: |
void movss(XmmRegister dst, XmmRegister src); |
void movd(XmmRegister dst, GPRRegister src); |
+ void movd(XmmRegister dst, const Address &src); |
void movd(GPRRegister dst, XmmRegister src); |
+ void movd(const Address &dst, XmmRegister src); |
void movq(const Address &dst, XmmRegister src); |
void movq(XmmRegister dst, const Address &src); |
@@ -622,10 +643,16 @@ public: |
void shrd(GPRRegister dst, GPRRegister src, const Immediate &imm); |
void shrd(const Address &dst, GPRRegister src); |
- void negl(GPRRegister reg); |
+ void neg(Type Ty, GPRRegister reg); |
+ void neg(Type Ty, const Address &addr); |
void notl(GPRRegister reg); |
- void bsrl(GPRRegister dst, GPRRegister src); |
+ void bsf(Type Ty, GPRRegister dst, GPRRegister src); |
+ void bsf(Type Ty, GPRRegister dst, const Address &src); |
+ void bsr(Type Ty, GPRRegister dst, GPRRegister src); |
+ void bsr(Type Ty, GPRRegister dst, const Address &src); |
+ |
+ void bswap(Type Ty, GPRRegister reg); |
void bt(GPRRegister base, GPRRegister offset); |