From 5ac69447dc2b7bca332be552cbe747051641f9e9 Mon Sep 17 00:00:00 2001 From: kobalicekp Date: Thu, 3 Apr 2014 22:17:41 +0200 Subject: [PATCH] Fixed Issue #14. --- src/asmjit/x86/x86assembler.cpp | 18 ++++++++++++++++++ src/asmjit/x86/x86defs.cpp | 2 +- src/asmjit/x86/x86defs.h | 4 +++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/asmjit/x86/x86assembler.cpp b/src/asmjit/x86/x86assembler.cpp index b6d8700..10e33df 100644 --- a/src/asmjit/x86/x86assembler.cpp +++ b/src/asmjit/x86/x86assembler.cpp @@ -1717,6 +1717,24 @@ _Prepare: } break; + case kInstGroupX86MovSxd: + if (encoded == ENC_OPS(Reg, Reg, None)) { + ADD_REX_W(true); + + opReg = static_cast(o0)->getRegIndex(); + rmReg = static_cast(o1)->getRegIndex(); + goto _EmitX86R; + } + + if (encoded == ENC_OPS(Reg, Mem, None)) { + ADD_REX_W(true); + + opReg = static_cast(o0)->getRegIndex(); + rmMem = static_cast(o1); + goto _EmitX86M; + } + break; + case kInstGroupX86MovPtr: if (encoded == ENC_OPS(Reg, Imm, None)) { ASMJIT_ASSERT(static_cast(o0)->getRegIndex() == 0); diff --git a/src/asmjit/x86/x86defs.cpp b/src/asmjit/x86/x86defs.cpp index 001a7c6..43ebe3a 100644 --- a/src/asmjit/x86/x86defs.cpp +++ b/src/asmjit/x86/x86defs.cpp @@ -2284,7 +2284,7 @@ const InstInfo _instInfo[] = { INST(kInstMovsldup , "movsldup" , G(ExtRm) , F(Move) , O(Xmm) , O(XmmMem) , U , U , O_F30F00(12,U) , U ), INST(kInstMovss , "movss" , G(ExtMov) , F(Move) , O(XmmMem) , O(XmmMem) , U , U , O_F30F00(10,U) , O_F30F00(11,U) ), INST(kInstMovsx , "movsx" , G(X86MovSxZx) , F(None) , O(Gqdw) , O(GwbMem) , U , U , O_000F00(BE,U) , U ), - INST(kInstMovsxd , "movsxd" , G(X86MovSxZx) , F(Move) , O(Gq) , O(GdMem) , U , U , O_000000(63,U) , U ), + INST(kInstMovsxd , "movsxd" , G(X86MovSxd) , F(Move) , O(Gq) , O(GdMem) , U , U , O_000000(63,U) , U ), INST(kInstMovupd , "movupd" , G(ExtMov) , F(Move) , O(XmmMem) , O(XmmMem) , U , U , O_660F00(10,U) , O_660F00(11,U) ), INST(kInstMovups , "movups" , G(ExtMov) , F(Move) , O(XmmMem) , O(XmmMem) , U , U , O_000F00(10,U) , O_000F00(11,U) ), INST(kInstMovzx , "movzx" , G(X86MovSxZx) , F(Move) , O(Gqdw) , O(GwbMem) , U , U , O_000F00(B6,U) , U ), diff --git a/src/asmjit/x86/x86defs.h b/src/asmjit/x86/x86defs.h index 9f2629c..52ea0ed 100644 --- a/src/asmjit/x86/x86defs.h +++ b/src/asmjit/x86/x86defs.h @@ -1483,8 +1483,10 @@ ASMJIT_ENUM(kInstGroup) { kInstGroupX86Lea, //! @brief Mov. kInstGroupX86Mov, - //! @brief Movsx/Movsxd/Movzx. + //! @brief Movsx/Movzx. kInstGroupX86MovSxZx, + //! @brief Movsxd. + kInstGroupX86MovSxd, //! @brief Mov having absolute memory operand (x86/x64). kInstGroupX86MovPtr, //! @brief Push.