diff options
Diffstat (limited to 'src/emu/cpu/drcbex64.c')
-rw-r--r-- | src/emu/cpu/drcbex64.c | 2356 |
1 files changed, 1178 insertions, 1178 deletions
diff --git a/src/emu/cpu/drcbex64.c b/src/emu/cpu/drcbex64.c index 1ec54a30d4c..bc20a787bd6 100644 --- a/src/emu/cpu/drcbex64.c +++ b/src/emu/cpu/drcbex64.c @@ -209,12 +209,12 @@ using namespace x64emit; // DEBUGGING //************************************************************************** -#define LOG_HASHJMPS (0) +#define LOG_HASHJMPS (0) -#define USE_RCPSS_FOR_SINGLES (0) -#define USE_RSQRTSS_FOR_SINGLES (0) -#define USE_RCPSS_FOR_DOUBLES (0) -#define USE_RSQRTSS_FOR_DOUBLES (0) +#define USE_RCPSS_FOR_SINGLES (0) +#define USE_RSQRTSS_FOR_SINGLES (0) +#define USE_RCPSS_FOR_DOUBLES (0) +#define USE_RSQRTSS_FOR_DOUBLES (0) @@ -222,29 +222,29 @@ using namespace x64emit; // CONSTANTS //************************************************************************** -const UINT32 PTYPE_M = 1 << parameter::PTYPE_MEMORY; -const UINT32 PTYPE_I = 1 << parameter::PTYPE_IMMEDIATE; -const UINT32 PTYPE_R = 1 << parameter::PTYPE_INT_REGISTER; -const UINT32 PTYPE_F = 1 << parameter::PTYPE_FLOAT_REGISTER; -const UINT32 PTYPE_MI = PTYPE_M | PTYPE_I; -const UINT32 PTYPE_RI = PTYPE_R | PTYPE_I; -const UINT32 PTYPE_MR = PTYPE_M | PTYPE_R; -const UINT32 PTYPE_MRI = PTYPE_M | PTYPE_R | PTYPE_I; -const UINT32 PTYPE_MF = PTYPE_M | PTYPE_F; +const UINT32 PTYPE_M = 1 << parameter::PTYPE_MEMORY; +const UINT32 PTYPE_I = 1 << parameter::PTYPE_IMMEDIATE; +const UINT32 PTYPE_R = 1 << parameter::PTYPE_INT_REGISTER; +const UINT32 PTYPE_F = 1 << parameter::PTYPE_FLOAT_REGISTER; +const UINT32 PTYPE_MI = PTYPE_M | PTYPE_I; +const UINT32 PTYPE_RI = PTYPE_R | PTYPE_I; +const UINT32 PTYPE_MR = PTYPE_M | PTYPE_R; +const UINT32 PTYPE_MRI = PTYPE_M | PTYPE_R | PTYPE_I; +const UINT32 PTYPE_MF = PTYPE_M | PTYPE_F; #ifdef X64_WINDOWS_ABI -const int REG_PARAM1 = REG_RCX; -const int REG_PARAM2 = REG_RDX; -const int REG_PARAM3 = REG_R8; -const int REG_PARAM4 = REG_R9; +const int REG_PARAM1 = REG_RCX; +const int REG_PARAM2 = REG_RDX; +const int REG_PARAM3 = REG_R8; +const int REG_PARAM4 = REG_R9; #else -const int REG_PARAM1 = REG_RDI; -const int REG_PARAM2 = REG_RSI; -const int REG_PARAM3 = REG_RDX; -const int REG_PARAM4 = REG_RCX; +const int REG_PARAM1 = REG_RDI; +const int REG_PARAM2 = REG_RSI; +const int REG_PARAM3 = REG_RDX; +const int REG_PARAM4 = REG_RCX; #endif @@ -254,18 +254,18 @@ const int REG_PARAM4 = REG_RCX; // MACROS //************************************************************************** -#define X86_CONDITION(condition) (condition_map[condition - uml::COND_Z]) -#define X86_NOT_CONDITION(condition) (condition_map[condition - uml::COND_Z] ^ 1) +#define X86_CONDITION(condition) (condition_map[condition - uml::COND_Z]) +#define X86_NOT_CONDITION(condition) (condition_map[condition - uml::COND_Z] ^ 1) inline x86_memref drcbe_x64::MABS(const void *ptr) { return MBD(REG_BP, offset_from_rbp(ptr)); } -#define assert_no_condition(inst) assert((inst).condition() == uml::COND_ALWAYS) -#define assert_any_condition(inst) assert((inst).condition() == uml::COND_ALWAYS || ((inst).condition() >= uml::COND_Z && (inst).condition() < uml::COND_MAX)) -#define assert_no_flags(inst) assert((inst).flags() == 0) -#define assert_flags(inst, valid) assert(((inst).flags() & ~(valid)) == 0) +#define assert_no_condition(inst) assert((inst).condition() == uml::COND_ALWAYS) +#define assert_any_condition(inst) assert((inst).condition() == uml::COND_ALWAYS || ((inst).condition() >= uml::COND_Z && (inst).condition() < uml::COND_MAX)) +#define assert_no_flags(inst) assert((inst).flags() == 0) +#define assert_flags(inst, valid) assert(((inst).flags() & ~(valid)) == 0) @@ -296,31 +296,31 @@ static UINT8 float_register_map[REG_F_COUNT] = // condition mapping table static const UINT8 condition_map[uml::COND_MAX - uml::COND_Z] = { - x64emit::COND_Z, // COND_Z = 0x80, requires Z - x64emit::COND_NZ, // COND_NZ, requires Z - x64emit::COND_S, // COND_S, requires S - x64emit::COND_NS, // COND_NS, requires S - x64emit::COND_C, // COND_C, requires C - x64emit::COND_NC, // COND_NC, requires C - x64emit::COND_O, // COND_V, requires V - x64emit::COND_NO, // COND_NV, requires V - x64emit::COND_P, // COND_U, requires U - x64emit::COND_NP, // COND_NU, requires U - x64emit::COND_A, // COND_A, requires CZ - x64emit::COND_BE, // COND_BE, requires CZ - x64emit::COND_G, // COND_G, requires SVZ - x64emit::COND_LE, // COND_LE, requires SVZ - x64emit::COND_L, // COND_L, requires SV - x64emit::COND_GE, // COND_GE, requires SV + x64emit::COND_Z, // COND_Z = 0x80, requires Z + x64emit::COND_NZ, // COND_NZ, requires Z + x64emit::COND_S, // COND_S, requires S + x64emit::COND_NS, // COND_NS, requires S + x64emit::COND_C, // COND_C, requires C + x64emit::COND_NC, // COND_NC, requires C + x64emit::COND_O, // COND_V, requires V + x64emit::COND_NO, // COND_NV, requires V + x64emit::COND_P, // COND_U, requires U + x64emit::COND_NP, // COND_NU, requires U + x64emit::COND_A, // COND_A, requires CZ + x64emit::COND_BE, // COND_BE, requires CZ + x64emit::COND_G, // COND_G, requires SVZ + x64emit::COND_LE, // COND_LE, requires SVZ + x64emit::COND_L, // COND_L, requires SV + x64emit::COND_GE, // COND_GE, requires SV }; // rounding mode mapping table static const UINT8 fprnd_map[4] = { - FPRND_CHOP, // ROUND_TRUNC, truncate - FPRND_NEAR, // ROUND_ROUND, round - FPRND_UP, // ROUND_CEIL, round up - FPRND_DOWN // ROUND_FLOOR round down + FPRND_CHOP, // ROUND_TRUNC, truncate + FPRND_NEAR, // ROUND_ROUND, round + FPRND_UP, // ROUND_CEIL, round up + FPRND_DOWN // ROUND_FLOOR round down }; @@ -332,89 +332,89 @@ static const UINT8 fprnd_map[4] = const drcbe_x64::opcode_table_entry drcbe_x64::s_opcode_table_source[] = { // Compile-time opcodes - { uml::OP_HANDLE, &drcbe_x64::op_handle }, // HANDLE handle - { uml::OP_HASH, &drcbe_x64::op_hash }, // HASH mode,pc - { uml::OP_LABEL, &drcbe_x64::op_label }, // LABEL imm - { uml::OP_COMMENT, &drcbe_x64::op_comment }, // COMMENT string - { uml::OP_MAPVAR, &drcbe_x64::op_mapvar }, // MAPVAR mapvar,value + { uml::OP_HANDLE, &drcbe_x64::op_handle }, // HANDLE handle + { uml::OP_HASH, &drcbe_x64::op_hash }, // HASH mode,pc + { uml::OP_LABEL, &drcbe_x64::op_label }, // LABEL imm + { uml::OP_COMMENT, &drcbe_x64::op_comment }, // COMMENT string + { uml::OP_MAPVAR, &drcbe_x64::op_mapvar }, // MAPVAR mapvar,value // Control Flow Operations - { uml::OP_NOP, &drcbe_x64::op_nop }, // NOP - { uml::OP_DEBUG, &drcbe_x64::op_debug }, // DEBUG pc - { uml::OP_EXIT, &drcbe_x64::op_exit }, // EXIT src1[,c] - { uml::OP_HASHJMP, &drcbe_x64::op_hashjmp }, // HASHJMP mode,pc,handle - { uml::OP_JMP, &drcbe_x64::op_jmp }, // JMP imm[,c] - { uml::OP_EXH, &drcbe_x64::op_exh }, // EXH handle,param[,c] - { uml::OP_CALLH, &drcbe_x64::op_callh }, // CALLH handle[,c] - { uml::OP_RET, &drcbe_x64::op_ret }, // RET [c] - { uml::OP_CALLC, &drcbe_x64::op_callc }, // CALLC func,ptr[,c] - { uml::OP_RECOVER, &drcbe_x64::op_recover }, // RECOVER dst,mapvar + { uml::OP_NOP, &drcbe_x64::op_nop }, // NOP + { uml::OP_DEBUG, &drcbe_x64::op_debug }, // DEBUG pc + { uml::OP_EXIT, &drcbe_x64::op_exit }, // EXIT src1[,c] + { uml::OP_HASHJMP, &drcbe_x64::op_hashjmp }, // HASHJMP mode,pc,handle + { uml::OP_JMP, &drcbe_x64::op_jmp }, // JMP imm[,c] + { uml::OP_EXH, &drcbe_x64::op_exh }, // EXH handle,param[,c] + { uml::OP_CALLH, &drcbe_x64::op_callh }, // CALLH handle[,c] + { uml::OP_RET, &drcbe_x64::op_ret }, // RET [c] + { uml::OP_CALLC, &drcbe_x64::op_callc }, // CALLC func,ptr[,c] + { uml::OP_RECOVER, &drcbe_x64::op_recover }, // RECOVER dst,mapvar // Internal Register Operations - { uml::OP_SETFMOD, &drcbe_x64::op_setfmod }, // SETFMOD src - { uml::OP_GETFMOD, &drcbe_x64::op_getfmod }, // GETFMOD dst - { uml::OP_GETEXP, &drcbe_x64::op_getexp }, // GETEXP dst - { uml::OP_GETFLGS, &drcbe_x64::op_getflgs }, // GETFLGS dst[,f] - { uml::OP_SAVE, &drcbe_x64::op_save }, // SAVE dst - { uml::OP_RESTORE, &drcbe_x64::op_restore }, // RESTORE dst + { uml::OP_SETFMOD, &drcbe_x64::op_setfmod }, // SETFMOD src + { uml::OP_GETFMOD, &drcbe_x64::op_getfmod }, // GETFMOD dst + { uml::OP_GETEXP, &drcbe_x64::op_getexp }, // GETEXP dst + { uml::OP_GETFLGS, &drcbe_x64::op_getflgs }, // GETFLGS dst[,f] + { uml::OP_SAVE, &drcbe_x64::op_save }, // SAVE dst + { uml::OP_RESTORE, &drcbe_x64::op_restore }, // RESTORE dst // Integer Operations - { uml::OP_LOAD, &drcbe_x64::op_load }, // LOAD dst,base,index,size - { uml::OP_LOADS, &drcbe_x64::op_loads }, // LOADS dst,base,index,size - { uml::OP_STORE, &drcbe_x64::op_store }, // STORE base,index,src,size - { uml::OP_READ, &drcbe_x64::op_read }, // READ dst,src1,spacesize - { uml::OP_READM, &drcbe_x64::op_readm }, // READM dst,src1,mask,spacesize - { uml::OP_WRITE, &drcbe_x64::op_write }, // WRITE dst,src1,spacesize - { uml::OP_WRITEM, &drcbe_x64::op_writem }, // WRITEM dst,src1,spacesize - { uml::OP_CARRY, &drcbe_x64::op_carry }, // CARRY src,bitnum - { uml::OP_SET, &drcbe_x64::op_set }, // SET dst,c - { uml::OP_MOV, &drcbe_x64::op_mov }, // MOV dst,src[,c] - { uml::OP_SEXT, &drcbe_x64::op_sext }, // SEXT dst,src - { uml::OP_ROLAND, &drcbe_x64::op_roland }, // ROLAND dst,src1,src2,src3 - { uml::OP_ROLINS, &drcbe_x64::op_rolins }, // ROLINS dst,src1,src2,src3 - { uml::OP_ADD, &drcbe_x64::op_add }, // ADD dst,src1,src2[,f] - { uml::OP_ADDC, &drcbe_x64::op_addc }, // ADDC dst,src1,src2[,f] - { uml::OP_SUB, &drcbe_x64::op_sub }, // SUB dst,src1,src2[,f] - { uml::OP_SUBB, &drcbe_x64::op_subc }, // SUBB dst,src1,src2[,f] - { uml::OP_CMP, &drcbe_x64::op_cmp }, // CMP src1,src2[,f] - { uml::OP_MULU, &drcbe_x64::op_mulu }, // MULU dst,edst,src1,src2[,f] - { uml::OP_MULS, &drcbe_x64::op_muls }, // MULS dst,edst,src1,src2[,f] - { uml::OP_DIVU, &drcbe_x64::op_divu }, // DIVU dst,edst,src1,src2[,f] - { uml::OP_DIVS, &drcbe_x64::op_divs }, // DIVS dst,edst,src1,src2[,f] - { uml::OP_AND, &drcbe_x64::op_and }, // AND dst,src1,src2[,f] - { uml::OP_TEST, &drcbe_x64::op_test }, // TEST src1,src2[,f] - { uml::OP_OR, &drcbe_x64::op_or }, // OR dst,src1,src2[,f] - { uml::OP_XOR, &drcbe_x64::op_xor }, // XOR dst,src1,src2[,f] - { uml::OP_LZCNT, &drcbe_x64::op_lzcnt }, // LZCNT dst,src[,f] - { uml::OP_BSWAP, &drcbe_x64::op_bswap }, // BSWAP dst,src - { uml::OP_SHL, &drcbe_x64::op_shl }, // SHL dst,src,count[,f] - { uml::OP_SHR, &drcbe_x64::op_shr }, // SHR dst,src,count[,f] - { uml::OP_SAR, &drcbe_x64::op_sar }, // SAR dst,src,count[,f] - { uml::OP_ROL, &drcbe_x64::op_rol }, // ROL dst,src,count[,f] - { uml::OP_ROLC, &drcbe_x64::op_rolc }, // ROLC dst,src,count[,f] - { uml::OP_ROR, &drcbe_x64::op_ror }, // ROR dst,src,count[,f] - { uml::OP_RORC, &drcbe_x64::op_rorc }, // RORC dst,src,count[,f] + { uml::OP_LOAD, &drcbe_x64::op_load }, // LOAD dst,base,index,size + { uml::OP_LOADS, &drcbe_x64::op_loads }, // LOADS dst,base,index,size + { uml::OP_STORE, &drcbe_x64::op_store }, // STORE base,index,src,size + { uml::OP_READ, &drcbe_x64::op_read }, // READ dst,src1,spacesize + { uml::OP_READM, &drcbe_x64::op_readm }, // READM dst,src1,mask,spacesize + { uml::OP_WRITE, &drcbe_x64::op_write }, // WRITE dst,src1,spacesize + { uml::OP_WRITEM, &drcbe_x64::op_writem }, // WRITEM dst,src1,spacesize + { uml::OP_CARRY, &drcbe_x64::op_carry }, // CARRY src,bitnum + { uml::OP_SET, &drcbe_x64::op_set }, // SET dst,c + { uml::OP_MOV, &drcbe_x64::op_mov }, // MOV dst,src[,c] + { uml::OP_SEXT, &drcbe_x64::op_sext }, // SEXT dst,src + { uml::OP_ROLAND, &drcbe_x64::op_roland }, // ROLAND dst,src1,src2,src3 + { uml::OP_ROLINS, &drcbe_x64::op_rolins }, // ROLINS dst,src1,src2,src3 + { uml::OP_ADD, &drcbe_x64::op_add }, // ADD dst,src1,src2[,f] + { uml::OP_ADDC, &drcbe_x64::op_addc }, // ADDC dst,src1,src2[,f] + { uml::OP_SUB, &drcbe_x64::op_sub }, // SUB dst,src1,src2[,f] + { uml::OP_SUBB, &drcbe_x64::op_subc }, // SUBB dst,src1,src2[,f] + { uml::OP_CMP, &drcbe_x64::op_cmp }, // CMP src1,src2[,f] + { uml::OP_MULU, &drcbe_x64::op_mulu }, // MULU dst,edst,src1,src2[,f] + { uml::OP_MULS, &drcbe_x64::op_muls }, // MULS dst,edst,src1,src2[,f] + { uml::OP_DIVU, &drcbe_x64::op_divu }, // DIVU dst,edst,src1,src2[,f] + { uml::OP_DIVS, &drcbe_x64::op_divs }, // DIVS dst,edst,src1,src2[,f] + { uml::OP_AND, &drcbe_x64::op_and }, // AND dst,src1,src2[,f] + { uml::OP_TEST, &drcbe_x64::op_test }, // TEST src1,src2[,f] + { uml::OP_OR, &drcbe_x64::op_or }, // OR dst,src1,src2[,f] + { uml::OP_XOR, &drcbe_x64::op_xor }, // XOR dst,src1,src2[,f] + { uml::OP_LZCNT, &drcbe_x64::op_lzcnt }, // LZCNT dst,src[,f] + { uml::OP_BSWAP, &drcbe_x64::op_bswap }, // BSWAP dst,src + { uml::OP_SHL, &drcbe_x64::op_shl }, // SHL dst,src,count[,f] + { uml::OP_SHR, &drcbe_x64::op_shr }, // SHR dst,src,count[,f] + { uml::OP_SAR, &drcbe_x64::op_sar }, // SAR dst,src,count[,f] + { uml::OP_ROL, &drcbe_x64::op_rol }, // ROL dst,src,count[,f] + { uml::OP_ROLC, &drcbe_x64::op_rolc }, // ROLC dst,src,count[,f] + { uml::OP_ROR, &drcbe_x64::op_ror }, // ROR dst,src,count[,f] + { uml::OP_RORC, &drcbe_x64::op_rorc }, // RORC dst,src,count[,f] // Floating Point Operations - { uml::OP_FLOAD, &drcbe_x64::op_fload }, // FLOAD dst,base,index - { uml::OP_FSTORE, &drcbe_x64::op_fstore }, // FSTORE base,index,src - { uml::OP_FREAD, &drcbe_x64::op_fread }, // FREAD dst,space,src1 - { uml::OP_FWRITE, &drcbe_x64::op_fwrite }, // FWRITE space,dst,src1 - { uml::OP_FMOV, &drcbe_x64::op_fmov }, // FMOV dst,src1[,c] - { uml::OP_FTOINT, &drcbe_x64::op_ftoint }, // FTOINT dst,src1,size,round - { uml::OP_FFRINT, &drcbe_x64::op_ffrint }, // FFRINT dst,src1,size - { uml::OP_FFRFLT, &drcbe_x64::op_ffrflt }, // FFRFLT dst,src1,size - { uml::OP_FRNDS, &drcbe_x64::op_frnds }, // FRNDS dst,src1 - { uml::OP_FADD, &drcbe_x64::op_fadd }, // FADD dst,src1,src2 - { uml::OP_FSUB, &drcbe_x64::op_fsub }, // FSUB dst,src1,src2 - { uml::OP_FCMP, &drcbe_x64::op_fcmp }, // FCMP src1,src2 - { uml::OP_FMUL, &drcbe_x64::op_fmul }, // FMUL dst,src1,src2 - { uml::OP_FDIV, &drcbe_x64::op_fdiv }, // FDIV dst,src1,src2 - { uml::OP_FNEG, &drcbe_x64::op_fneg }, // FNEG dst,src1 - { uml::OP_FABS, &drcbe_x64::op_fabs }, // FABS dst,src1 - { uml::OP_FSQRT, &drcbe_x64::op_fsqrt }, // FSQRT dst,src1 - { uml::OP_FRECIP, &drcbe_x64::op_frecip }, // FRECIP dst,src1 - { uml::OP_FRSQRT, &drcbe_x64::op_frsqrt } // FRSQRT dst,src1 + { uml::OP_FLOAD, &drcbe_x64::op_fload }, // FLOAD dst,base,index + { uml::OP_FSTORE, &drcbe_x64::op_fstore }, // FSTORE base,index,src + { uml::OP_FREAD, &drcbe_x64::op_fread }, // FREAD dst,space,src1 + { uml::OP_FWRITE, &drcbe_x64::op_fwrite }, // FWRITE space,dst,src1 + { uml::OP_FMOV, &drcbe_x64::op_fmov }, // FMOV dst,src1[,c] + { uml::OP_FTOINT, &drcbe_x64::op_ftoint }, // FTOINT dst,src1,size,round + { uml::OP_FFRINT, &drcbe_x64::op_ffrint }, // FFRINT dst,src1,size + { uml::OP_FFRFLT, &drcbe_x64::op_ffrflt }, // FFRFLT dst,src1,size + { uml::OP_FRNDS, &drcbe_x64::op_frnds }, // FRNDS dst,src1 + { uml::OP_FADD, &drcbe_x64::op_fadd }, // FADD dst,src1,src2 + { uml::OP_FSUB, &drcbe_x64::op_fsub }, // FSUB dst,src1,src2 + { uml::OP_FCMP, &drcbe_x64::op_fcmp }, // FCMP src1,src2 + { uml::OP_FMUL, &drcbe_x64::op_fmul }, // FMUL dst,src1,src2 + { uml::OP_FDIV, &drcbe_x64::op_fdiv }, // FDIV dst,src1,src2 + { uml::OP_FNEG, &drcbe_x64::op_fneg }, // FNEG dst,src1 + { uml::OP_FABS, &drcbe_x64::op_fabs }, // FABS dst,src1 + { uml::OP_FSQRT, &drcbe_x64::op_fsqrt }, // FSQRT dst,src1 + { uml::OP_FRECIP, &drcbe_x64::op_frecip }, // FRECIP dst,src1 + { uml::OP_FRSQRT, &drcbe_x64::op_frsqrt } // FRSQRT dst,src1 }; @@ -560,7 +560,7 @@ inline int drcbe_x64::get_base_register_and_offset(x86code *&dst, void *target, else { offset = 0; - emit_mov_r64_imm(dst, reg, (FPTR)target); // mov reg,target + emit_mov_r64_imm(dst, reg, (FPTR)target); // mov reg,target return reg; } } @@ -575,11 +575,11 @@ inline void drcbe_x64::emit_smart_call_r64(x86code *&dst, x86code *target, UINT8 { INT64 delta = target - (dst + 5); if (short_immediate(delta)) - emit_call(dst, target); // call target + emit_call(dst, target); // call target else { - emit_mov_r64_imm(dst, reg, (FPTR)target); // mov reg,target - emit_call_r64(dst, reg); // call reg + emit_mov_r64_imm(dst, reg, (FPTR)target); // mov reg,target + emit_call_r64(dst, reg); // call reg } } @@ -593,9 +593,9 @@ inline void drcbe_x64::emit_smart_call_m64(x86code *&dst, x86code **target) { INT64 delta = *target - (dst + 5); if (short_immediate(delta)) - emit_call(dst, *target); // call *target + emit_call(dst, *target); // call *target else - emit_call_m64(dst, MABS(target)); // call [target] + emit_call_m64(dst, MABS(target)); // call [target] } @@ -610,28 +610,28 @@ inline void drcbe_x64::emit_smart_call_m64(x86code *&dst, x86code **target) drcbe_x64::drcbe_x64(drcuml_state &drcuml, device_t &device, drc_cache &cache, UINT32 flags, int modes, int addrbits, int ignorebits) : drcbe_interface(drcuml, cache, device), - m_hash(cache, modes, addrbits, ignorebits), - m_map(cache, 0), - m_labels(cache), - m_log(NULL), - m_sse41(false), - m_absmask32((UINT32 *)cache.alloc_near(16*2 + 15)), - m_absmask64(NULL), - m_rbpvalue(cache.near() + 0x80), - m_entry(NULL), - m_exit(NULL), - m_nocode(NULL), - m_fixup_label(FUNC(drcbe_x64::fixup_label), this), - m_fixup_exception(FUNC(drcbe_x64::fixup_exception), this), - m_near(*(near_state *)cache.alloc_near(sizeof(m_near))) + m_hash(cache, modes, addrbits, ignorebits), + m_map(cache, 0), + m_labels(cache), + m_log(NULL), + m_sse41(false), + m_absmask32((UINT32 *)cache.alloc_near(16*2 + 15)), + m_absmask64(NULL), + m_rbpvalue(cache.near() + 0x80), + m_entry(NULL), + m_exit(NULL), + m_nocode(NULL), + m_fixup_label(FUNC(drcbe_x64::fixup_label), this), + m_fixup_exception(FUNC(drcbe_x64::fixup_exception), this), + m_near(*(near_state *)cache.alloc_near(sizeof(m_near))) { // build up necessary arrays static const UINT32 sse_control[4] = { - 0xffc0, // ROUND_TRUNC - 0x9fc0, // ROUND_ROUND - 0xdfc0, // ROUND_CEIL - 0xbfc0 // ROUND_FLOOR + 0xffc0, // ROUND_TRUNC + 0x9fc0, // ROUND_ROUND + 0xdfc0, // ROUND_CEIL + 0xbfc0 // ROUND_FLOOR }; memcpy(m_near.ssecontrol, sse_control, sizeof(m_near.ssecontrol)); m_near.single1 = 1.0f; @@ -715,56 +715,56 @@ void drcbe_x64::reset() // generate a simple CPUID stub UINT32 (*cpuid_ecx_stub)(void) = (UINT32 (*)(void))dst; - emit_push_r64(dst, REG_RBX); // push rbx - emit_mov_r32_imm(dst, REG_EAX, 1); // mov eax,1 - emit_cpuid(dst); // cpuid - emit_mov_r32_r32(dst, REG_EAX, REG_ECX); // mov eax,ecx - emit_pop_r64(dst, REG_RBX); // pop rbx - emit_ret(dst); // ret + emit_push_r64(dst, REG_RBX); // push rbx + emit_mov_r32_imm(dst, REG_EAX, 1); // mov eax,1 + emit_cpuid(dst); // cpuid + emit_mov_r32_r32(dst, REG_EAX, REG_ECX); // mov eax,ecx + emit_pop_r64(dst, REG_RBX); // pop rbx + emit_ret(dst); // ret // call it to determine if we have SSE4.1 support m_sse41 = (((*cpuid_ecx_stub)() & 0x80000) != 0); // generate an entry point m_entry = (x86_entry_point_func)dst; - emit_push_r64(dst, REG_RBX); // push rbx - emit_push_r64(dst, REG_RSI); // push rsi - emit_push_r64(dst, REG_RDI); // push rdi - emit_push_r64(dst, REG_RBP); // push rbp - emit_push_r64(dst, REG_R12); // push r12 - emit_push_r64(dst, REG_R13); // push r13 - emit_push_r64(dst, REG_R14); // push r14 - emit_push_r64(dst, REG_R15); // push r15 - emit_mov_r64_r64(dst, REG_RBP, REG_PARAM1); // mov rbp,param1 - emit_sub_r64_imm(dst, REG_RSP, 32); // sub rsp,32 - emit_mov_m64_r64(dst, MABS(&m_near.hashstacksave), REG_RSP); // mov [hashstacksave],rsp - emit_sub_r64_imm(dst, REG_RSP, 8); // sub rsp,8 - emit_mov_m64_r64(dst, MABS(&m_near.stacksave), REG_RSP); // mov [stacksave],rsp - emit_stmxcsr_m32(dst, MABS(&m_near.ssemode)); // stmxcsr [ssemode] - emit_jmp_r64(dst, REG_PARAM2); // jmp param2 + emit_push_r64(dst, REG_RBX); // push rbx + emit_push_r64(dst, REG_RSI); // push rsi + emit_push_r64(dst, REG_RDI); // push rdi + emit_push_r64(dst, REG_RBP); // push rbp + emit_push_r64(dst, REG_R12); // push r12 + emit_push_r64(dst, REG_R13); // push r13 + emit_push_r64(dst, REG_R14); // push r14 + emit_push_r64(dst, REG_R15); // push r15 + emit_mov_r64_r64(dst, REG_RBP, REG_PARAM1); // mov rbp,param1 + emit_sub_r64_imm(dst, REG_RSP, 32); // sub rsp,32 + emit_mov_m64_r64(dst, MABS(&m_near.hashstacksave), REG_RSP); // mov [hashstacksave],rsp + emit_sub_r64_imm(dst, REG_RSP, 8); // sub rsp,8 + emit_mov_m64_r64(dst, MABS(&m_near.stacksave), REG_RSP); // mov [stacksave],rsp + emit_stmxcsr_m32(dst, MABS(&m_near.ssemode)); // stmxcsr [ssemode] + emit_jmp_r64(dst, REG_PARAM2); // jmp param2 if (m_log != NULL) x86log_disasm_code_range(m_log, "entry_point", (x86code *)m_entry, dst); // generate an exit point m_exit = dst; - emit_ldmxcsr_m32(dst, MABS(&m_near.ssemode)); // ldmxcsr [ssemode] - emit_mov_r64_m64(dst, REG_RSP, MABS(&m_near.hashstacksave)); // mov rsp,[hashstacksave] - emit_add_r64_imm(dst, REG_RSP, 32); // add rsp,32 - emit_pop_r64(dst, REG_R15); // pop r15 - emit_pop_r64(dst, REG_R14); // pop r14 - emit_pop_r64(dst, REG_R13); // pop r13 - emit_pop_r64(dst, REG_R12); // pop r12 - emit_pop_r64(dst, REG_RBP); // pop rbp - emit_pop_r64(dst, REG_RDI); // pop rdi - emit_pop_r64(dst, REG_RSI); // pop rsi - emit_pop_r64(dst, REG_RBX); // pop rbx - emit_ret(dst); // ret + emit_ldmxcsr_m32(dst, MABS(&m_near.ssemode)); // ldmxcsr [ssemode] + emit_mov_r64_m64(dst, REG_RSP, MABS(&m_near.hashstacksave)); // mov rsp,[hashstacksave] + emit_add_r64_imm(dst, REG_RSP, 32); // add rsp,32 + emit_pop_r64(dst, REG_R15); // pop r15 + emit_pop_r64(dst, REG_R14); // pop r14 + emit_pop_r64(dst, REG_R13); // pop r13 + emit_pop_r64(dst, REG_R12); // pop r12 + emit_pop_r64(dst, REG_RBP); // pop rbp + emit_pop_r64(dst, REG_RDI); // pop rdi + emit_pop_r64(dst, REG_RSI); // pop rsi + emit_pop_r64(dst, REG_RBX); // pop rbx + emit_ret(dst); // ret if (m_log != NULL) x86log_disasm_code_range(m_log, "exit_point", m_exit, dst); // generate a no code point m_nocode = dst; - emit_ret(dst); // ret + emit_ret(dst); // ret if (m_log != NULL) x86log_disasm_code_range(m_log, "nocode", m_nocode, dst); @@ -896,16 +896,16 @@ void drcbe_x64::emit_mov_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (param.is_immediate()) { if (param.immediate() == 0) - emit_xor_r32_r32(dst, reg, reg); // xor reg,reg + emit_xor_r32_r32(dst, reg, reg); // xor reg,reg else - emit_mov_r32_imm(dst, reg, param.immediate()); // mov reg,param + emit_mov_r32_imm(dst, reg, param.immediate()); // mov reg,param } else if (param.is_memory()) - emit_mov_r32_m32(dst, reg, MABS(param.memory())); // mov reg,[param] + emit_mov_r32_m32(dst, reg, MABS(param.memory())); // mov reg,[param] else if (param.is_int_register()) { if (reg != param.ireg()) - emit_mov_r32_r32(dst, reg, param.ireg()); // mov reg,param + emit_mov_r32_r32(dst, reg, param.ireg()); // mov reg,param } } @@ -920,16 +920,16 @@ void drcbe_x64::emit_movsx_r64_p32(x86code *&dst, UINT8 reg, const be_parameter if (param.is_immediate()) { if (param.immediate() == 0) - emit_xor_r32_r32(dst, reg, reg); // xor reg,reg + emit_xor_r32_r32(dst, reg, reg); // xor reg,reg else if ((INT32)param.immediate() >= 0) - emit_mov_r32_imm(dst, reg, param.immediate()); // mov reg,param + emit_mov_r32_imm(dst, reg, param.immediate()); // mov reg,param else - emit_mov_r64_imm(dst, reg, (INT32)param.immediate()); // mov reg,param + emit_mov_r64_imm(dst, reg, (INT32)param.immediate()); // mov reg,param } else if (param.is_memory()) - emit_movsxd_r64_m32(dst, reg, MABS(param.memory())); // movsxd reg,[param] + emit_movsxd_r64_m32(dst, reg, MABS(param.memory())); // movsxd reg,[param] else if (param.is_int_register()) - emit_movsxd_r64_r32(dst, reg, param.ireg()); // movsdx reg,param + emit_movsxd_r64_r32(dst, reg, param.ireg()); // movsdx reg,param } @@ -942,13 +942,13 @@ void drcbe_x64::emit_movsx_r64_p32(x86code *&dst, UINT8 reg, const be_parameter void drcbe_x64::emit_mov_r32_p32_keepflags(x86code *&dst, UINT8 reg, const be_parameter ¶m) { if (param.is_immediate()) - emit_mov_r32_imm(dst, reg, param.immediate()); // mov reg,param + emit_mov_r32_imm(dst, reg, param.immediate()); // mov reg,param else if (param.is_memory()) - emit_mov_r32_m32(dst, reg, MABS(param.memory())); // mov reg,[param] + emit_mov_r32_m32(dst, reg, MABS(param.memory())); // mov reg,[param] else if (param.is_int_register()) { if (reg != param.ireg()) - emit_mov_r32_r32(dst, reg, param.ireg()); // mov reg,param + emit_mov_r32_r32(dst, reg, param.ireg()); // mov reg,param } } @@ -961,14 +961,14 @@ void drcbe_x64::emit_mov_r32_p32_keepflags(x86code *&dst, UINT8 reg, const be_pa void drcbe_x64::emit_mov_m32_p32(x86code *&dst, x86_memref memref, const be_parameter ¶m) { if (param.is_immediate()) - emit_mov_m32_imm(dst, memref, param.immediate()); // mov [mem],param + emit_mov_m32_imm(dst, memref, param.immediate()); // mov [mem],param else if (param.is_memory()) { - emit_mov_r32_m32(dst, REG_EAX, MABS(param.memory())); // mov eax,[param] - emit_mov_m32_r32(dst, memref, REG_EAX); // mov [mem],eax + emit_mov_r32_m32(dst, REG_EAX, MABS(param.memory())); // mov eax,[param] + emit_mov_m32_r32(dst, memref, REG_EAX); // mov [mem],eax } else if (param.is_int_register()) - emit_mov_m32_r32(dst, memref, param.ireg()); // mov [mem],param + emit_mov_m32_r32(dst, memref, param.ireg()); // mov [mem],param } @@ -981,11 +981,11 @@ void drcbe_x64::emit_mov_p32_r32(x86code *&dst, const be_parameter ¶m, UINT8 { assert(!param.is_immediate()); if (param.is_memory()) - emit_mov_m32_r32(dst, MABS(param.memory()), reg); // mov [param],reg + emit_mov_m32_r32(dst, MABS(param.memory()), reg); // mov [param],reg else if (param.is_int_register()) { if (reg != param.ireg()) - emit_mov_r32_r32(dst, param.ireg(), reg); // mov param,reg + emit_mov_r32_r32(dst, param.ireg(), reg); // mov param,reg } } @@ -1000,12 +1000,12 @@ void drcbe_x64::emit_add_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (param.is_immediate()) { if (inst.flags() != 0 || param.immediate() != 0) - emit_add_r32_imm(dst, reg, param.immediate()); // add reg,param + emit_add_r32_imm(dst, reg, param.immediate()); // add reg,param } else if (param.is_memory()) - emit_add_r32_m32(dst, reg, MABS(param.memory())); // add reg,[param] + emit_add_r32_m32(dst, reg, MABS(param.memory())); // add reg,[param] else if (param.is_int_register()) - emit_add_r32_r32(dst, reg, param.ireg()); // add reg,param + emit_add_r32_r32(dst, reg, param.ireg()); // add reg,param } @@ -1019,13 +1019,13 @@ void drcbe_x64::emit_add_m32_p32(x86code *&dst, x86_memref memref, const be_para if (param.is_immediate()) { if (inst.flags() != 0 || param.immediate() != 0) - emit_add_m32_imm(dst, memref, param.immediate()); // add [dest],param + emit_add_m32_imm(dst, memref, param.immediate()); // add [dest],param } else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32(dst, reg, param); // mov reg,param - emit_add_m32_r32(dst, memref, reg); // add [dest],reg + emit_mov_r32_p32(dst, reg, param); // mov reg,param + emit_add_m32_r32(dst, memref, reg); // add [dest],reg } } @@ -1038,11 +1038,11 @@ void drcbe_x64::emit_add_m32_p32(x86code *&dst, x86_memref memref, const be_para void drcbe_x64::emit_adc_r32_p32(x86code *&dst, UINT8 reg, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_adc_r32_imm(dst, reg, param.immediate()); // adc reg,param + emit_adc_r32_imm(dst, reg, param.immediate()); // adc reg,param else if (param.is_memory()) - emit_adc_r32_m32(dst, reg, MABS(param.memory())); // adc reg,[param] + emit_adc_r32_m32(dst, reg, MABS(param.memory())); // adc reg,[param] else if (param.is_int_register()) - emit_adc_r32_r32(dst, reg, param.ireg()); // adc reg,param + emit_adc_r32_r32(dst, reg, param.ireg()); // adc reg,param } @@ -1054,12 +1054,12 @@ void drcbe_x64::emit_adc_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p void drcbe_x64::emit_adc_m32_p32(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_adc_m32_imm(dst, memref, param.immediate()); // adc [dest],param + emit_adc_m32_imm(dst, memref, param.immediate()); // adc [dest],param else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32_keepflags(dst, reg, param); // mov reg,param - emit_adc_m32_r32(dst, memref, reg); // adc [dest],reg + emit_mov_r32_p32_keepflags(dst, reg, param); // mov reg,param + emit_adc_m32_r32(dst, memref, reg); // adc [dest],reg } } @@ -1074,12 +1074,12 @@ void drcbe_x64::emit_sub_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (param.is_immediate()) { if (inst.flags() != 0 || param.immediate() != 0) - emit_sub_r32_imm(dst, reg, param.immediate()); // sub reg,param + emit_sub_r32_imm(dst, reg, param.immediate()); // sub reg,param } else if (param.is_memory()) - emit_sub_r32_m32(dst, reg, MABS(param.memory())); // sub reg,[param] + emit_sub_r32_m32(dst, reg, MABS(param.memory())); // sub reg,[param] else if (param.is_int_register()) - emit_sub_r32_r32(dst, reg, param.ireg()); // sub reg,param + emit_sub_r32_r32(dst, reg, param.ireg()); // sub reg,param } @@ -1093,13 +1093,13 @@ void drcbe_x64::emit_sub_m32_p32(x86code *&dst, x86_memref memref, const be_para if (param.is_immediate()) { if (inst.flags() != 0 || param.immediate() != 0) - emit_sub_m32_imm(dst, memref, param.immediate()); // sub [dest],param + emit_sub_m32_imm(dst, memref, param.immediate()); // sub [dest],param } else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32(dst, reg, param); // mov reg,param - emit_sub_m32_r32(dst, memref, reg); // sub [dest],reg + emit_mov_r32_p32(dst, reg, param); // mov reg,param + emit_sub_m32_r32(dst, memref, reg); // sub [dest],reg } } @@ -1112,11 +1112,11 @@ void drcbe_x64::emit_sub_m32_p32(x86code *&dst, x86_memref memref, const be_para void drcbe_x64::emit_sbb_r32_p32(x86code *&dst, UINT8 reg, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_sbb_r32_imm(dst, reg, param.immediate()); // sbb reg,param + emit_sbb_r32_imm(dst, reg, param.immediate()); // sbb reg,param else if (param.is_memory()) - emit_sbb_r32_m32(dst, reg, MABS(param.memory())); // sbb reg,[param] + emit_sbb_r32_m32(dst, reg, MABS(param.memory())); // sbb reg,[param] else if (param.is_int_register()) - emit_sbb_r32_r32(dst, reg, param.ireg()); // sbb reg,param + emit_sbb_r32_r32(dst, reg, param.ireg()); // sbb reg,param } @@ -1128,12 +1128,12 @@ void drcbe_x64::emit_sbb_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p void drcbe_x64::emit_sbb_m32_p32(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_sbb_m32_imm(dst, memref, param.immediate()); // sbb [dest],param + emit_sbb_m32_imm(dst, memref, param.immediate()); // sbb [dest],param else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32_keepflags(dst, reg, param); // mov reg,param - emit_sbb_m32_r32(dst, memref, reg); // sbb [dest],reg + emit_mov_r32_p32_keepflags(dst, reg, param); // mov reg,param + emit_sbb_m32_r32(dst, memref, reg); // sbb [dest],reg } } @@ -1146,11 +1146,11 @@ void drcbe_x64::emit_sbb_m32_p32(x86code *&dst, x86_memref memref, const be_para void drcbe_x64::emit_cmp_r32_p32(x86code *&dst, UINT8 reg, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_cmp_r32_imm(dst, reg, param.immediate()); // cmp reg,param + emit_cmp_r32_imm(dst, reg, param.immediate()); // cmp reg,param else if (param.is_memory()) - emit_cmp_r32_m32(dst, reg, MABS(param.memory())); // cmp reg,[param] + emit_cmp_r32_m32(dst, reg, MABS(param.memory())); // cmp reg,[param] else if (param.is_int_register()) - emit_cmp_r32_r32(dst, reg, param.ireg()); // cmp reg,param + emit_cmp_r32_r32(dst, reg, param.ireg()); // cmp reg,param } @@ -1162,12 +1162,12 @@ void drcbe_x64::emit_cmp_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p void drcbe_x64::emit_cmp_m32_p32(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_cmp_m32_imm(dst, memref, param.immediate()); // cmp [dest],param + emit_cmp_m32_imm(dst, memref, param.immediate()); // cmp [dest],param else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32(dst, reg, param); // mov reg,param - emit_cmp_m32_r32(dst, memref, reg); // cmp [dest],reg + emit_mov_r32_p32(dst, reg, param); // mov reg,param + emit_cmp_m32_r32(dst, memref, reg); // cmp [dest],reg } } @@ -1184,14 +1184,14 @@ void drcbe_x64::emit_and_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0xffffffff) ;// skip else if (inst.flags() == 0 && (UINT32)param.immediate() == 0) - emit_xor_r32_r32(dst, reg, reg); // xor reg,reg + emit_xor_r32_r32(dst, reg, reg); // xor reg,reg else - emit_and_r32_imm(dst, reg, param.immediate()); // and reg,param + emit_and_r32_imm(dst, reg, param.immediate()); // and reg,param } else if (param.is_memory()) - emit_and_r32_m32(dst, reg, MABS(param.memory())); // and reg,[param] + emit_and_r32_m32(dst, reg, MABS(param.memory())); // and reg,[param] else if (param.is_int_register()) - emit_and_r32_r32(dst, reg, param.ireg()); // and reg,param + emit_and_r32_r32(dst, reg, param.ireg()); // and reg,param } @@ -1207,15 +1207,15 @@ void drcbe_x64::emit_and_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0xffffffff) ;// skip else if (inst.flags() == 0 && (UINT32)param.immediate() == 0) - emit_mov_m32_imm(dst, memref, 0); // mov [dest],0 + emit_mov_m32_imm(dst, memref, 0); // mov [dest],0 else - emit_and_m32_imm(dst, memref, param.immediate()); // and [dest],param + emit_and_m32_imm(dst, memref, param.immediate()); // and [dest],param } else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32(dst, reg, param); // mov reg,param - emit_and_m32_r32(dst, memref, reg); // and [dest],reg + emit_mov_r32_p32(dst, reg, param); // mov reg,param + emit_and_m32_r32(dst, memref, reg); // and [dest],reg } } @@ -1228,11 +1228,11 @@ void drcbe_x64::emit_and_m32_p32(x86code *&dst, x86_memref memref, const be_para void drcbe_x64::emit_test_r32_p32(x86code *&dst, UINT8 reg, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_test_r32_imm(dst, reg, param.immediate()); // test reg,param + emit_test_r32_imm(dst, reg, param.immediate()); // test reg,param else if (param.is_memory()) - emit_test_m32_r32(dst, MABS(param.memory()), reg); // test [param],reg + emit_test_m32_r32(dst, MABS(param.memory()), reg); // test [param],reg else if (param.is_int_register()) - emit_test_r32_r32(dst, reg, param.ireg()); // test reg,param + emit_test_r32_r32(dst, reg, param.ireg()); // test reg,param } @@ -1244,14 +1244,14 @@ void drcbe_x64::emit_test_r32_p32(x86code *&dst, UINT8 reg, const be_parameter & void drcbe_x64::emit_test_m32_p32(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate()) - emit_test_m32_imm(dst, memref, param.immediate()); // test [dest],param + emit_test_m32_imm(dst, memref, param.immediate()); // test [dest],param else if (param.is_memory()) { - emit_mov_r32_p32(dst, REG_EAX, param); // mov reg,param - emit_test_m32_r32(dst, memref, REG_EAX); // test [dest],reg + emit_mov_r32_p32(dst, REG_EAX, param); // mov reg,param + emit_test_m32_r32(dst, memref, REG_EAX); // test [dest],reg } else if (param.is_int_register()) - emit_test_m32_r32(dst, memref, param.ireg()); // test [dest],param + emit_test_m32_r32(dst, memref, param.ireg()); // test [dest],param } @@ -1267,14 +1267,14 @@ void drcbe_x64::emit_or_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &pa if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else if (inst.flags() == 0 && (UINT32)param.immediate() == 0xffffffff) - emit_mov_r32_imm(dst, reg, 0xffffffff); // mov reg,-1 + emit_mov_r32_imm(dst, reg, 0xffffffff); // mov reg,-1 else - emit_or_r32_imm(dst, reg, param.immediate()); // or reg,param + emit_or_r32_imm(dst, reg, param.immediate()); // or reg,param } else if (param.is_memory()) - emit_or_r32_m32(dst, reg, MABS(param.memory())); // or reg,[param] + emit_or_r32_m32(dst, reg, MABS(param.memory())); // or reg,[param] else if (param.is_int_register()) - emit_or_r32_r32(dst, reg, param.ireg()); // or reg,param + emit_or_r32_r32(dst, reg, param.ireg()); // or reg,param } @@ -1290,15 +1290,15 @@ void drcbe_x64::emit_or_m32_p32(x86code *&dst, x86_memref memref, const be_param if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else if (inst.flags() == 0 && (UINT32)param.immediate() == 0xffffffff) - emit_mov_m32_imm(dst, memref, 0xffffffff); // mov [dest],-1 + emit_mov_m32_imm(dst, memref, 0xffffffff); // mov [dest],-1 else - emit_or_m32_imm(dst, memref, param.immediate()); // or [dest],param + emit_or_m32_imm(dst, memref, param.immediate()); // or [dest],param } else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32(dst, reg, param); // mov reg,param - emit_or_m32_r32(dst, memref, reg); // or [dest],reg + emit_mov_r32_p32(dst, reg, param); // mov reg,param + emit_or_m32_r32(dst, memref, reg); // or [dest],reg } } @@ -1315,14 +1315,14 @@ void drcbe_x64::emit_xor_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else if (inst.flags() == 0 && (UINT32)param.immediate() == 0xffffffff) - emit_not_r32(dst, reg); // not reg + emit_not_r32(dst, reg); // not reg else - emit_xor_r32_imm(dst, reg, param.immediate()); // xor reg,param + emit_xor_r32_imm(dst, reg, param.immediate()); // xor reg,param } else if (param.is_memory()) - emit_xor_r32_m32(dst, reg, MABS(param.memory())); // xor reg,[param] + emit_xor_r32_m32(dst, reg, MABS(param.memory())); // xor reg,[param] else if (param.is_int_register()) - emit_xor_r32_r32(dst, reg, param.ireg()); // xor reg,param + emit_xor_r32_r32(dst, reg, param.ireg()); // xor reg,param } @@ -1338,15 +1338,15 @@ void drcbe_x64::emit_xor_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else if (inst.flags() == 0 && (UINT32)param.immediate() == 0xffffffff) - emit_not_m32(dst, memref); // not [dest] + emit_not_m32(dst, memref); // not [dest] else - emit_xor_m32_imm(dst, memref, param.immediate()); // xor [dest],param + emit_xor_m32_imm(dst, memref, param.immediate()); // xor [dest],param } else { int reg = param.select_register(REG_EAX); - emit_mov_r32_p32(dst, reg, param); // mov reg,param - emit_xor_m32_r32(dst, memref, reg); // xor [dest],reg + emit_mov_r32_p32(dst, reg, param); // mov reg,param + emit_xor_m32_r32(dst, memref, reg); // xor [dest],reg } } @@ -1363,12 +1363,12 @@ void drcbe_x64::emit_shl_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_shl_r32_imm(dst, reg, param.immediate()); // shl reg,param + emit_shl_r32_imm(dst, reg, param.immediate()); // shl reg,param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_shl_r32_cl(dst, reg); // shl reg,cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_shl_r32_cl(dst, reg); // shl reg,cl } } @@ -1385,12 +1385,12 @@ void drcbe_x64::emit_shl_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_shl_m32_imm(dst, memref, param.immediate()); // shl [dest],param + emit_shl_m32_imm(dst, memref, param.immediate()); // shl [dest],param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_shl_m32_cl(dst, memref); // shl [dest],cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_shl_m32_cl(dst, memref); // shl [dest],cl } } @@ -1407,12 +1407,12 @@ void drcbe_x64::emit_shr_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_shr_r32_imm(dst, reg, param.immediate()); // shr reg,param + emit_shr_r32_imm(dst, reg, param.immediate()); // shr reg,param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_shr_r32_cl(dst, reg); // shr reg,cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_shr_r32_cl(dst, reg); // shr reg,cl } } @@ -1429,12 +1429,12 @@ void drcbe_x64::emit_shr_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_shr_m32_imm(dst, memref, param.immediate()); // shr [dest],param + emit_shr_m32_imm(dst, memref, param.immediate()); // shr [dest],param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_shr_m32_cl(dst, memref); // shr [dest],cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_shr_m32_cl(dst, memref); // shr [dest],cl } } @@ -1451,12 +1451,12 @@ void drcbe_x64::emit_sar_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_sar_r32_imm(dst, reg, param.immediate()); // sar reg,param + emit_sar_r32_imm(dst, reg, param.immediate()); // sar reg,param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_sar_r32_cl(dst, reg); // sar reg,cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_sar_r32_cl(dst, reg); // sar reg,cl } } @@ -1473,12 +1473,12 @@ void drcbe_x64::emit_sar_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_sar_m32_imm(dst, memref, param.immediate()); // sar [dest],param + emit_sar_m32_imm(dst, memref, param.immediate()); // sar [dest],param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_sar_m32_cl(dst, memref); // sar [dest],cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_sar_m32_cl(dst, memref); // sar [dest],cl } } @@ -1495,12 +1495,12 @@ void drcbe_x64::emit_rol_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rol_r32_imm(dst, reg, param.immediate()); // rol reg,param + emit_rol_r32_imm(dst, reg, param.immediate()); // rol reg,param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_rol_r32_cl(dst, reg); // rol reg,cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_rol_r32_cl(dst, reg); // rol reg,cl } } @@ -1517,12 +1517,12 @@ void drcbe_x64::emit_rol_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rol_m32_imm(dst, memref, param.immediate()); // rol [dest],param + emit_rol_m32_imm(dst, memref, param.immediate()); // rol [dest],param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_rol_m32_cl(dst, memref); // rol [dest],cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_rol_m32_cl(dst, memref); // rol [dest],cl } } @@ -1539,12 +1539,12 @@ void drcbe_x64::emit_ror_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_ror_r32_imm(dst, reg, param.immediate()); // ror reg,param + emit_ror_r32_imm(dst, reg, param.immediate()); // ror reg,param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_ror_r32_cl(dst, reg); // ror reg,cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_ror_r32_cl(dst, reg); // ror reg,cl } } @@ -1561,12 +1561,12 @@ void drcbe_x64::emit_ror_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_ror_m32_imm(dst, memref, param.immediate()); // ror [dest],param + emit_ror_m32_imm(dst, memref, param.immediate()); // ror [dest],param } else { - emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param - emit_ror_m32_cl(dst, memref); // ror [dest],cl + emit_mov_r32_p32(dst, REG_ECX, param); // mov ecx,param + emit_ror_m32_cl(dst, memref); // ror [dest],cl } } @@ -1583,12 +1583,12 @@ void drcbe_x64::emit_rcl_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rcl_r32_imm(dst, reg, param.immediate()); // rcl reg,param + emit_rcl_r32_imm(dst, reg, param.immediate()); // rcl reg,param } else { - emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param - emit_rcl_r32_cl(dst, reg); // rcl reg,cl + emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param + emit_rcl_r32_cl(dst, reg); // rcl reg,cl } } @@ -1605,12 +1605,12 @@ void drcbe_x64::emit_rcl_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rcl_m32_imm(dst, memref, param.immediate()); // rcl [dest],param + emit_rcl_m32_imm(dst, memref, param.immediate()); // rcl [dest],param } else { - emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param - emit_rcl_m32_cl(dst, memref); // rcl [dest],cl + emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param + emit_rcl_m32_cl(dst, memref); // rcl [dest],cl } } @@ -1627,12 +1627,12 @@ void drcbe_x64::emit_rcr_r32_p32(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rcr_r32_imm(dst, reg, param.immediate()); // rcr reg,param + emit_rcr_r32_imm(dst, reg, param.immediate()); // rcr reg,param } else { - emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param - emit_rcr_r32_cl(dst, reg); // rcr reg,cl + emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param + emit_rcr_r32_cl(dst, reg); // rcr reg,cl } } @@ -1649,12 +1649,12 @@ void drcbe_x64::emit_rcr_m32_p32(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rcr_m32_imm(dst, memref, param.immediate()); // rcr [dest],param + emit_rcr_m32_imm(dst, memref, param.immediate()); // rcr [dest],param } else { - emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param - emit_rcr_m32_cl(dst, memref); // rcr [dest],cl + emit_mov_r32_p32_keepflags(dst, REG_ECX, param); // mov ecx,param + emit_rcr_m32_cl(dst, memref); // rcr [dest],cl } } @@ -1674,16 +1674,16 @@ void drcbe_x64::emit_mov_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (param.is_immediate()) { if (param.immediate() == 0) - emit_xor_r32_r32(dst, reg, reg); // xor reg,reg + emit_xor_r32_r32(dst, reg, reg); // xor reg,reg else - emit_mov_r64_imm(dst, reg, param.immediate()); // mov reg,param + emit_mov_r64_imm(dst, reg, param.immediate()); // mov reg,param } else if (param.is_memory()) - emit_mov_r64_m64(dst, reg, MABS(param.memory())); // mov reg,[param] + emit_mov_r64_m64(dst, reg, MABS(param.memory())); // mov reg,[param] else if (param.is_int_register()) { if (reg != param.ireg()) - emit_mov_r64_r64(dst, reg, param.ireg()); // mov reg,param + emit_mov_r64_r64(dst, reg, param.ireg()); // mov reg,param } } @@ -1697,13 +1697,13 @@ void drcbe_x64::emit_mov_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p void drcbe_x64::emit_mov_r64_p64_keepflags(x86code *&dst, UINT8 reg, const be_parameter ¶m) { if (param.is_immediate()) - emit_mov_r64_imm(dst, reg, param.immediate()); // mov reg,param + emit_mov_r64_imm(dst, reg, param.immediate()); // mov reg,param else if (param.is_memory()) - emit_mov_r64_m64(dst, reg, MABS(param.memory())); // mov reg,[param] + emit_mov_r64_m64(dst, reg, MABS(param.memory())); // mov reg,[param] else if (param.is_int_register()) { if (reg != param.ireg()) - emit_mov_r64_r64(dst, reg, param.ireg()); // mov reg,param + emit_mov_r64_r64(dst, reg, param.ireg()); // mov reg,param } } @@ -1717,11 +1717,11 @@ void drcbe_x64::emit_mov_p64_r64(x86code *&dst, const be_parameter ¶m, UINT8 { assert(!param.is_immediate()); if (param.is_memory()) - emit_mov_m64_r64(dst, MABS(param.memory()), reg); // mov [param],reg + emit_mov_m64_r64(dst, MABS(param.memory()), reg); // mov [param],reg else if (param.is_int_register()) { if (reg != param.ireg()) - emit_mov_r64_r64(dst, param.ireg(), reg); // mov param,reg + emit_mov_r64_r64(dst, param.ireg(), reg); // mov param,reg } } @@ -1738,18 +1738,18 @@ void drcbe_x64::emit_add_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() != 0 || param.immediate() != 0) { if (short_immediate(param.immediate())) - emit_add_r64_imm(dst, reg, param.immediate()); // add reg,param + emit_add_r64_imm(dst, reg, param.immediate()); // add reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_add_r64_r64(dst, reg, REG_R11); // add reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_add_r64_r64(dst, reg, REG_R11); // add reg,r11 } } } else if (param.is_memory()) - emit_add_r64_m64(dst, reg, MABS(param.memory())); // add reg,[param] + emit_add_r64_m64(dst, reg, MABS(param.memory())); // add reg,[param] else if (param.is_int_register()) - emit_add_r64_r64(dst, reg, param.ireg()); // add reg,param + emit_add_r64_r64(dst, reg, param.ireg()); // add reg,param } @@ -1765,19 +1765,19 @@ void drcbe_x64::emit_add_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() != 0 || param.immediate() != 0) { if (short_immediate(param.immediate())) - emit_add_m64_imm(dst, memref, param.immediate()); // add [mem],param + emit_add_m64_imm(dst, memref, param.immediate()); // add [mem],param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_add_m64_r64(dst, memref, REG_R11); // add [mem],r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_add_m64_r64(dst, memref, REG_R11); // add [mem],r11 } } } else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64(dst, reg, param); // mov reg,param - emit_add_m64_r64(dst, memref, reg); // add [dest],reg + emit_mov_r64_p64(dst, reg, param); // mov reg,param + emit_add_m64_r64(dst, memref, reg); // add [dest],reg } } @@ -1792,17 +1792,17 @@ void drcbe_x64::emit_adc_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (param.is_immediate()) { if (short_immediate(param.immediate())) - emit_adc_r64_imm(dst, reg, param.immediate()); // adc reg,param + emit_adc_r64_imm(dst, reg, param.immediate()); // adc reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_adc_r64_r64(dst, reg, REG_R11); // adc reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_adc_r64_r64(dst, reg, REG_R11); // adc reg,r11 } } else if (param.is_memory()) - emit_adc_r64_m64(dst, reg, MABS(param.memory())); // adc reg,[param] + emit_adc_r64_m64(dst, reg, MABS(param.memory())); // adc reg,[param] else if (param.is_int_register()) - emit_adc_r64_r64(dst, reg, param.ireg()); // adc reg,param + emit_adc_r64_r64(dst, reg, param.ireg()); // adc reg,param } @@ -1814,12 +1814,12 @@ void drcbe_x64::emit_adc_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p void drcbe_x64::emit_adc_m64_p64(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate() && short_immediate(param.immediate())) - emit_adc_m64_imm(dst, memref, param.immediate()); // adc [mem],param + emit_adc_m64_imm(dst, memref, param.immediate()); // adc [mem],param else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64_keepflags(dst, reg, param); // mov reg,param - emit_adc_m64_r64(dst, memref, reg); // adc [dest],reg + emit_mov_r64_p64_keepflags(dst, reg, param); // mov reg,param + emit_adc_m64_r64(dst, memref, reg); // adc [dest],reg } } @@ -1836,18 +1836,18 @@ void drcbe_x64::emit_sub_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() != 0 || param.immediate() != 0) { if (short_immediate(param.immediate())) - emit_sub_r64_imm(dst, reg, param.immediate()); // sub reg,param + emit_sub_r64_imm(dst, reg, param.immediate()); // sub reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_sub_r64_r64(dst, reg, REG_R11); // sub reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_sub_r64_r64(dst, reg, REG_R11); // sub reg,r11 } } } else if (param.is_memory()) - emit_sub_r64_m64(dst, reg, MABS(param.memory())); // sub reg,[param] + emit_sub_r64_m64(dst, reg, MABS(param.memory())); // sub reg,[param] else if (param.is_int_register()) - emit_sub_r64_r64(dst, reg, param.ireg()); // sub reg,param + emit_sub_r64_r64(dst, reg, param.ireg()); // sub reg,param } @@ -1863,19 +1863,19 @@ void drcbe_x64::emit_sub_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() != 0 || param.immediate() != 0) { if (short_immediate(param.immediate())) - emit_sub_m64_imm(dst, memref, param.immediate()); // sub [mem],param + emit_sub_m64_imm(dst, memref, param.immediate()); // sub [mem],param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_sub_m64_r64(dst, memref, REG_R11); // sub [mem],r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_sub_m64_r64(dst, memref, REG_R11); // sub [mem],r11 } } } else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64(dst, reg, param); // mov reg,param - emit_sub_m64_r64(dst, memref, reg); // sub [dest],reg + emit_mov_r64_p64(dst, reg, param); // mov reg,param + emit_sub_m64_r64(dst, memref, reg); // sub [dest],reg } } @@ -1890,17 +1890,17 @@ void drcbe_x64::emit_sbb_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (param.is_immediate()) { if (short_immediate(param.immediate())) - emit_sbb_r64_imm(dst, reg, param.immediate()); // sbb reg,param + emit_sbb_r64_imm(dst, reg, param.immediate()); // sbb reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_sbb_r64_r64(dst, reg, REG_R11); // sbb reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_sbb_r64_r64(dst, reg, REG_R11); // sbb reg,r11 } } else if (param.is_memory()) - emit_sbb_r64_m64(dst, reg, MABS(param.memory())); // sbb reg,[param] + emit_sbb_r64_m64(dst, reg, MABS(param.memory())); // sbb reg,[param] else if (param.is_int_register()) - emit_sbb_r64_r64(dst, reg, param.ireg()); // sbb reg,param + emit_sbb_r64_r64(dst, reg, param.ireg()); // sbb reg,param } @@ -1912,12 +1912,12 @@ void drcbe_x64::emit_sbb_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p void drcbe_x64::emit_sbb_m64_p64(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate() && short_immediate(param.immediate())) - emit_sbb_m64_imm(dst, memref, param.immediate()); // sbb [mem],param + emit_sbb_m64_imm(dst, memref, param.immediate()); // sbb [mem],param else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64_keepflags(dst, reg, param); // mov reg,param - emit_sbb_m64_r64(dst, memref, reg); // sbb [dest],reg + emit_mov_r64_p64_keepflags(dst, reg, param); // mov reg,param + emit_sbb_m64_r64(dst, memref, reg); // sbb [dest],reg } } @@ -1932,17 +1932,17 @@ void drcbe_x64::emit_cmp_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (param.is_immediate()) { if (short_immediate(param.immediate())) - emit_cmp_r64_imm(dst, reg, param.immediate()); // cmp reg,param + emit_cmp_r64_imm(dst, reg, param.immediate()); // cmp reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_cmp_r64_r64(dst, reg, REG_R11); // cmp reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_cmp_r64_r64(dst, reg, REG_R11); // cmp reg,r11 } } else if (param.is_memory()) - emit_cmp_r64_m64(dst, reg, MABS(param.memory())); // cmp reg,[param] + emit_cmp_r64_m64(dst, reg, MABS(param.memory())); // cmp reg,[param] else if (param.is_int_register()) - emit_cmp_r64_r64(dst, reg, param.ireg()); // cmp reg,param + emit_cmp_r64_r64(dst, reg, param.ireg()); // cmp reg,param } @@ -1954,12 +1954,12 @@ void drcbe_x64::emit_cmp_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p void drcbe_x64::emit_cmp_m64_p64(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate() && short_immediate(param.immediate())) - emit_cmp_m64_imm(dst, memref, param.immediate()); // cmp [dest],param + emit_cmp_m64_imm(dst, memref, param.immediate()); // cmp [dest],param else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64(dst, reg, param); // mov reg,param - emit_cmp_m64_r64(dst, memref, reg); // cmp [dest],reg + emit_mov_r64_p64(dst, reg, param); // mov reg,param + emit_cmp_m64_r64(dst, memref, reg); // cmp [dest],reg } } @@ -1976,18 +1976,18 @@ void drcbe_x64::emit_and_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() != 0 || param.immediate() != U64(0xffffffffffffffff)) { if (short_immediate(param.immediate())) - emit_and_r64_imm(dst, reg, param.immediate()); // and reg,param + emit_and_r64_imm(dst, reg, param.immediate()); // and reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_and_r64_r64(dst, reg, REG_R11); // and reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_and_r64_r64(dst, reg, REG_R11); // and reg,r11 } } } else if (param.is_memory()) - emit_and_r64_m64(dst, reg, MABS(param.memory())); // and reg,[param] + emit_and_r64_m64(dst, reg, MABS(param.memory())); // and reg,[param] else if (param.is_int_register()) - emit_and_r64_r64(dst, reg, param.ireg()); // and reg,param + emit_and_r64_r64(dst, reg, param.ireg()); // and reg,param } @@ -2003,19 +2003,19 @@ void drcbe_x64::emit_and_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() != 0 || param.immediate() != U64(0xffffffffffffffff)) { if (short_immediate(param.immediate())) - emit_and_m64_imm(dst, memref, param.immediate()); // and [mem],param + emit_and_m64_imm(dst, memref, param.immediate()); // and [mem],param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_and_m64_r64(dst, memref, REG_R11); // and [mem],r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_and_m64_r64(dst, memref, REG_R11); // and [mem],r11 } } } else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64(dst, reg, param); // mov reg,param - emit_and_m64_r64(dst, memref, reg); // and [dest],reg + emit_mov_r64_p64(dst, reg, param); // mov reg,param + emit_and_m64_r64(dst, memref, reg); // and [dest],reg } } @@ -2030,17 +2030,17 @@ void drcbe_x64::emit_test_r64_p64(x86code *&dst, UINT8 reg, const be_parameter & if (param.is_immediate()) { if (short_immediate(param.immediate())) - emit_test_r64_imm(dst, reg, param.immediate()); // test reg,param + emit_test_r64_imm(dst, reg, param.immediate()); // test reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_test_r64_r64(dst, reg, REG_R11); // test reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_test_r64_r64(dst, reg, REG_R11); // test reg,r11 } } else if (param.is_memory()) - emit_test_m64_r64(dst, MABS(param.memory()), reg); // test [param],reg + emit_test_m64_r64(dst, MABS(param.memory()), reg); // test [param],reg else if (param.is_int_register()) - emit_test_r64_r64(dst, reg, param.ireg()); // test reg,param + emit_test_r64_r64(dst, reg, param.ireg()); // test reg,param } @@ -2052,14 +2052,14 @@ void drcbe_x64::emit_test_r64_p64(x86code *&dst, UINT8 reg, const be_parameter & void drcbe_x64::emit_test_m64_p64(x86code *&dst, x86_memref memref, const be_parameter ¶m, const instruction &inst) { if (param.is_immediate() && short_immediate(param.immediate())) - emit_test_m64_imm(dst, memref, param.immediate()); // test [dest],param + emit_test_m64_imm(dst, memref, param.immediate()); // test [dest],param else if (param.is_memory()) { - emit_mov_r64_p64(dst, REG_EAX, param); // mov reg,param - emit_test_m64_r64(dst, memref, REG_EAX); // test [dest],reg + emit_mov_r64_p64(dst, REG_EAX, param); // mov reg,param + emit_test_m64_r64(dst, memref, REG_EAX); // test [dest],reg } else if (param.is_int_register()) - emit_test_m64_r64(dst, memref, param.ireg()); // test [dest],param + emit_test_m64_r64(dst, memref, param.ireg()); // test [dest],param } @@ -2075,18 +2075,18 @@ void drcbe_x64::emit_or_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &pa if (inst.flags() != 0 || param.immediate() != 0) { if (short_immediate(param.immediate())) - emit_or_r64_imm(dst, reg, param.immediate()); // or reg,param + emit_or_r64_imm(dst, reg, param.immediate()); // or reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_or_r64_r64(dst, reg, REG_R11); // or reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_or_r64_r64(dst, reg, REG_R11); // or reg,r11 } } } else if (param.is_memory()) - emit_or_r64_m64(dst, reg, MABS(param.memory())); // or reg,[param] + emit_or_r64_m64(dst, reg, MABS(param.memory())); // or reg,[param] else if (param.is_int_register()) - emit_or_r64_r64(dst, reg, param.ireg()); // or reg,param + emit_or_r64_r64(dst, reg, param.ireg()); // or reg,param } @@ -2102,19 +2102,19 @@ void drcbe_x64::emit_or_m64_p64(x86code *&dst, x86_memref memref, const be_param if (inst.flags() != 0 || param.immediate() != 0) { if (short_immediate(param.immediate())) - emit_or_m64_imm(dst, memref, param.immediate()); // or [mem],param + emit_or_m64_imm(dst, memref, param.immediate()); // or [mem],param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_or_m64_r64(dst, memref, REG_R11); // or [mem],r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_or_m64_r64(dst, memref, REG_R11); // or [mem],r11 } } } else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64(dst, reg, param); // mov reg,param - emit_or_m64_r64(dst, memref, reg); // or [dest],reg + emit_mov_r64_p64(dst, reg, param); // mov reg,param + emit_or_m64_r64(dst, memref, reg); // or [dest],reg } } @@ -2131,20 +2131,20 @@ void drcbe_x64::emit_xor_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() != 0 || param.immediate() != 0) { if (param.immediate() == U64(0xffffffffffffffff)) - emit_not_r64(dst, reg); // not reg + emit_not_r64(dst, reg); // not reg else if (short_immediate(param.immediate())) - emit_xor_r64_imm(dst, reg, param.immediate()); // xor reg,param + emit_xor_r64_imm(dst, reg, param.immediate()); // xor reg,param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_xor_r64_r64(dst, reg, REG_R11); // xor reg,r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_xor_r64_r64(dst, reg, REG_R11); // xor reg,r11 } } } else if (param.is_memory()) - emit_xor_r64_m64(dst, reg, MABS(param.memory())); // xor reg,[param] + emit_xor_r64_m64(dst, reg, MABS(param.memory())); // xor reg,[param] else if (param.is_int_register()) - emit_xor_r64_r64(dst, reg, param.ireg()); // xor reg,param + emit_xor_r64_r64(dst, reg, param.ireg()); // xor reg,param } @@ -2160,21 +2160,21 @@ void drcbe_x64::emit_xor_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() != 0 || param.immediate() != 0) { if (param.immediate() == U64(0xffffffffffffffff)) - emit_not_m64(dst, memref); // not [mem] + emit_not_m64(dst, memref); // not [mem] else if (short_immediate(param.immediate())) - emit_xor_m64_imm(dst, memref, param.immediate()); // xor [mem],param + emit_xor_m64_imm(dst, memref, param.immediate()); // xor [mem],param else { - emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param - emit_xor_m64_r64(dst, memref, REG_R11); // xor [mem],r11 + emit_mov_r64_imm(dst, REG_R11, param.immediate()); // mov r11,param + emit_xor_m64_r64(dst, memref, REG_R11); // xor [mem],r11 } } } else { int reg = param.select_register(REG_EAX); - emit_mov_r64_p64(dst, reg, param); // mov reg,param - emit_xor_m64_r64(dst, memref, reg); // xor [dest],reg + emit_mov_r64_p64(dst, reg, param); // mov reg,param + emit_xor_m64_r64(dst, memref, reg); // xor [dest],reg } } @@ -2191,12 +2191,12 @@ void drcbe_x64::emit_shl_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_shl_r64_imm(dst, reg, param.immediate()); // shl reg,param + emit_shl_r64_imm(dst, reg, param.immediate()); // shl reg,param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_shl_r64_cl(dst, reg); // shl reg,cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_shl_r64_cl(dst, reg); // shl reg,cl } } @@ -2213,12 +2213,12 @@ void drcbe_x64::emit_shl_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT64)param.immediate() == 0) ;// skip else - emit_shl_m64_imm(dst, memref, param.immediate()); // shl [dest],param + emit_shl_m64_imm(dst, memref, param.immediate()); // shl [dest],param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_shl_m64_cl(dst, memref); // shl [dest],cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_shl_m64_cl(dst, memref); // shl [dest],cl } } @@ -2235,12 +2235,12 @@ void drcbe_x64::emit_shr_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_shr_r64_imm(dst, reg, param.immediate()); // shr reg,param + emit_shr_r64_imm(dst, reg, param.immediate()); // shr reg,param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_shr_r64_cl(dst, reg); // shr reg,cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_shr_r64_cl(dst, reg); // shr reg,cl } } @@ -2257,12 +2257,12 @@ void drcbe_x64::emit_shr_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT64)param.immediate() == 0) ;// skip else - emit_shr_m64_imm(dst, memref, param.immediate()); // shr [dest],param + emit_shr_m64_imm(dst, memref, param.immediate()); // shr [dest],param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_shr_m64_cl(dst, memref); // shr [dest],cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_shr_m64_cl(dst, memref); // shr [dest],cl } } @@ -2279,12 +2279,12 @@ void drcbe_x64::emit_sar_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_sar_r64_imm(dst, reg, param.immediate()); // sar reg,param + emit_sar_r64_imm(dst, reg, param.immediate()); // sar reg,param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_sar_r64_cl(dst, reg); // sar reg,cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_sar_r64_cl(dst, reg); // sar reg,cl } } @@ -2301,12 +2301,12 @@ void drcbe_x64::emit_sar_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT64)param.immediate() == 0) ;// skip else - emit_sar_m64_imm(dst, memref, param.immediate()); // sar [dest],param + emit_sar_m64_imm(dst, memref, param.immediate()); // sar [dest],param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_sar_m64_cl(dst, memref); // sar [dest],cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_sar_m64_cl(dst, memref); // sar [dest],cl } } @@ -2323,12 +2323,12 @@ void drcbe_x64::emit_rol_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rol_r64_imm(dst, reg, param.immediate()); // rol reg,param + emit_rol_r64_imm(dst, reg, param.immediate()); // rol reg,param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_rol_r64_cl(dst, reg); // rol reg,cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_rol_r64_cl(dst, reg); // rol reg,cl } } @@ -2345,12 +2345,12 @@ void drcbe_x64::emit_rol_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT64)param.immediate() == 0) ;// skip else - emit_rol_m64_imm(dst, memref, param.immediate()); // rol [dest],param + emit_rol_m64_imm(dst, memref, param.immediate()); // rol [dest],param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_rol_m64_cl(dst, memref); // rol [dest],cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_rol_m64_cl(dst, memref); // rol [dest],cl } } @@ -2367,12 +2367,12 @@ void drcbe_x64::emit_ror_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_ror_r64_imm(dst, reg, param.immediate()); // ror reg,param + emit_ror_r64_imm(dst, reg, param.immediate()); // ror reg,param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_ror_r64_cl(dst, reg); // ror reg,cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_ror_r64_cl(dst, reg); // ror reg,cl } } @@ -2389,12 +2389,12 @@ void drcbe_x64::emit_ror_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT64)param.immediate() == 0) ;// skip else - emit_ror_m64_imm(dst, memref, param.immediate()); // ror [dest],param + emit_ror_m64_imm(dst, memref, param.immediate()); // ror [dest],param } else { - emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param - emit_ror_m64_cl(dst, memref); // ror [dest],cl + emit_mov_r64_p64(dst, REG_RCX, param); // mov rcx,param + emit_ror_m64_cl(dst, memref); // ror [dest],cl } } @@ -2411,12 +2411,12 @@ void drcbe_x64::emit_rcl_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rcl_r64_imm(dst, reg, param.immediate()); // rcl reg,param + emit_rcl_r64_imm(dst, reg, param.immediate()); // rcl reg,param } else { - emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param - emit_rcl_r64_cl(dst, reg); // rcl reg,cl + emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param + emit_rcl_r64_cl(dst, reg); // rcl reg,cl } } @@ -2433,12 +2433,12 @@ void drcbe_x64::emit_rcl_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT64)param.immediate() == 0) ;// skip else - emit_rcl_m64_imm(dst, memref, param.immediate()); // rcl [dest],param + emit_rcl_m64_imm(dst, memref, param.immediate()); // rcl [dest],param } else { - emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param - emit_rcl_m64_cl(dst, memref); // rcl [dest],cl + emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param + emit_rcl_m64_cl(dst, memref); // rcl [dest],cl } } @@ -2455,12 +2455,12 @@ void drcbe_x64::emit_rcr_r64_p64(x86code *&dst, UINT8 reg, const be_parameter &p if (inst.flags() == 0 && (UINT32)param.immediate() == 0) ;// skip else - emit_rcr_r64_imm(dst, reg, param.immediate()); // rcr reg,param + emit_rcr_r64_imm(dst, reg, param.immediate()); // rcr reg,param } else { - emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param - emit_rcr_r64_cl(dst, reg); // rcr reg,cl + emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param + emit_rcr_r64_cl(dst, reg); // rcr reg,cl } } @@ -2477,12 +2477,12 @@ void drcbe_x64::emit_rcr_m64_p64(x86code *&dst, x86_memref memref, const be_para if (inst.flags() == 0 && (UINT64)param.immediate() == 0) ;// skip else - emit_rcr_m64_imm(dst, memref, param.immediate()); // rcr [dest],param + emit_rcr_m64_imm(dst, memref, param.immediate()); // rcr [dest],param } else { - emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param - emit_rcr_m64_cl(dst, memref); // rcr [dest],cl + emit_mov_r64_p64_keepflags(dst, REG_RCX, param); // mov rcx,param + emit_rcr_m64_cl(dst, memref); // rcr [dest],cl } } @@ -2501,11 +2501,11 @@ void drcbe_x64::emit_movss_r128_p32(x86code *&dst, UINT8 reg, const be_parameter { assert(!param.is_immediate()); if (param.is_memory()) - emit_movss_r128_m32(dst, reg, MABS(param.memory())); // movss reg,[param] + emit_movss_r128_m32(dst, reg, MABS(param.memory())); // movss reg,[param] else if (param.is_float_register()) { if (reg != param.freg()) - emit_movss_r128_r128(dst, reg, param.freg()); // movss reg,param + emit_movss_r128_r128(dst, reg, param.freg()); // movss reg,param } } @@ -2519,11 +2519,11 @@ void drcbe_x64::emit_movss_p32_r128(x86code *&dst, const be_parameter ¶m, UI { assert(!param.is_immediate()); if (param.is_memory()) - emit_movss_m32_r128(dst, MABS(param.memory()), reg); // movss [param],reg + emit_movss_m32_r128(dst, MABS(param.memory()), reg); // movss [param],reg else if (param.is_float_register()) { if (reg != param.freg()) - emit_movss_r128_r128(dst, param.freg(), reg); // movss param,reg + emit_movss_r128_r128(dst, param.freg(), reg); // movss param,reg } } @@ -2537,11 +2537,11 @@ void drcbe_x64::emit_movsd_r128_p64(x86code *&dst, UINT8 reg, const be_parameter { assert(!param.is_immediate()); if (param.is_memory()) - emit_movsd_r128_m64(dst, reg, MABS(param.memory())); // movsd reg,[param] + emit_movsd_r128_m64(dst, reg, MABS(param.memory())); // movsd reg,[param] else if (param.is_float_register()) { if (reg != param.freg()) - emit_movsd_r128_r128(dst, reg, param.freg()); // movsd reg,param + emit_movsd_r128_r128(dst, reg, param.freg()); // movsd reg,param } } @@ -2555,11 +2555,11 @@ void drcbe_x64::emit_movsd_p64_r128(x86code *&dst, const be_parameter ¶m, UI { assert(!param.is_immediate()); if (param.is_memory()) - emit_movsd_m64_r128(dst, MABS(param.memory()), reg); // movsd [param],reg + emit_movsd_m64_r128(dst, MABS(param.memory()), reg); // movsd [param],reg else if (param.is_float_register()) { if (reg != param.freg()) - emit_movsd_r128_r128(dst, param.freg(), reg); // movsd param,reg + emit_movsd_r128_r128(dst, param.freg(), reg); // movsd param,reg } } @@ -2622,15 +2622,15 @@ void drcbe_x64::fixup_exception(drccodeptr *codeptr, void *param1, void *param2) ((UINT32 *)src)[-1] = dst - src; // then store the exception parameter - emit_mov_m32_p32(dst, MABS(&m_state.exp), exp); // mov [exp],exp + emit_mov_m32_p32(dst, MABS(&m_state.exp), exp); // mov [exp],exp // push the original return address on the stack - emit_lea_r64_m64(dst, REG_RAX, MABS(src)); // lea rax,[return] - emit_push_r64(dst, REG_RAX); // push rax + emit_lea_r64_m64(dst, REG_RAX, MABS(src)); // lea rax,[return] + emit_push_r64(dst, REG_RAX); // push rax if (*targetptr != NULL) - emit_jmp(dst, *targetptr); // jmp *targetptr + emit_jmp(dst, *targetptr); // jmp *targetptr else - emit_jmp_m64(dst, MABS(targetptr)); // jmp [targetptr] + emit_jmp_m64(dst, MABS(targetptr)); // jmp [targetptr] *codeptr = dst; } @@ -2681,14 +2681,14 @@ void drcbe_x64::op_handle(x86code *&dst, const instruction &inst) // emit a jump around the stack adjust in case code falls through here emit_link skip; - emit_jmp_short_link(dst, skip); // jmp skip + emit_jmp_short_link(dst, skip); // jmp skip // register the current pointer for the handle inst.param(0).handle().set_codeptr(dst); // by default, the handle points to prolog code that moves the stack pointer - emit_lea_r64_m64(dst, REG_RSP, MBD(REG_RSP, -40)); // lea rsp,[rsp-40] - resolve_link(dst, skip); // skip: + emit_lea_r64_m64(dst, REG_RSP, MBD(REG_RSP, -40)); // lea rsp,[rsp-40] + resolve_link(dst, skip); // skip: } @@ -2789,17 +2789,17 @@ void drcbe_x64::op_debug(x86code *&dst, const instruction &inst) be_parameter pcp(*this, inst.param(0), PTYPE_MRI); // test and branch - emit_mov_r64_imm(dst, REG_RAX, (FPTR)&m_device.machine().debug_flags); // mov rax,&debug_flags - emit_test_m32_imm(dst, MBD(REG_RAX, 0), DEBUG_FLAG_CALL_HOOK); // test [debug_flags],DEBUG_FLAG_CALL_HOOK + emit_mov_r64_imm(dst, REG_RAX, (FPTR)&m_device.machine().debug_flags); // mov rax,&debug_flags + emit_test_m32_imm(dst, MBD(REG_RAX, 0), DEBUG_FLAG_CALL_HOOK); // test [debug_flags],DEBUG_FLAG_CALL_HOOK emit_link skip = { 0 }; - emit_jcc_short_link(dst, x64emit::COND_Z, skip); // jz skip + emit_jcc_short_link(dst, x64emit::COND_Z, skip); // jz skip // push the parameter - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)&m_device); // mov param1,device - emit_mov_r32_p32(dst, REG_PARAM2, pcp); // mov param2,pcp - emit_smart_call_m64(dst, &m_near.debug_cpu_instruction_hook); // call debug_cpu_instruction_hook + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)&m_device); // mov param1,device + emit_mov_r32_p32(dst, REG_PARAM2, pcp); // mov param2,pcp + emit_smart_call_m64(dst, &m_near.debug_cpu_instruction_hook); // call debug_cpu_instruction_hook - resolve_link(dst, skip); // skip: + resolve_link(dst, skip); // skip: } } @@ -2819,11 +2819,11 @@ void drcbe_x64::op_exit(x86code *&dst, const instruction &inst) be_parameter retp(*this, inst.param(0), PTYPE_MRI); // load the parameter into EAX - emit_mov_r32_p32(dst, REG_EAX, retp); // mov eax,retp + emit_mov_r32_p32(dst, REG_EAX, retp); // mov eax,retp if (inst.condition() == uml::COND_ALWAYS) - emit_jmp(dst, m_exit); // jmp exit + emit_jmp(dst, m_exit); // jmp exit else - emit_jcc(dst, X86_CONDITION(inst.condition()), m_exit); // jcc exit + emit_jcc(dst, X86_CONDITION(inst.condition()), m_exit); // jcc exit } @@ -2852,7 +2852,7 @@ void drcbe_x64::op_hashjmp(x86code *&dst, const instruction &inst) } // load the stack base one word early so we end up at the right spot after our call below - emit_mov_r64_m64(dst, REG_RSP, MABS(&m_near.hashstacksave)); // mov rsp,[hashstacksave] + emit_mov_r64_m64(dst, REG_RSP, MABS(&m_near.hashstacksave)); // mov rsp,[hashstacksave] // fixed mode cases if (modep.is_immediate() && m_hash.is_mode_populated(modep.immediate())) @@ -2869,20 +2869,20 @@ void drcbe_x64::op_hashjmp(x86code *&dst, const instruction &inst) // a fixed mode but variable PC else { - emit_mov_r32_p32(dst, REG_EAX, pcp); // mov eax,pcp - emit_mov_r32_r32(dst, REG_EDX, REG_EAX); // mov edx,eax - emit_shr_r32_imm(dst, REG_EDX, m_hash.l1shift()); // shr edx,l1shift - emit_and_r32_imm(dst, REG_EAX, m_hash.l2mask() << m_hash.l2shift()); // and eax,l2mask << l2shift + emit_mov_r32_p32(dst, REG_EAX, pcp); // mov eax,pcp + emit_mov_r32_r32(dst, REG_EDX, REG_EAX); // mov edx,eax + emit_shr_r32_imm(dst, REG_EDX, m_hash.l1shift()); // shr edx,l1shift + emit_and_r32_imm(dst, REG_EAX, m_hash.l2mask() << m_hash.l2shift()); // and eax,l2mask << l2shift emit_mov_r64_m64(dst, REG_RDX, MBISD(REG_RBP, REG_RDX, 8, offset_from_rbp(&m_hash.base()[modep.immediate()][0]))); // mov rdx,hash[modep+edx*8] - emit_call_m64(dst, MBISD(REG_RDX, REG_RAX, 8 >> m_hash.l2shift(), 0)); // call [rdx+rax*shift] + emit_call_m64(dst, MBISD(REG_RDX, REG_RAX, 8 >> m_hash.l2shift(), 0)); // call [rdx+rax*shift] } } else { // variable mode int modereg = modep.select_register(REG_ECX); - emit_mov_r32_p32(dst, modereg, modep); // mov modereg,modep + emit_mov_r32_p32(dst, modereg, modep); // mov modereg,modep emit_mov_r64_m64(dst, REG_RCX, MBISD(REG_RBP, modereg, 8, offset_from_rbp(m_hash.base()))); // mov rcx,hash[modereg*8] @@ -2891,19 +2891,19 @@ void drcbe_x64::op_hashjmp(x86code *&dst, const instruction &inst) { UINT32 l1val = (pcp.immediate() >> m_hash.l1shift()) & m_hash.l1mask(); UINT32 l2val = (pcp.immediate() >> m_hash.l2shift()) & m_hash.l2mask(); - emit_mov_r64_m64(dst, REG_RDX, MBD(REG_RCX, l1val*8)); // mov rdx,[rcx+l1val*8] - emit_call_m64(dst, MBD(REG_RDX, l2val*8)); // call [l2val*8] + emit_mov_r64_m64(dst, REG_RDX, MBD(REG_RCX, l1val*8)); // mov rdx,[rcx+l1val*8] + emit_call_m64(dst, MBD(REG_RDX, l2val*8)); // call [l2val*8] } // variable PC else { - emit_mov_r32_p32(dst, REG_EAX, pcp); // mov eax,pcp - emit_mov_r32_r32(dst, REG_EDX, REG_EAX); // mov edx,eax - emit_shr_r32_imm(dst, REG_EDX, m_hash.l1shift()); // shr edx,l1shift - emit_mov_r64_m64(dst, REG_RDX, MBISD(REG_RCX, REG_RDX, 8, 0)); // mov rdx,[rcx+rdx*8] - emit_and_r32_imm(dst, REG_EAX, m_hash.l2mask() << m_hash.l2shift()); // and eax,l2mask << l2shift - emit_call_m64(dst, MBISD(REG_RDX, REG_RAX, 8 >> m_hash.l2shift(), 0)); // call [rdx+rax*shift] + emit_mov_r32_p32(dst, REG_EAX, pcp); // mov eax,pcp + emit_mov_r32_r32(dst, REG_EDX, REG_EAX); // mov edx,eax + emit_shr_r32_imm(dst, REG_EDX, m_hash.l1shift()); // shr edx,l1shift + emit_mov_r64_m64(dst, REG_RDX, MBISD(REG_RCX, REG_RDX, 8, 0)); // mov rdx,[rcx+rdx*8] + emit_and_r32_imm(dst, REG_EAX, m_hash.l2mask() << m_hash.l2shift()); // and eax,l2mask << l2shift + emit_call_m64(dst, MBISD(REG_RDX, REG_RAX, 8 >> m_hash.l2shift(), 0)); // call [rdx+rax*shift] } } @@ -2911,9 +2911,9 @@ void drcbe_x64::op_hashjmp(x86code *&dst, const instruction &inst) if (LOG_HASHJMPS) emit_smart_call_m64(dst, &m_near.debug_log_hashjmp_fail); - emit_mov_m32_p32(dst, MABS(&m_state.exp), pcp); // mov [exp],param - emit_sub_r64_imm(dst, REG_RSP, 8); // sub rsp,8 - emit_call_m64(dst, MABS(exp.handle().codeptr_addr())); // call [exp] + emit_mov_m32_p32(dst, MABS(&m_state.exp), pcp); // mov [exp],param + emit_sub_r64_imm(dst, REG_RSP, 8); // sub rsp,8 + emit_call_m64(dst, MABS(exp.handle().codeptr_addr())); // call [exp] } @@ -2937,9 +2937,9 @@ void drcbe_x64::op_jmp(x86code *&dst, const instruction &inst) if (jmptarget == NULL) jmptarget = dst + 0x7ffffff0; if (inst.condition() == uml::COND_ALWAYS) - emit_jmp(dst, jmptarget); // jmp target + emit_jmp(dst, jmptarget); // jmp target else - emit_jcc(dst, X86_CONDITION(inst.condition()), jmptarget); // jcc target + emit_jcc(dst, X86_CONDITION(inst.condition()), jmptarget); // jcc target } @@ -2966,17 +2966,17 @@ void drcbe_x64::op_exh(x86code *&dst, const instruction &inst) // perform the exception processing inline if unconditional if (inst.condition() == uml::COND_ALWAYS) { - emit_mov_m32_p32(dst, MABS(&m_state.exp), exp); // mov [exp],exp + emit_mov_m32_p32(dst, MABS(&m_state.exp), exp); // mov [exp],exp if (*targetptr != NULL) - emit_call(dst, *targetptr); // call *targetptr + emit_call(dst, *targetptr); // call *targetptr else - emit_call_m64(dst, MABS(targetptr)); // call [targetptr] + emit_call_m64(dst, MABS(targetptr)); // call [targetptr] } // otherwise, jump to an out-of-band handler else { - emit_jcc(dst, X86_CONDITION(inst.condition()), dst + 0x7ffffff0); // jcc exception + emit_jcc(dst, X86_CONDITION(inst.condition()), dst + 0x7ffffff0); // jcc exception m_cache.request_oob_codegen(m_fixup_exception, dst, &const_cast<instruction &>(inst)); } } @@ -3003,17 +3003,17 @@ void drcbe_x64::op_callh(x86code *&dst, const instruction &inst) // skip if conditional emit_link skip = { 0 }; if (inst.condition() != uml::COND_ALWAYS) - emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip + emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip // jump through the handle; directly if a normal jump if (*targetptr != NULL) - emit_call(dst, *targetptr); // call *targetptr + emit_call(dst, *targetptr); // call *targetptr else - emit_call_m64(dst, MABS(targetptr)); // call [targetptr] + emit_call_m64(dst, MABS(targetptr)); // call [targetptr] // resolve the conditional link if (inst.condition() != uml::COND_ALWAYS) - resolve_link(dst, skip); // skip: + resolve_link(dst, skip); // skip: } @@ -3032,15 +3032,15 @@ void drcbe_x64::op_ret(x86code *&dst, const instruction &inst) // skip if conditional emit_link skip = { 0 }; if (inst.condition() != uml::COND_ALWAYS) - emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip + emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip // return - emit_lea_r64_m64(dst, REG_RSP, MBD(REG_RSP, 40)); // lea rsp,[rsp+40] - emit_ret(dst); // ret + emit_lea_r64_m64(dst, REG_RSP, MBD(REG_RSP, 40)); // lea rsp,[rsp+40] + emit_ret(dst); // ret // resolve the conditional link if (inst.condition() != uml::COND_ALWAYS) - resolve_link(dst, skip); // skip: + resolve_link(dst, skip); // skip: } @@ -3063,15 +3063,15 @@ void drcbe_x64::op_callc(x86code *&dst, const instruction &inst) // skip if conditional emit_link skip = { 0 }; if (inst.condition() != uml::COND_ALWAYS) - emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip + emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip // perform the call - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)paramp.memory()); // mov param1,paramp - emit_smart_call_r64(dst, (x86code *)(FPTR)funcp.cfunc(), REG_RAX); // call funcp + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)paramp.memory()); // mov param1,paramp + emit_smart_call_r64(dst, (x86code *)(FPTR)funcp.cfunc(), REG_RAX); // call funcp // resolve the conditional link if (inst.condition() != uml::COND_ALWAYS) - resolve_link(dst, skip); // skip: + resolve_link(dst, skip); // skip: } @@ -3090,13 +3090,13 @@ void drcbe_x64::op_recover(x86code *&dst, const instruction &inst) be_parameter dstp(*this, inst.param(0), PTYPE_MR); // call the recovery code - emit_mov_r64_m64(dst, REG_RAX, MABS(&m_near.stacksave)); // mov rax,stacksave - emit_mov_r64_m64(dst, REG_RAX, MBD(REG_RAX, -8)); // mov rax,[rax-4] - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)&m_map); // mov param1,m_map - emit_lea_r64_m64(dst, REG_PARAM2, MBD(REG_RAX, -1)); // lea param2,[rax-1] - emit_mov_r64_imm(dst, REG_PARAM3, inst.param(1).mapvar()); // mov param3,param[1].value - emit_smart_call_m64(dst, &m_near.drcmap_get_value); // call drcmap_get_value - emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax + emit_mov_r64_m64(dst, REG_RAX, MABS(&m_near.stacksave)); // mov rax,stacksave + emit_mov_r64_m64(dst, REG_RAX, MBD(REG_RAX, -8)); // mov rax,[rax-4] + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)&m_map); // mov param1,m_map + emit_lea_r64_m64(dst, REG_PARAM2, MBD(REG_RAX, -1)); // lea param2,[rax-1] + emit_mov_r64_imm(dst, REG_PARAM3, inst.param(1).mapvar()); // mov param3,param[1].value + emit_smart_call_m64(dst, &m_near.drcmap_get_value); // call drcmap_get_value + emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax } @@ -3124,16 +3124,16 @@ void drcbe_x64::op_setfmod(x86code *&dst, const instruction &inst) if (srcp.is_immediate()) { int value = srcp.immediate() & 3; - emit_mov_m8_imm(dst, MABS(&m_state.fmod), value); // mov [fmod],srcp - emit_ldmxcsr_m32(dst, MABS(&m_near.ssecontrol[value])); // ldmxcsr fp_control[srcp] + emit_mov_m8_imm(dst, MABS(&m_state.fmod), value); // mov [fmod],srcp + emit_ldmxcsr_m32(dst, MABS(&m_near.ssecontrol[value])); // ldmxcsr fp_control[srcp] } // register/memory case else { - emit_mov_r32_p32(dst, REG_EAX, srcp); // mov eax,srcp - emit_and_r32_imm(dst, REG_EAX, 3); // and eax,3 - emit_mov_m8_r8(dst, MABS(&m_state.fmod), REG_AL); // mov [fmod],al + emit_mov_r32_p32(dst, REG_EAX, srcp); // mov eax,srcp + emit_and_r32_imm(dst, REG_EAX, 3); // and eax,3 + emit_mov_m8_r8(dst, MABS(&m_state.fmod), REG_AL); // mov [fmod],al emit_ldmxcsr_m32(dst, MBISD(REG_RBP, REG_RAX, 4, offset_from_rbp(&m_near.ssecontrol[0]))); // ldmxcsr fp_control[eax] } @@ -3156,11 +3156,11 @@ void drcbe_x64::op_getfmod(x86code *&dst, const instruction &inst) // fetch the current mode and store to the destination if (dstp.is_int_register()) - emit_movzx_r32_m8(dst, dstp.ireg(), MABS(&m_state.fmod)); // movzx reg,[fmod] + emit_movzx_r32_m8(dst, dstp.ireg(), MABS(&m_state.fmod)); // movzx reg,[fmod] else { - emit_movzx_r32_m8(dst, REG_EAX, MABS(&m_state.fmod)); // movzx eax,[fmod] - emit_mov_m32_r32(dst, MABS(dstp.memory()), REG_EAX); // mov [dstp],eax + emit_movzx_r32_m8(dst, REG_EAX, MABS(&m_state.fmod)); // movzx eax,[fmod] + emit_mov_m32_r32(dst, MABS(dstp.memory()), REG_EAX); // mov [dstp],eax } } @@ -3181,11 +3181,11 @@ void drcbe_x64::op_getexp(x86code *&dst, const instruction &inst) // fetch the exception parameter and store to the destination if (dstp.is_int_register()) - emit_mov_r32_m32(dst, dstp.ireg(), MABS(&m_state.exp)); // mov reg,[exp] + emit_mov_r32_m32(dst, dstp.ireg(), MABS(&m_state.exp)); // mov reg,[exp] else { - emit_mov_r32_m32(dst, REG_EAX, MABS(&m_state.exp)); // mov eax,[exp] - emit_mov_m32_r32(dst, MABS(dstp.memory()), REG_EAX); // mov [dstp],eax + emit_mov_r32_m32(dst, REG_EAX, MABS(&m_state.exp)); // mov eax,[exp] + emit_mov_m32_r32(dst, MABS(dstp.memory()), REG_EAX); // mov [dstp],eax } } @@ -3220,93 +3220,93 @@ void drcbe_x64::op_getflgs(x86code *&dst, const instruction &inst) { // single flags only case FLAG_C: - emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al - emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al + emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al + emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al break; case FLAG_V: - emit_setcc_r8(dst, x64emit::COND_O, REG_AL); // seto al - emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al - emit_shl_r32_imm(dst, dstreg, 1); // shl dstreg,1 + emit_setcc_r8(dst, x64emit::COND_O, REG_AL); // seto al + emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al + emit_shl_r32_imm(dst, dstreg, 1); // shl dstreg,1 break; case FLAG_Z: - emit_setcc_r8(dst, x64emit::COND_Z, REG_AL); // setz al - emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al - emit_shl_r32_imm(dst, dstreg, 2); // shl dstreg,2 + emit_setcc_r8(dst, x64emit::COND_Z, REG_AL); // setz al + emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al + emit_shl_r32_imm(dst, dstreg, 2); // shl dstreg,2 break; case FLAG_S: - emit_setcc_r8(dst, x64emit::COND_S, REG_AL); // sets al - emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al - emit_shl_r32_imm(dst, dstreg, 3); // shl dstreg,3 + emit_setcc_r8(dst, x64emit::COND_S, REG_AL); // sets al + emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al + emit_shl_r32_imm(dst, dstreg, 3); // shl dstreg,3 break; case FLAG_U: - emit_setcc_r8(dst, x64emit::COND_P, REG_AL); // setp al - emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al - emit_shl_r32_imm(dst, dstreg, 4); // shl dstreg,4 + emit_setcc_r8(dst, x64emit::COND_P, REG_AL); // setp al + emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al + emit_shl_r32_imm(dst, dstreg, 4); // shl dstreg,4 break; // carry plus another flag case FLAG_C | FLAG_V: - emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al - emit_setcc_r8(dst, x64emit::COND_O, REG_CL); // seto cl - emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al - emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl - emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 2, 0)); // lea dstreg,[eax+ecx*2] + emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al + emit_setcc_r8(dst, x64emit::COND_O, REG_CL); // seto cl + emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al + emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl + emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 2, 0)); // lea dstreg,[eax+ecx*2] break; case FLAG_C | FLAG_Z: - emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al - emit_setcc_r8(dst, x64emit::COND_Z, REG_CL); // setz cl - emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al - emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl - emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 4, 0)); // lea dstreg,[eax+ecx*4] + emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al + emit_setcc_r8(dst, x64emit::COND_Z, REG_CL); // setz cl + emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al + emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl + emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 4, 0)); // lea dstreg,[eax+ecx*4] break; case FLAG_C | FLAG_S: - emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al - emit_setcc_r8(dst, x64emit::COND_S, REG_CL); // sets cl - emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al - emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl - emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 8, 0)); // lea dstreg,[eax+ecx*8] + emit_setcc_r8(dst, x64emit::COND_C, REG_AL); // setc al + emit_setcc_r8(dst, x64emit::COND_S, REG_CL); // sets cl + emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al + emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl + emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 8, 0)); // lea dstreg,[eax+ecx*8] break; // overflow plus another flag case FLAG_V | FLAG_Z: - emit_setcc_r8(dst, x64emit::COND_O, REG_AL); // seto al - emit_setcc_r8(dst, x64emit::COND_Z, REG_CL); // setz cl - emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al - emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl - emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 2, 0)); // lea dstreg,[eax+ecx*2] - emit_shl_r32_imm(dst, dstreg, 1); // shl dstreg,1 + emit_setcc_r8(dst, x64emit::COND_O, REG_AL); // seto al + emit_setcc_r8(dst, x64emit::COND_Z, REG_CL); // setz cl + emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al + emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,cl + emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 2, 0)); // lea dstreg,[eax+ecx*2] + emit_shl_r32_imm(dst, dstreg, 1); // shl dstreg,1 break; case FLAG_V | FLAG_S: - emit_setcc_r8(dst, x64emit::COND_O, REG_AL); // seto al - emit_setcc_r8(dst, x64emit::COND_S, REG_CL); // sets cl - emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al - emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,al - emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 4, 0)); // lea dstreg,[eax+ecx*4] - emit_shl_r32_imm(dst, dstreg, 1); // shl dstreg,1 + emit_setcc_r8(dst, x64emit::COND_O, REG_AL); // seto al + emit_setcc_r8(dst, x64emit::COND_S, REG_CL); // sets cl + emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al + emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,al + emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 4, 0)); // lea dstreg,[eax+ecx*4] + emit_shl_r32_imm(dst, dstreg, 1); // shl dstreg,1 break; // zero plus another flag case FLAG_Z | FLAG_S: - emit_setcc_r8(dst, x64emit::COND_Z, REG_AL); // setz al - emit_setcc_r8(dst, x64emit::COND_S, REG_CL); // sets cl - emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al - emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,al - emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 2, 0)); // lea dstreg,[eax+ecx*2] - emit_shl_r32_imm(dst, dstreg, 2); // shl dstreg,2 + emit_setcc_r8(dst, x64emit::COND_Z, REG_AL); // setz al + emit_setcc_r8(dst, x64emit::COND_S, REG_CL); // sets cl + emit_movzx_r32_r8(dst, REG_EAX, REG_AL); // movzx eax,al + emit_movzx_r32_r8(dst, REG_ECX, REG_CL); // movzx ecx,al + emit_lea_r32_m32(dst, dstreg, MBISD(REG_EAX, REG_ECX, 2, 0)); // lea dstreg,[eax+ecx*2] + emit_shl_r32_imm(dst, dstreg, 2); // shl dstreg,2 break; // default cases default: - emit_pushf(dst); // pushf - emit_pop_r64(dst, REG_EAX); // pop eax - emit_and_r32_imm(dst, REG_EAX, flagmask); // and eax,flagmask + emit_pushf(dst); // pushf + emit_pop_r64(dst, REG_EAX); // pop eax + emit_and_r32_imm(dst, REG_EAX, flagmask); // and eax,flagmask emit_movzx_r32_m8(dst, dstreg, MBISD(REG_RBP, REG_RAX, 1, offset_from_rbp(&m_near.flagsmap[0]))); // movzx dstreg,[flags_map] break; @@ -3314,11 +3314,11 @@ void drcbe_x64::op_getflgs(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg // 64-bit form else if (inst.size() == 8) - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } @@ -3337,21 +3337,21 @@ void drcbe_x64::op_save(x86code *&dst, const instruction &inst) be_parameter dstp(*this, inst.param(0), PTYPE_M); // copy live state to the destination - emit_mov_r64_imm(dst, REG_RCX, (FPTR)dstp.memory()); // mov rcx,dstp + emit_mov_r64_imm(dst, REG_RCX, (FPTR)dstp.memory()); // mov rcx,dstp // copy flags - emit_pushf(dst); // pushf - emit_pop_r64(dst, REG_RAX); // pop rax - emit_and_r32_imm(dst, REG_EAX, 0x8c5); // and eax,0x8c5 + emit_pushf(dst); // pushf + emit_pop_r64(dst, REG_RAX); // pop rax + emit_and_r32_imm(dst, REG_EAX, 0x8c5); // and eax,0x8c5 emit_mov_r8_m8(dst, REG_AL, MBISD(REG_RBP, REG_RAX, 1, offset_from_rbp(&m_near.flagsmap[0]))); // mov al,[flags_map] - emit_mov_m8_r8(dst, MBD(REG_RCX, offsetof(drcuml_machine_state, flags)), REG_AL); // mov state->flags,al + emit_mov_m8_r8(dst, MBD(REG_RCX, offsetof(drcuml_machine_state, flags)), REG_AL); // mov state->flags,al // copy fmod and exp - emit_mov_r8_m8(dst, REG_AL, MABS(&m_state.fmod)); // mov al,[fmod] - emit_mov_m8_r8(dst, MBD(REG_RCX, offsetof(drcuml_machine_state, fmod)), REG_AL); // mov state->fmod,al - emit_mov_r32_m32(dst, REG_EAX, MABS(&m_state.exp)); // mov eax,[exp] - emit_mov_m32_r32(dst, MBD(REG_RCX, offsetof(drcuml_machine_state, exp)), REG_EAX); // mov state->exp,eax + emit_mov_r8_m8(dst, REG_AL, MABS(&m_state.fmod)); // mov al,[fmod] + emit_mov_m8_r8(dst, MBD(REG_RCX, offsetof(drcuml_machine_state, fmod)), REG_AL); // mov state->fmod,al + emit_mov_r32_m32(dst, REG_EAX, MABS(&m_state.exp)); // mov eax,[exp] + emit_mov_m32_r32(dst, MBD(REG_RCX, offsetof(drcuml_machine_state, exp)), REG_EAX); // mov state->exp,eax // copy integer registers int regoffs = offsetof(drcuml_machine_state, r); @@ -3395,7 +3395,7 @@ void drcbe_x64::op_restore(x86code *&dst, const instruction &inst) be_parameter srcp(*this, inst.param(0), PTYPE_M); // copy live state from the destination - emit_mov_r64_imm(dst, REG_ECX, (FPTR)srcp.memory()); // mov rcx,dstp + emit_mov_r64_imm(dst, REG_ECX, (FPTR)srcp.memory()); // mov rcx,dstp // copy integer registers int regoffs = offsetof(drcuml_machine_state, r); @@ -3425,17 +3425,17 @@ void drcbe_x64::op_restore(x86code *&dst, const instruction &inst) // copy fmod and exp emit_movzx_r32_m8(dst, REG_EAX, MBD(REG_RCX, offsetof(drcuml_machine_state, fmod)));// movzx eax,state->fmod - emit_and_r32_imm(dst, REG_EAX, 3); // and eax,3 - emit_mov_m8_r8(dst, MABS(&m_state.fmod), REG_AL); // mov [fmod],al + emit_and_r32_imm(dst, REG_EAX, 3); // and eax,3 + emit_mov_m8_r8(dst, MABS(&m_state.fmod), REG_AL); // mov [fmod],al emit_ldmxcsr_m32(dst, MBISD(REG_RBP, REG_RAX, 4, offset_from_rbp(&m_near.ssecontrol[0]))); - emit_mov_r32_m32(dst, REG_EAX, MBD(REG_RCX, offsetof(drcuml_machine_state, exp))); // mov eax,state->exp - emit_mov_m32_r32(dst, MABS(&m_state.exp), REG_EAX); // mov [exp],eax + emit_mov_r32_m32(dst, REG_EAX, MBD(REG_RCX, offsetof(drcuml_machine_state, exp))); // mov eax,state->exp + emit_mov_m32_r32(dst, MABS(&m_state.exp), REG_EAX); // mov [exp],eax // copy flags emit_movzx_r32_m8(dst, REG_EAX, MBD(REG_RCX, offsetof(drcuml_machine_state, flags)));// movzx eax,state->flags emit_push_m64(dst, MBISD(REG_RBP, REG_RAX, 8, offset_from_rbp(&m_near.flagsunmap[0]))); // push flags_unmap[eax*8] - emit_popf(dst); // popf + emit_popf(dst); // popf } @@ -3479,9 +3479,9 @@ void drcbe_x64::op_load(x86code *&dst, const instruction &inst) else if (size == SIZE_WORD) emit_movzx_r32_m16(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate()));// movzx dstreg,[basep + scale*indp] else if (size == SIZE_DWORD) - emit_mov_r32_m32(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] + emit_mov_r32_m32(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] else if (size == SIZE_QWORD) - emit_mov_r64_m64(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] + emit_mov_r64_m64(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] } // other index @@ -3490,20 +3490,20 @@ void drcbe_x64::op_load(x86code *&dst, const instruction &inst) int indreg = indp.select_register(REG_ECX); emit_movsx_r64_p32(dst, indreg, indp); if (size == SIZE_BYTE) - emit_movzx_r32_m8(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // movzx dstreg,[basep + scale*indp] + emit_movzx_r32_m8(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // movzx dstreg,[basep + scale*indp] else if (size == SIZE_WORD) - emit_movzx_r32_m16(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // movzx dstreg,[basep + scale*indp] + emit_movzx_r32_m16(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // movzx dstreg,[basep + scale*indp] else if (size == SIZE_DWORD) - emit_mov_r32_m32(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] + emit_mov_r32_m32(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] else if (size == SIZE_QWORD) - emit_mov_r64_m64(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] + emit_mov_r64_m64(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] } // store result if (inst.size() == 4) - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg else - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } @@ -3545,7 +3545,7 @@ void drcbe_x64::op_loads(x86code *&dst, const instruction &inst) else if (size == SIZE_WORD) emit_movsx_r32_m16(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate()));// movsx dstreg,[basep + scale*indp] else if (size == SIZE_DWORD) - emit_mov_r32_m32(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] + emit_mov_r32_m32(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] } else if (inst.size() == 8) { @@ -3556,7 +3556,7 @@ void drcbe_x64::op_loads(x86code *&dst, const instruction &inst) else if (size == SIZE_DWORD) emit_movsxd_r64_m32(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate()));// movsxd dstreg,[basep + scale*indp] else if (size == SIZE_QWORD) - emit_mov_r64_m64(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] + emit_mov_r64_m64(dst, dstreg, MBD(basereg, baseoffs + scale*indp.immediate())); // mov dstreg,[basep + scale*indp] } } @@ -3572,7 +3572,7 @@ void drcbe_x64::op_loads(x86code *&dst, const instruction &inst) else if (size == SIZE_WORD) emit_movsx_r32_m16(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs));// movsx dstreg,[basep + scale*indp] else if (size == SIZE_DWORD) - emit_mov_r32_m32(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] + emit_mov_r32_m32(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] } else if (inst.size() == 8) { @@ -3583,15 +3583,15 @@ void drcbe_x64::op_loads(x86code *&dst, const instruction &inst) else if (size == SIZE_DWORD) emit_movsxd_r64_m32(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs));// movsxd dstreg,[basep + scale*indp] else if (size == SIZE_QWORD) - emit_mov_r64_m64(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] + emit_mov_r64_m64(dst, dstreg, MBISD(basereg, indreg, scale, baseoffs)); // mov dstreg,[basep + scale*indp] } } // store result if (inst.size() == 4) - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg else - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } @@ -3651,17 +3651,17 @@ void drcbe_x64::op_store(x86code *&dst, const instruction &inst) else { if (size != SIZE_QWORD) - emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp + emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp else - emit_mov_r64_p64(dst, srcreg, srcp); // mov srcreg,srcp + emit_mov_r64_p64(dst, srcreg, srcp); // mov srcreg,srcp if (size == SIZE_BYTE) - emit_mov_m8_r8(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg + emit_mov_m8_r8(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg else if (size == SIZE_WORD) - emit_mov_m16_r16(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg + emit_mov_m16_r16(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg else if (size == SIZE_DWORD) - emit_mov_m32_r32(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg + emit_mov_m32_r32(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg else if (size == SIZE_QWORD) - emit_mov_m64_r64(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg + emit_mov_m64_r64(dst, MBD(basereg, baseoffs + scale*indp.immediate()), srcreg); // mov [basep + scale*indp],srcreg } } @@ -3669,7 +3669,7 @@ void drcbe_x64::op_store(x86code *&dst, const instruction &inst) else { int indreg = indp.select_register(REG_ECX); - emit_movsx_r64_p32(dst, indreg, indp); // mov indreg,indp + emit_movsx_r64_p32(dst, indreg, indp); // mov indreg,indp // immediate source if (srcp.is_immediate()) @@ -3697,17 +3697,17 @@ void drcbe_x64::op_store(x86code *&dst, const instruction &inst) else { if (size != SIZE_QWORD) - emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp + emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp else - emit_mov_r64_p64(dst, srcreg, srcp); // mov edx:srcreg,srcp + emit_mov_r64_p64(dst, srcreg, srcp); // mov edx:srcreg,srcp if (size == SIZE_BYTE) - emit_mov_m8_r8(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg + emit_mov_m8_r8(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg else if (size == SIZE_WORD) - emit_mov_m16_r16(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg + emit_mov_m16_r16(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg else if (size == SIZE_DWORD) - emit_mov_m32_r32(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg + emit_mov_m32_r32(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg else if (size == SIZE_QWORD) - emit_mov_m64_r64(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg + emit_mov_m64_r64(dst, MBISD(basereg, indreg, scale, baseoffs), srcreg); // mov [basep + scale*ecx],srcreg } } } @@ -3734,40 +3734,40 @@ void drcbe_x64::op_read(x86code *&dst, const instruction &inst) int dstreg = dstp.select_register(REG_EAX); // set up a call to the read byte handler - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space - emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space + emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp if (spacesizep.size() == SIZE_BYTE) { emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].read_byte); // call read_byte - emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al + emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al } else if (spacesizep.size() == SIZE_WORD) { emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].read_word); // call read_word - emit_movzx_r32_r16(dst, dstreg, REG_AX); // movzx dstreg,ax + emit_movzx_r32_r16(dst, dstreg, REG_AX); // movzx dstreg,ax } else if (spacesizep.size() == SIZE_DWORD) { emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].read_dword); // call read_dword if (dstreg != REG_EAX || inst.size() == 8) - emit_mov_r32_r32(dst, dstreg, REG_EAX); // mov dstreg,eax + emit_mov_r32_r32(dst, dstreg, REG_EAX); // mov dstreg,eax } else if (spacesizep.size() == SIZE_QWORD) { emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].read_qword); // call read_qword if (dstreg != REG_RAX) - emit_mov_r64_r64(dst, dstreg, REG_RAX); // mov dstreg,rax + emit_mov_r64_r64(dst, dstreg, REG_RAX); // mov dstreg,rax } // store result if (inst.size() == 4) - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg else - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } @@ -3793,38 +3793,38 @@ void drcbe_x64::op_readm(x86code *&dst, const instruction &inst) int dstreg = dstp.select_register(REG_EAX); // set up a call to the read byte handler - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space - emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space + emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp if (spacesizep.size() != SIZE_QWORD) - emit_mov_r32_p32(dst, REG_PARAM3, maskp); // mov param3,maskp + emit_mov_r32_p32(dst, REG_PARAM3, maskp); // mov param3,maskp else - emit_mov_r64_p64(dst, REG_PARAM3, maskp); // mov param3,maskp + emit_mov_r64_p64(dst, REG_PARAM3, maskp); // mov param3,maskp if (spacesizep.size() == SIZE_WORD) { emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].read_word_masked); // call read_word_masked - emit_movzx_r32_r16(dst, dstreg, REG_AX); // movzx dstreg,ax + emit_movzx_r32_r16(dst, dstreg, REG_AX); // movzx dstreg,ax } else if (spacesizep.size() == SIZE_DWORD) { emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].read_dword_masked); // call read_dword_masked if (dstreg != REG_EAX || inst.size() == 8) - emit_mov_r32_r32(dst, dstreg, REG_EAX); // mov dstreg,eax + emit_mov_r32_r32(dst, dstreg, REG_EAX); // mov dstreg,eax } else if (spacesizep.size() == SIZE_QWORD) { emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].read_qword_masked); // call read_qword_masked if (dstreg != REG_RAX) - emit_mov_r64_r64(dst, dstreg, REG_RAX); // mov dstreg,rax + emit_mov_r64_r64(dst, dstreg, REG_RAX); // mov dstreg,rax } // store result if (inst.size() == 4) - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg else - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } @@ -3846,12 +3846,12 @@ void drcbe_x64::op_write(x86code *&dst, const instruction &inst) assert(spacesizep.is_size_space()); // set up a call to the write byte handler - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space - emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space + emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp if (spacesizep.size() != SIZE_QWORD) - emit_mov_r32_p32(dst, REG_PARAM3, srcp); // mov param3,srcp + emit_mov_r32_p32(dst, REG_PARAM3, srcp); // mov param3,srcp else - emit_mov_r64_p64(dst, REG_PARAM3, srcp); // mov param3,srcp + emit_mov_r64_p64(dst, REG_PARAM3, srcp); // mov param3,srcp if (spacesizep.size() == SIZE_BYTE) emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].write_byte); // call write_byte @@ -3886,17 +3886,17 @@ void drcbe_x64::op_writem(x86code *&dst, const instruction &inst) assert(spacesizep.is_size_space()); // set up a call to the write byte handler - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space - emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacesizep.space()])); // mov param1,space + emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp if (spacesizep.size() != SIZE_QWORD) { - emit_mov_r32_p32(dst, REG_PARAM3, srcp); // mov param3,srcp - emit_mov_r32_p32(dst, REG_PARAM4, maskp); // mov param4,maskp + emit_mov_r32_p32(dst, REG_PARAM3, srcp); // mov param3,srcp + emit_mov_r32_p32(dst, REG_PARAM4, maskp); // mov param4,maskp } else { - emit_mov_r64_p64(dst, REG_PARAM3, srcp); // mov param3,srcp - emit_mov_r64_p64(dst, REG_PARAM4, maskp); // mov param4,maskp + emit_mov_r64_p64(dst, REG_PARAM3, srcp); // mov param3,srcp + emit_mov_r64_p64(dst, REG_PARAM4, maskp); // mov param4,maskp } if (spacesizep.size() == SIZE_WORD) emit_smart_call_m64(dst, (x86code **)&m_accessors[spacesizep.space()].write_word_masked); @@ -3947,16 +3947,16 @@ void drcbe_x64::op_carry(x86code *&dst, const instruction &inst) if (bitp.is_immediate()) { if (srcp.is_memory()) - emit_bt_m32_imm(dst, MABS(srcp.memory()), bitp.immediate()); // bt [srcp],bitp + emit_bt_m32_imm(dst, MABS(srcp.memory()), bitp.immediate()); // bt [srcp],bitp else if (srcp.is_int_register()) - emit_bt_r32_imm(dst, srcp.ireg(), bitp.immediate()); // bt srcp,bitp + emit_bt_r32_imm(dst, srcp.ireg(), bitp.immediate()); // bt srcp,bitp } else { if (srcp.is_memory()) - emit_bt_m32_r32(dst, MABS(srcp.memory()), REG_ECX); // bt [srcp],ecx + emit_bt_m32_r32(dst, MABS(srcp.memory()), REG_ECX); // bt [srcp],ecx else if (srcp.is_int_register()) - emit_bt_r32_r32(dst, srcp.ireg(), REG_ECX); // bt srcp,ecx + emit_bt_r32_r32(dst, srcp.ireg(), REG_ECX); // bt srcp,ecx } } @@ -3966,16 +3966,16 @@ void drcbe_x64::op_carry(x86code *&dst, const instruction &inst) if (bitp.is_immediate()) { if (srcp.is_memory()) - emit_bt_m64_imm(dst, MABS(srcp.memory()), bitp.immediate()); // bt [srcp],bitp + emit_bt_m64_imm(dst, MABS(srcp.memory()), bitp.immediate()); // bt [srcp],bitp else if (srcp.is_int_register()) - emit_bt_r64_imm(dst, srcp.ireg(), bitp.immediate()); // bt srcp,bitp + emit_bt_r64_imm(dst, srcp.ireg(), bitp.immediate()); // bt srcp,bitp } else { if (srcp.is_memory()) - emit_bt_m64_r64(dst, MABS(srcp.memory()), REG_ECX); // bt [srcp],ecx + emit_bt_m64_r64(dst, MABS(srcp.memory()), REG_ECX); // bt [srcp],ecx else if (srcp.is_int_register()) - emit_bt_r64_r64(dst, srcp.ireg(), REG_ECX); // bt srcp,ecx + emit_bt_r64_r64(dst, srcp.ireg(), REG_ECX); // bt srcp,ecx } } } @@ -3999,16 +3999,16 @@ void drcbe_x64::op_set(x86code *&dst, const instruction &inst) int dstreg = dstp.select_register(REG_EAX); // set to AL - emit_setcc_r8(dst, X86_CONDITION(inst.condition()), REG_AL); // setcc al - emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al + emit_setcc_r8(dst, X86_CONDITION(inst.condition()), REG_AL); // setcc al + emit_movzx_r32_r8(dst, dstreg, REG_AL); // movzx dstreg,al // 32-bit form if (inst.size() == 4) - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg // 64-bit form else if (inst.size() == 8) - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } @@ -4036,18 +4036,18 @@ void drcbe_x64::op_mov(x86code *&dst, const instruction &inst) // always start with a jmp emit_link skip = { 0 }; if (inst.condition() != uml::COND_ALWAYS) - emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip + emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip // 32-bit form if (inst.size() == 4) { // register to memory if (dstp.is_memory() && srcp.is_int_register()) - emit_mov_m32_r32(dst, MABS(dstp.memory()), srcp.ireg()); // mov [dstp],srcp + emit_mov_m32_r32(dst, MABS(dstp.memory()), srcp.ireg()); // mov [dstp],srcp // immediate to memory else if (dstp.is_memory() && srcp.is_immediate()) - emit_mov_m32_imm(dst, MABS(dstp.memory()), srcp.immediate()); // mov [dstp],srcp + emit_mov_m32_imm(dst, MABS(dstp.memory()), srcp.immediate()); // mov [dstp],srcp // conditional memory to register else if (inst.condition() != 0 && dstp.is_int_register() && srcp.is_memory()) @@ -4070,8 +4070,8 @@ void drcbe_x64::op_mov(x86code *&dst, const instruction &inst) // general case else { - emit_mov_r32_p32_keepflags(dst, dstreg, srcp); // mov dstreg,srcp - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32_keepflags(dst, dstreg, srcp); // mov dstreg,srcp + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4080,11 +4080,11 @@ void drcbe_x64::op_mov(x86code *&dst, const instruction &inst) { // register to memory if (dstp.is_memory() && srcp.is_int_register()) - emit_mov_m64_r64(dst, MABS(dstp.memory()), srcp.ireg()); // mov [dstp],srcp + emit_mov_m64_r64(dst, MABS(dstp.memory()), srcp.ireg()); // mov [dstp],srcp // immediate to memory else if (dstp.is_memory() && srcp.is_immediate() && short_immediate(srcp.immediate())) - emit_mov_m64_imm(dst, MABS(dstp.memory()), srcp.immediate()); // mov [dstp],srcp + emit_mov_m64_imm(dst, MABS(dstp.memory()), srcp.immediate()); // mov [dstp],srcp // conditional memory to register else if (inst.condition() != 0 && dstp.is_int_register() && srcp.is_memory()) @@ -4107,8 +4107,8 @@ void drcbe_x64::op_mov(x86code *&dst, const instruction &inst) // general case else { - emit_mov_r64_p64_keepflags(dst, dstreg, srcp); // mov dstreg,srcp - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64_keepflags(dst, dstreg, srcp); // mov dstreg,srcp + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4145,24 +4145,24 @@ void drcbe_x64::op_sext(x86code *&dst, const instruction &inst) if (srcp.is_memory()) { if (sizep.size() == SIZE_BYTE) - emit_movsx_r32_m8(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] + emit_movsx_r32_m8(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] else if (sizep.size() == SIZE_WORD) - emit_movsx_r32_m16(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] + emit_movsx_r32_m16(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] else if (sizep.size() == SIZE_DWORD) - emit_mov_r32_m32(dst, dstreg, MABS(srcp.memory())); // mov dstreg,[srcp] + emit_mov_r32_m32(dst, dstreg, MABS(srcp.memory())); // mov dstreg,[srcp] } else if (srcp.is_int_register()) { if (sizep.size() == SIZE_BYTE) - emit_movsx_r32_r8(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp + emit_movsx_r32_r8(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp else if (sizep.size() == SIZE_WORD) - emit_movsx_r32_r16(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp + emit_movsx_r32_r16(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp else if (sizep.size() == SIZE_DWORD) - emit_mov_r32_r32(dst, dstreg, srcp.ireg()); // mov dstreg,srcp + emit_mov_r32_r32(dst, dstreg, srcp.ireg()); // mov dstreg,srcp } - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg if (inst.flags() != 0) - emit_test_r32_r32(dst, dstreg, dstreg); // test dstreg,dstreg + emit_test_r32_r32(dst, dstreg, dstreg); // test dstreg,dstreg } // 64-bit form @@ -4172,28 +4172,28 @@ void drcbe_x64::op_sext(x86code *&dst, const instruction &inst) if (srcp.is_memory()) { if (sizep.size() == SIZE_BYTE) - emit_movsx_r64_m8(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] + emit_movsx_r64_m8(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] else if (sizep.size() == SIZE_WORD) - emit_movsx_r64_m16(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] + emit_movsx_r64_m16(dst, dstreg, MABS(srcp.memory())); // movsx dstreg,[srcp] else if (sizep.size() == SIZE_DWORD) - emit_movsxd_r64_m32(dst, dstreg, MABS(srcp.memory())); // movsxd dstreg,[srcp] + emit_movsxd_r64_m32(dst, dstreg, MABS(srcp.memory())); // movsxd dstreg,[srcp] else if (sizep.size() == SIZE_QWORD) - emit_mov_r64_m64(dst, dstreg, MABS(srcp.memory())); // mov dstreg,[srcp] + emit_mov_r64_m64(dst, dstreg, MABS(srcp.memory())); // mov dstreg,[srcp] } else if (srcp.is_int_register()) { if (sizep.size() == SIZE_BYTE) - emit_movsx_r64_r8(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp + emit_movsx_r64_r8(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp else if (sizep.size() == SIZE_WORD) - emit_movsx_r64_r16(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp + emit_movsx_r64_r16(dst, dstreg, srcp.ireg()); // movsx dstreg,srcp else if (sizep.size() == SIZE_DWORD) - emit_movsxd_r64_r32(dst, dstreg, srcp.ireg()); // movsxd dstreg,srcp + emit_movsxd_r64_r32(dst, dstreg, srcp.ireg()); // movsxd dstreg,srcp else if (sizep.size() == SIZE_QWORD) - emit_mov_r64_r64(dst, dstreg, srcp.ireg()); // mov dstreg,srcp + emit_mov_r64_r64(dst, dstreg, srcp.ireg()); // mov dstreg,srcp } - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg if (inst.flags() != 0) - emit_test_r64_r64(dst, dstreg, dstreg); // test dstreg,dstreg + emit_test_r64_r64(dst, dstreg, dstreg); // test dstreg,dstreg } } @@ -4221,19 +4221,19 @@ void drcbe_x64::op_roland(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_mov_r32_p32(dst, dstreg, srcp); // mov dstreg,srcp - emit_rol_r32_p32(dst, dstreg, shiftp, inst); // rol dstreg,shiftp - emit_and_r32_p32(dst, dstreg, maskp, inst); // and dstreg,maskp - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, srcp); // mov dstreg,srcp + emit_rol_r32_p32(dst, dstreg, shiftp, inst); // rol dstreg,shiftp + emit_and_r32_p32(dst, dstreg, maskp, inst); // and dstreg,maskp + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_mov_r64_p64(dst, dstreg, srcp); // mov dstreg,srcp - emit_rol_r64_p64(dst, dstreg, shiftp, inst); // rol dstreg,shiftp - emit_and_r64_p64(dst, dstreg, maskp, inst); // and dstreg,maskp - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, srcp); // mov dstreg,srcp + emit_rol_r64_p64(dst, dstreg, shiftp, inst); // rol dstreg,shiftp + emit_and_r64_p64(dst, dstreg, maskp, inst); // and dstreg,maskp + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4261,37 +4261,37 @@ void drcbe_x64::op_rolins(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_mov_r32_p32(dst, REG_EAX, srcp); // mov eax,srcp - emit_rol_r32_p32(dst, REG_EAX, shiftp, inst); // rol eax,shiftp - emit_mov_r32_p32(dst, dstreg, dstp); // mov dstreg,dstp + emit_mov_r32_p32(dst, REG_EAX, srcp); // mov eax,srcp + emit_rol_r32_p32(dst, REG_EAX, shiftp, inst); // rol eax,shiftp + emit_mov_r32_p32(dst, dstreg, dstp); // mov dstreg,dstp if (maskp.is_immediate()) { - emit_and_r32_imm(dst, REG_EAX, maskp.immediate()); // and eax,maskp - emit_and_r32_imm(dst, dstreg, ~maskp.immediate()); // and dstreg,~maskp + emit_and_r32_imm(dst, REG_EAX, maskp.immediate()); // and eax,maskp + emit_and_r32_imm(dst, dstreg, ~maskp.immediate()); // and dstreg,~maskp } else { - emit_mov_r32_p32(dst, REG_EDX, maskp); // mov edx,maskp - emit_and_r32_r32(dst, REG_EAX, REG_EDX); // and eax,edx - emit_not_r32(dst, REG_EDX); // not edx - emit_and_r32_r32(dst, dstreg, REG_EDX); // and dstreg,edx + emit_mov_r32_p32(dst, REG_EDX, maskp); // mov edx,maskp + emit_and_r32_r32(dst, REG_EAX, REG_EDX); // and eax,edx + emit_not_r32(dst, REG_EDX); // not edx + emit_and_r32_r32(dst, dstreg, REG_EDX); // and dstreg,edx } - emit_or_r32_r32(dst, dstreg, REG_EAX); // or dstreg,eax - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_or_r32_r32(dst, dstreg, REG_EAX); // or dstreg,eax + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_mov_r64_p64(dst, REG_RAX, srcp); // mov rax,srcp - emit_mov_r64_p64(dst, REG_RDX, maskp); // mov rdx,maskp - emit_rol_r64_p64(dst, REG_RAX, shiftp, inst); // rol rax,shiftp - emit_mov_r64_p64(dst, dstreg, dstp); // mov dstreg,dstp - emit_and_r64_r64(dst, REG_RAX, REG_RDX); // and eax,rdx - emit_not_r64(dst, REG_RDX); // not rdx - emit_and_r64_r64(dst, dstreg, REG_RDX); // and dstreg,rdx - emit_or_r64_r64(dst, dstreg, REG_RAX); // or dstreg,rax - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, REG_RAX, srcp); // mov rax,srcp + emit_mov_r64_p64(dst, REG_RDX, maskp); // mov rdx,maskp + emit_rol_r64_p64(dst, REG_RAX, shiftp, inst); // rol rax,shiftp + emit_mov_r64_p64(dst, dstreg, dstp); // mov dstreg,dstp + emit_and_r64_r64(dst, REG_RAX, REG_RDX); // and eax,rdx + emit_not_r64(dst, REG_RDX); // not rdx + emit_and_r64_r64(dst, dstreg, REG_RDX); // and dstreg,rdx + emit_or_r64_r64(dst, dstreg, REG_RAX); // or dstreg,rax + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4321,11 +4321,11 @@ void drcbe_x64::op_add(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_add_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // add [dstp],src2p + emit_add_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // add [dstp],src2p // reg = reg + imm else if (dstp.is_int_register() && src1p.is_int_register() && src2p.is_immediate() && inst.flags() == 0) - emit_lea_r32_m32(dst, dstp.ireg(), MBD(src1p.ireg(), src2p.immediate())); // lea dstp,[src1p+src2p] + emit_lea_r32_m32(dst, dstp.ireg(), MBD(src1p.ireg(), src2p.immediate())); // lea dstp,[src1p+src2p] // reg = reg + reg else if (dstp.is_int_register() && src1p.is_int_register() && src2p.is_int_register() && inst.flags() == 0) @@ -4334,9 +4334,9 @@ void drcbe_x64::op_add(x86code *&dst, const instruction &inst) // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_add_r32_p32(dst, dstreg, src2p, inst); // add dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_add_r32_p32(dst, dstreg, src2p, inst); // add dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4345,11 +4345,11 @@ void drcbe_x64::op_add(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_add_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // add [dstp],src2p + emit_add_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // add [dstp],src2p // reg = reg + imm else if (dstp.is_int_register() && src1p.is_int_register() && src2p.is_immediate() && short_immediate(src2p.immediate()) && inst.flags() == 0) - emit_lea_r64_m64(dst, dstp.ireg(), MBD(src1p.ireg(), src2p.immediate())); // lea dstp,[src1p+src2p] + emit_lea_r64_m64(dst, dstp.ireg(), MBD(src1p.ireg(), src2p.immediate())); // lea dstp,[src1p+src2p] // reg = reg + reg else if (dstp.is_int_register() && src1p.is_int_register() && src2p.is_int_register() && inst.flags() == 0) @@ -4358,9 +4358,9 @@ void drcbe_x64::op_add(x86code *&dst, const instruction &inst) // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_add_r64_p64(dst, dstreg, src2p, inst); // add dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_add_r64_p64(dst, dstreg, src2p, inst); // add dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -4391,14 +4391,14 @@ void drcbe_x64::op_addc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_adc_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // adc [dstp],src2p + emit_adc_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // adc [dstp],src2p // general case else { - emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_adc_r32_p32(dst, dstreg, src2p, inst); // adc dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_adc_r32_p32(dst, dstreg, src2p, inst); // adc dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4407,14 +4407,14 @@ void drcbe_x64::op_addc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_adc_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // adc [dstp],src2p + emit_adc_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // adc [dstp],src2p // general case else { - emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_adc_r64_p64(dst, dstreg, src2p, inst); // adc dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_adc_r64_p64(dst, dstreg, src2p, inst); // adc dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -4444,18 +4444,18 @@ void drcbe_x64::op_sub(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_sub_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // sub [dstp],src2p + emit_sub_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // sub [dstp],src2p // reg = reg - imm else if (dstp.is_int_register() && src1p.is_int_register() && src2p.is_immediate() && inst.flags() == 0) - emit_lea_r32_m32(dst, dstp.ireg(), MBD(src1p.ireg(), -src2p.immediate())); // lea dstp,[src1p-src2p] + emit_lea_r32_m32(dst, dstp.ireg(), MBD(src1p.ireg(), -src2p.immediate())); // lea dstp,[src1p-src2p] // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_sub_r32_p32(dst, dstreg, src2p, inst); // sub dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_sub_r32_p32(dst, dstreg, src2p, inst); // sub dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4464,18 +4464,18 @@ void drcbe_x64::op_sub(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_sub_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // sub [dstp],src2p + emit_sub_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // sub [dstp],src2p // reg = reg - imm else if (dstp.is_int_register() && src1p.is_int_register() && src2p.is_immediate() && short_immediate(src2p.immediate()) && inst.flags() == 0) - emit_lea_r64_m64(dst, dstp.ireg(), MBD(src1p.ireg(), -src2p.immediate())); // lea dstp,[src1p-src2p] + emit_lea_r64_m64(dst, dstp.ireg(), MBD(src1p.ireg(), -src2p.immediate())); // lea dstp,[src1p-src2p] // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_sub_r64_p64(dst, dstreg, src2p, inst); // sub dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_sub_r64_p64(dst, dstreg, src2p, inst); // sub dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -4505,14 +4505,14 @@ void drcbe_x64::op_subc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_sbb_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // sbb [dstp],src2p + emit_sbb_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // sbb [dstp],src2p // general case else { - emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_sbb_r32_p32(dst, dstreg, src2p, inst); // sbb dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_sbb_r32_p32(dst, dstreg, src2p, inst); // sbb dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -4521,14 +4521,14 @@ void drcbe_x64::op_subc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_sbb_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // sbb [dstp],src2p + emit_sbb_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // sbb [dstp],src2p // general case else { - emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_sbb_r64_p64(dst, dstreg, src2p, inst); // sbb dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_sbb_r64_p64(dst, dstreg, src2p, inst); // sbb dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -4557,14 +4557,14 @@ void drcbe_x64::op_cmp(x86code *&dst, const instruction &inst) { // memory versus anything if (src1p.is_memory()) - emit_cmp_m32_p32(dst, MABS(src1p.memory()), src2p, inst); // cmp [dstp],src2p + emit_cmp_m32_p32(dst, MABS(src1p.memory()), src2p, inst); // cmp [dstp],src2p // general case else { if (src1p.is_immediate()) - emit_mov_r32_imm(dst, src1reg, src1p.immediate()); // mov src1reg,imm - emit_cmp_r32_p32(dst, src1reg, src2p, inst); // cmp src1reg,src2p + emit_mov_r32_imm(dst, src1reg, src1p.immediate()); // mov src1reg,imm + emit_cmp_r32_p32(dst, src1reg, src2p, inst); // cmp src1reg,src2p } } @@ -4573,14 +4573,14 @@ void drcbe_x64::op_cmp(x86code *&dst, const instruction &inst) { // memory versus anything if (src1p.is_memory()) - emit_cmp_m64_p64(dst, MABS(src1p.memory()), src2p, inst); // cmp [dstp],src2p + emit_cmp_m64_p64(dst, MABS(src1p.memory()), src2p, inst); // cmp [dstp],src2p // general case else { if (src1p.is_immediate()) - emit_mov_r64_imm(dst, src1reg, src1p.immediate()); // mov src1reg,imm - emit_cmp_r64_p64(dst, src1reg, src2p, inst); // cmp src1reg,src2p + emit_mov_r64_imm(dst, src1reg, src1p.immediate()); // mov src1reg,imm + emit_cmp_r64_p64(dst, src1reg, src2p, inst); // cmp src1reg,src2p } } } @@ -4612,19 +4612,19 @@ void drcbe_x64::op_mulu(x86code *&dst, const instruction &inst) if (inst.size() == 4) { // general case - emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p + emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p if (src2p.is_memory()) - emit_mul_m32(dst, MABS(src2p.memory())); // mul [src2p] + emit_mul_m32(dst, MABS(src2p.memory())); // mul [src2p] else if (src2p.is_int_register()) - emit_mul_r32(dst, src2p.ireg()); // mul src2p + emit_mul_r32(dst, src2p.ireg()); // mul src2p else if (src2p.is_immediate()) { - emit_mov_r32_imm(dst, REG_EDX, src2p.immediate()); // mov edx,src2p - emit_mul_r32(dst, REG_EDX); // mul edx + emit_mov_r32_imm(dst, REG_EDX, src2p.immediate()); // mov edx,src2p + emit_mul_r32(dst, REG_EDX); // mul edx } - emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax + emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax if (compute_hi) - emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx + emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx // compute flags if (inst.flags() != 0) @@ -4632,32 +4632,32 @@ void drcbe_x64::op_mulu(x86code *&dst, const instruction &inst) if (zsflags != 0) { if (vflag) - emit_pushf(dst); // pushf + emit_pushf(dst); // pushf if (compute_hi) { if (zsflags == FLAG_Z) - emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax + emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax else if (zsflags == FLAG_S) - emit_test_r32_r32(dst, REG_EDX, REG_EDX); // test edx,edx + emit_test_r32_r32(dst, REG_EDX, REG_EDX); // test edx,edx else { - emit_movzx_r32_r16(dst, REG_ECX, REG_AX); // movzx ecx,ax - emit_shr_r32_imm(dst, REG_EAX, 16); // shr eax,16 - emit_or_r32_r32(dst, REG_EDX, REG_ECX); // or edx,ecx - emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax + emit_movzx_r32_r16(dst, REG_ECX, REG_AX); // movzx ecx,ax + emit_shr_r32_imm(dst, REG_EAX, 16); // shr eax,16 + emit_or_r32_r32(dst, REG_EDX, REG_ECX); // or edx,ecx + emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax } } else - emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax + emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax // we rely on the fact that OF is cleared by all logical operations above if (vflag) { - emit_pushf(dst); // pushf - emit_pop_r64(dst, REG_RAX); // pop rax - emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 - emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax - emit_popf(dst); // popf + emit_pushf(dst); // pushf + emit_pop_r64(dst, REG_RAX); // pop rax + emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 + emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax + emit_popf(dst); // popf } } } @@ -4667,19 +4667,19 @@ void drcbe_x64::op_mulu(x86code *&dst, const instruction &inst) else if (inst.size() == 8) { // general case - emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p + emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p if (src2p.is_memory()) - emit_mul_m64(dst, MABS(src2p.memory())); // mul [src2p] + emit_mul_m64(dst, MABS(src2p.memory())); // mul [src2p] else if (src2p.is_int_register()) - emit_mul_r64(dst, src2p.ireg()); // mul src2p + emit_mul_r64(dst, src2p.ireg()); // mul src2p else if (src2p.is_immediate()) { - emit_mov_r64_imm(dst, REG_RDX, src2p.immediate()); // mov rdx,src2p - emit_mul_r64(dst, REG_RDX); // mul rdx + emit_mov_r64_imm(dst, REG_RDX, src2p.immediate()); // mov rdx,src2p + emit_mul_r64(dst, REG_RDX); // mul rdx } - emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax + emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax if (compute_hi) - emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx + emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx // compute flags if (inst.flags() != 0) @@ -4687,32 +4687,32 @@ void drcbe_x64::op_mulu(x86code *&dst, const instruction &inst) if (zsflags != 0) { if (vflag) - emit_pushf(dst); // pushf + emit_pushf(dst); // pushf if (compute_hi) { if (zsflags == FLAG_Z) - emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax + emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax else if (zsflags == FLAG_S) - emit_test_r64_r64(dst, REG_RDX, REG_RDX); // test rdx,rdx + emit_test_r64_r64(dst, REG_RDX, REG_RDX); // test rdx,rdx else { - emit_mov_r32_r32(dst, REG_ECX, REG_EAX); // mov ecx,eax - emit_shr_r64_imm(dst, REG_RAX, 32); // shr rax,32 - emit_or_r64_r64(dst, REG_RDX, REG_RCX); // or rdx,rcx - emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax + emit_mov_r32_r32(dst, REG_ECX, REG_EAX); // mov ecx,eax + emit_shr_r64_imm(dst, REG_RAX, 32); // shr rax,32 + emit_or_r64_r64(dst, REG_RDX, REG_RCX); // or rdx,rcx + emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax } } else - emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test rax,rax + emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test rax,rax // we rely on the fact that OF is cleared by all logical operations above if (vflag) { - emit_pushf(dst); // pushf - emit_pop_r64(dst, REG_RAX); // pop rax - emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 - emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax - emit_popf(dst); // popf + emit_pushf(dst); // pushf + emit_pop_r64(dst, REG_RAX); // pop rax + emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 + emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax + emit_popf(dst); // popf } } } @@ -4751,36 +4751,36 @@ void drcbe_x64::op_muls(x86code *&dst, const instruction &inst) if (src1p.is_memory()) emit_imul_r32_m32_imm(dst, REG_EAX, MABS(src1p.memory()), src2p.immediate()); // imul eax,[src1p],src2p else if (src1p.is_int_register()) - emit_imul_r32_r32_imm(dst, REG_EAX, src1p.ireg(), src2p.immediate()); // imul eax,src1p,src2p - emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax + emit_imul_r32_r32_imm(dst, REG_EAX, src1p.ireg(), src2p.immediate()); // imul eax,src1p,src2p + emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax } // 32-bit destination, general case else if (!compute_hi) { - emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p + emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p if (src2p.is_memory()) - emit_imul_r32_m32(dst, REG_EAX, MABS(src2p.memory())); // imul eax,[src2p] + emit_imul_r32_m32(dst, REG_EAX, MABS(src2p.memory())); // imul eax,[src2p] else if (src2p.is_int_register()) - emit_imul_r32_r32(dst, REG_EAX, src2p.ireg()); // imul eax,src2p - emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax + emit_imul_r32_r32(dst, REG_EAX, src2p.ireg()); // imul eax,src2p + emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax } // 64-bit destination, general case else { - emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p + emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p if (src2p.is_memory()) - emit_imul_m32(dst, MABS(src2p.memory())); // imul [src2p] + emit_imul_m32(dst, MABS(src2p.memory())); // imul [src2p] else if (src2p.is_int_register()) - emit_imul_r32(dst, src2p.ireg()); // imul src2p + emit_imul_r32(dst, src2p.ireg()); // imul src2p else if (src2p.is_immediate()) { - emit_mov_r32_imm(dst, REG_EDX, src2p.immediate()); // mov edx,src2p - emit_imul_r32(dst, REG_EDX); // imul edx + emit_mov_r32_imm(dst, REG_EDX, src2p.immediate()); // mov edx,src2p + emit_imul_r32(dst, REG_EDX); // imul edx } - emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax - emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx + emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax + emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx } // compute flags @@ -4789,32 +4789,32 @@ void drcbe_x64::op_muls(x86code *&dst, const instruction &inst) if (zsflags != 0) { if (vflag) - emit_pushf(dst); // pushf + emit_pushf(dst); // pushf if (compute_hi) { if (zsflags == FLAG_Z) - emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax + emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax else if (zsflags == FLAG_S) - emit_test_r32_r32(dst, REG_EDX, REG_EDX); // test edx,edx + emit_test_r32_r32(dst, REG_EDX, REG_EDX); // test edx,edx else { - emit_movzx_r32_r16(dst, REG_ECX, REG_AX); // movzx ecx,ax - emit_shr_r32_imm(dst, REG_EAX, 16); // shr eax,16 - emit_or_r32_r32(dst, REG_EDX, REG_ECX); // or edx,ecx - emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax + emit_movzx_r32_r16(dst, REG_ECX, REG_AX); // movzx ecx,ax + emit_shr_r32_imm(dst, REG_EAX, 16); // shr eax,16 + emit_or_r32_r32(dst, REG_EDX, REG_ECX); // or edx,ecx + emit_or_r32_r32(dst, REG_EDX, REG_EAX); // or edx,eax } } else - emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax + emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax // we rely on the fact that OF is cleared by all logical operations above if (vflag) { - emit_pushf(dst); // pushf - emit_pop_r64(dst, REG_RAX); // pop rax - emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 - emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax - emit_popf(dst); // popf + emit_pushf(dst); // pushf + emit_pop_r64(dst, REG_RAX); // pop rax + emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 + emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax + emit_popf(dst); // popf } } } @@ -4829,36 +4829,36 @@ void drcbe_x64::op_muls(x86code *&dst, const instruction &inst) if (src1p.is_memory()) emit_imul_r64_m64_imm(dst, REG_RAX, MABS(src1p.memory()), src2p.immediate());// imul rax,[src1p],src2p else if (src1p.is_int_register()) - emit_imul_r64_r64_imm(dst, REG_RAX, src1p.ireg(), src2p.immediate()); // imul rax,src1p,src2p - emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax + emit_imul_r64_r64_imm(dst, REG_RAX, src1p.ireg(), src2p.immediate()); // imul rax,src1p,src2p + emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax } // 64-bit destination, general case else if (!compute_hi) { - emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p + emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p if (src2p.is_memory()) - emit_imul_r64_m64(dst, REG_RAX, MABS(src2p.memory())); // imul rax,[src2p] + emit_imul_r64_m64(dst, REG_RAX, MABS(src2p.memory())); // imul rax,[src2p] else if (src2p.is_int_register()) - emit_imul_r64_r64(dst, REG_RAX, src2p.ireg()); // imul rax,src2p - emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax + emit_imul_r64_r64(dst, REG_RAX, src2p.ireg()); // imul rax,src2p + emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax } // 128-bit destination, general case else { - emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p + emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p if (src2p.is_memory()) - emit_imul_m64(dst, MABS(src2p.memory())); // imul [src2p] + emit_imul_m64(dst, MABS(src2p.memory())); // imul [src2p] else if (src2p.is_int_register()) - emit_imul_r64(dst, src2p.ireg()); // imul src2p + emit_imul_r64(dst, src2p.ireg()); // imul src2p else if (src2p.is_immediate()) { - emit_mov_r64_imm(dst, REG_RDX, src2p.immediate()); // mov rdx,src2p - emit_imul_r64(dst, REG_RDX); // imul rdx + emit_mov_r64_imm(dst, REG_RDX, src2p.immediate()); // mov rdx,src2p + emit_imul_r64(dst, REG_RDX); // imul rdx } - emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax - emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx + emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax + emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx } // compute flags @@ -4867,32 +4867,32 @@ void drcbe_x64::op_muls(x86code *&dst, const instruction &inst) if (zsflags != 0) { if (vflag) - emit_pushf(dst); // pushf + emit_pushf(dst); // pushf if (compute_hi) { if (zsflags == FLAG_Z) - emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax + emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax else if (zsflags == FLAG_S) - emit_test_r64_r64(dst, REG_RDX, REG_RDX); // test rdx,rdx + emit_test_r64_r64(dst, REG_RDX, REG_RDX); // test rdx,rdx else { - emit_mov_r32_r32(dst, REG_ECX, REG_EAX); // mov ecx,eax - emit_shr_r64_imm(dst, REG_RAX, 32); // shr rax,32 - emit_or_r64_r64(dst, REG_RDX, REG_RCX); // or rdx,rcx - emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax + emit_mov_r32_r32(dst, REG_ECX, REG_EAX); // mov ecx,eax + emit_shr_r64_imm(dst, REG_RAX, 32); // shr rax,32 + emit_or_r64_r64(dst, REG_RDX, REG_RCX); // or rdx,rcx + emit_or_r64_r64(dst, REG_RDX, REG_RAX); // or rdx,rax } } else - emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test rax,rax + emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test rax,rax // we rely on the fact that OF is cleared by all logical operations above if (vflag) { - emit_pushf(dst); // pushf - emit_pop_r64(dst, REG_RAX); // pop rax - emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 - emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax - emit_popf(dst); // popf + emit_pushf(dst); // pushf + emit_pop_r64(dst, REG_RAX); // pop rax + emit_and_m64_imm(dst, MBD(REG_RSP, 0), ~0x84); // and [rsp],~0x84 + emit_or_m64_r64(dst, MBD(REG_RSP, 0), REG_RAX); // or [rsp],rax + emit_popf(dst); // popf } } } @@ -4922,46 +4922,46 @@ void drcbe_x64::op_divu(x86code *&dst, const instruction &inst) if (inst.size() == 4) { // general case - emit_mov_r32_p32(dst, REG_ECX, src2p); // mov ecx,src2p + emit_mov_r32_p32(dst, REG_ECX, src2p); // mov ecx,src2p if (inst.flags() != 0) { - emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 - emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax + emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 + emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax } emit_link skip; - emit_jecxz_link(dst, skip); // jecxz skip - emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p - emit_xor_r32_r32(dst, REG_EDX, REG_EDX); // xor edx,edx - emit_div_r32(dst, REG_ECX); // div ecx - emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax + emit_jecxz_link(dst, skip); // jecxz skip + emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p + emit_xor_r32_r32(dst, REG_EDX, REG_EDX); // xor edx,edx + emit_div_r32(dst, REG_ECX); // div ecx + emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax if (compute_rem) - emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx + emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx if (inst.flags() != 0) - emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax - resolve_link(dst, skip); // skip: + emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax + resolve_link(dst, skip); // skip: } // 64-bit form else if (inst.size() == 8) { // general case - emit_mov_r64_p64(dst, REG_RCX, src2p); // mov rcx,src2p + emit_mov_r64_p64(dst, REG_RCX, src2p); // mov rcx,src2p if (inst.flags() != 0) { - emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 - emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax + emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 + emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax } emit_link skip; - emit_jrcxz_link(dst, skip); // jrcxz skip - emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p - emit_xor_r32_r32(dst, REG_EDX, REG_EDX); // xor edx,edx - emit_div_r64(dst, REG_RCX); // div rcx - emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax + emit_jrcxz_link(dst, skip); // jrcxz skip + emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p + emit_xor_r32_r32(dst, REG_EDX, REG_EDX); // xor edx,edx + emit_div_r64(dst, REG_RCX); // div rcx + emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax if (compute_rem) - emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx + emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx if (inst.flags() != 0) - emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test eax,eax - resolve_link(dst, skip); // skip: + emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test eax,eax + resolve_link(dst, skip); // skip: } } @@ -4988,46 +4988,46 @@ void drcbe_x64::op_divs(x86code *&dst, const instruction &inst) if (inst.size() == 4) { // general case - emit_mov_r32_p32(dst, REG_ECX, src2p); // mov ecx,src2p + emit_mov_r32_p32(dst, REG_ECX, src2p); // mov ecx,src2p if (inst.flags() != 0) { - emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 - emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax + emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 + emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax } emit_link skip; - emit_jecxz_link(dst, skip); // jecxz skip - emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p - emit_cdq(dst); // cdq - emit_idiv_r32(dst, REG_ECX); // idiv ecx - emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax + emit_jecxz_link(dst, skip); // jecxz skip + emit_mov_r32_p32(dst, REG_EAX, src1p); // mov eax,src1p + emit_cdq(dst); // cdq + emit_idiv_r32(dst, REG_ECX); // idiv ecx + emit_mov_p32_r32(dst, dstp, REG_EAX); // mov dstp,eax if (compute_rem) - emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx + emit_mov_p32_r32(dst, edstp, REG_EDX); // mov edstp,edx if (inst.flags() != 0) - emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax - resolve_link(dst, skip); // skip: + emit_test_r32_r32(dst, REG_EAX, REG_EAX); // test eax,eax + resolve_link(dst, skip); // skip: } // 64-bit form else if (inst.size() == 8) { // general case - emit_mov_r64_p64(dst, REG_RCX, src2p); // mov rcx,src2p + emit_mov_r64_p64(dst, REG_RCX, src2p); // mov rcx,src2p if (inst.flags() != 0) { - emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 - emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax + emit_mov_r32_imm(dst, REG_EAX, 0xa0000000); // mov eax,0xa0000000 + emit_add_r32_r32(dst, REG_EAX, REG_EAX); // add eax,eax } emit_link skip; - emit_jrcxz_link(dst, skip); // jrcxz skip - emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p - emit_cqo(dst); // cqo - emit_idiv_r64(dst, REG_RCX); // idiv rcx - emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax + emit_jrcxz_link(dst, skip); // jrcxz skip + emit_mov_r64_p64(dst, REG_RAX, src1p); // mov rax,src1p + emit_cqo(dst); // cqo + emit_idiv_r64(dst, REG_RCX); // idiv rcx + emit_mov_p64_r64(dst, dstp, REG_RAX); // mov dstp,rax if (compute_rem) - emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx + emit_mov_p64_r64(dst, edstp, REG_RDX); // mov edstp,rdx if (inst.flags() != 0) - emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test eax,eax - resolve_link(dst, skip); // skip: + emit_test_r64_r64(dst, REG_RAX, REG_RAX); // test eax,eax + resolve_link(dst, skip); // skip: } } @@ -5057,34 +5057,34 @@ void drcbe_x64::op_and(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_and_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // and [dstp],src2p + emit_and_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // and [dstp],src2p // AND with immediate 0xff else if (src2p.is_immediate_value(0xff) && inst.flags() == 0) { if (src1p.is_int_register()) - emit_movzx_r32_r8(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p + emit_movzx_r32_r8(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p else if (src1p.is_memory()) - emit_movzx_r32_m8(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_movzx_r32_m8(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } // AND with immediate 0xffff else if (src2p.is_immediate_value(0xffff) && inst.flags() == 0) { if (src1p.is_int_register()) - emit_movzx_r32_r16(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p + emit_movzx_r32_r16(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p else if (src1p.is_memory()) - emit_movzx_r32_m16(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_movzx_r32_m16(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_and_r32_p32(dst, dstreg, src2p, inst); // and dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_and_r32_p32(dst, dstreg, src2p, inst); // and dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5093,46 +5093,46 @@ void drcbe_x64::op_and(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_and_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // and [dstp],src2p + emit_and_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // and [dstp],src2p // AND with immediate 0xff else if (src2p.is_immediate_value(0xff) && inst.flags() == 0) { if (src1p.is_int_register()) - emit_movzx_r32_r8(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p + emit_movzx_r32_r8(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p else if (src1p.is_memory()) - emit_movzx_r32_m8(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_movzx_r32_m8(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } // AND with immediate 0xffff else if (src2p.is_immediate_value(0xffff) && inst.flags() == 0) { if (src1p.is_int_register()) - emit_movzx_r32_r16(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p + emit_movzx_r32_r16(dst, dstreg, src1p.ireg()); // movzx dstreg,src1p else if (src1p.is_memory()) - emit_movzx_r32_m16(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_movzx_r32_m16(dst, dstreg, MABS(src1p.memory())); // movzx dstreg,[src1p] + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } // AND with immediate 0xffffffff else if (src2p.is_immediate_value(0xffffffff) && inst.flags() == 0) { if (dstp.is_int_register() && src1p == dstp) - emit_mov_r32_r32(dst, dstreg, dstreg); // mov dstreg,dstreg + emit_mov_r32_r32(dst, dstreg, dstreg); // mov dstreg,dstreg else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_and_r64_p64(dst, dstreg, src2p, inst); // and dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_and_r64_p64(dst, dstreg, src2p, inst); // and dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5162,13 +5162,13 @@ void drcbe_x64::op_test(x86code *&dst, const instruction &inst) { // src1p in memory if (src1p.is_memory()) - emit_test_m32_p32(dst, MABS(src1p.memory()), src2p, inst); // test [src1p],src2p + emit_test_m32_p32(dst, MABS(src1p.memory()), src2p, inst); // test [src1p],src2p // general case else { - emit_mov_r32_p32(dst, src1reg, src1p); // mov src1reg,src1p - emit_test_r32_p32(dst, src1reg, src2p, inst); // test src1reg,src2p + emit_mov_r32_p32(dst, src1reg, src1p); // mov src1reg,src1p + emit_test_r32_p32(dst, src1reg, src2p, inst); // test src1reg,src2p } } @@ -5177,13 +5177,13 @@ void drcbe_x64::op_test(x86code *&dst, const instruction &inst) { // src1p in memory if (src1p.is_memory()) - emit_test_m64_p64(dst, MABS(src1p.memory()), src2p, inst); // test [src1p],src2p + emit_test_m64_p64(dst, MABS(src1p.memory()), src2p, inst); // test [src1p],src2p // general case else { - emit_mov_r64_p64(dst, src1reg, src1p); // mov src1reg,src1p - emit_test_r64_p64(dst, src1reg, src2p, inst); // test src1reg,src2p + emit_mov_r64_p64(dst, src1reg, src1p); // mov src1reg,src1p + emit_test_r64_p64(dst, src1reg, src2p, inst); // test src1reg,src2p } } } @@ -5214,14 +5214,14 @@ void drcbe_x64::op_or(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_or_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // or [dstp],src2p + emit_or_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // or [dstp],src2p // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_or_r32_p32(dst, dstreg, src2p, inst); // or dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_or_r32_p32(dst, dstreg, src2p, inst); // or dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5230,14 +5230,14 @@ void drcbe_x64::op_or(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_or_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // or [dstp],src2p + emit_or_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // or [dstp],src2p // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_or_r64_p64(dst, dstreg, src2p, inst); // or dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_or_r64_p64(dst, dstreg, src2p, inst); // or dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5268,14 +5268,14 @@ void drcbe_x64::op_xor(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_xor_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // xor [dstp],src2p + emit_xor_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // xor [dstp],src2p // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_xor_r32_p32(dst, dstreg, src2p, inst); // xor dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_xor_r32_p32(dst, dstreg, src2p, inst); // xor dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5284,14 +5284,14 @@ void drcbe_x64::op_xor(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_xor_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // xor [dstp],src2p + emit_xor_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // xor [dstp],src2p // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_xor_r64_p64(dst, dstreg, src2p, inst); // xor dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_xor_r64_p64(dst, dstreg, src2p, inst); // xor dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5318,23 +5318,23 @@ void drcbe_x64::op_lzcnt(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_mov_r32_p32(dst, dstreg, srcp); // mov dstreg,src1p - emit_mov_r32_imm(dst, REG_ECX, 32 ^ 31); // mov ecx,32 ^ 31 - emit_bsr_r32_r32(dst, dstreg, dstreg); // bsr dstreg,dstreg - emit_cmovcc_r32_r32(dst, x64emit::COND_Z, dstreg, REG_ECX); // cmovz dstreg,ecx - emit_xor_r32_imm(dst, dstreg, 31); // xor dstreg,31 - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, srcp); // mov dstreg,src1p + emit_mov_r32_imm(dst, REG_ECX, 32 ^ 31); // mov ecx,32 ^ 31 + emit_bsr_r32_r32(dst, dstreg, dstreg); // bsr dstreg,dstreg + emit_cmovcc_r32_r32(dst, x64emit::COND_Z, dstreg, REG_ECX); // cmovz dstreg,ecx + emit_xor_r32_imm(dst, dstreg, 31); // xor dstreg,31 + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_mov_r64_p64(dst, dstreg, srcp); // mov dstreg,src1p - emit_mov_r64_imm(dst, REG_RCX, 64 ^ 63); // mov rcx,64 ^ 63 - emit_bsr_r64_r64(dst, dstreg, dstreg); // bsr dstreg,dstreg - emit_cmovcc_r64_r64(dst, x64emit::COND_Z, dstreg, REG_RCX); // cmovz dstreg,rcx - emit_xor_r32_imm(dst, dstreg, 63); // xor dstreg,63 - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, srcp); // mov dstreg,src1p + emit_mov_r64_imm(dst, REG_RCX, 64 ^ 63); // mov rcx,64 ^ 63 + emit_bsr_r64_r64(dst, dstreg, dstreg); // bsr dstreg,dstreg + emit_cmovcc_r64_r64(dst, x64emit::COND_Z, dstreg, REG_RCX); // cmovz dstreg,rcx + emit_xor_r32_imm(dst, dstreg, 63); // xor dstreg,63 + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5360,21 +5360,21 @@ void drcbe_x64::op_bswap(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_mov_r32_p32(dst, dstreg, srcp); // mov dstreg,src1p - emit_bswap_r32(dst, dstreg); // bswap dstreg + emit_mov_r32_p32(dst, dstreg, srcp); // mov dstreg,src1p + emit_bswap_r32(dst, dstreg); // bswap dstreg if (inst.flags() != 0) - emit_test_r32_r32(dst, dstreg, dstreg); // test dstreg,dstreg - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_test_r32_r32(dst, dstreg, dstreg); // test dstreg,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_mov_r64_p64(dst, dstreg, srcp); // mov dstreg,src1p - emit_bswap_r64(dst, dstreg); // bswap dstreg + emit_mov_r64_p64(dst, dstreg, srcp); // mov dstreg,src1p + emit_bswap_r64(dst, dstreg); // bswap dstreg if (inst.flags() != 0) - emit_test_r64_r64(dst, dstreg, dstreg); // test dstreg,dstreg - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_test_r64_r64(dst, dstreg, dstreg); // test dstreg,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5403,14 +5403,14 @@ void drcbe_x64::op_shl(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_shl_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // shl [dstp],src2p + emit_shl_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // shl [dstp],src2p // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_shl_r32_p32(dst, dstreg, src2p, inst); // shl dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_shl_r32_p32(dst, dstreg, src2p, inst); // shl dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5419,14 +5419,14 @@ void drcbe_x64::op_shl(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_shl_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // shl [dstp],src2p + emit_shl_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // shl [dstp],src2p // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_shl_r64_p64(dst, dstreg, src2p, inst); // shl dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_shl_r64_p64(dst, dstreg, src2p, inst); // shl dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5456,14 +5456,14 @@ void drcbe_x64::op_shr(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_shr_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // shr [dstp],src2p + emit_shr_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // shr [dstp],src2p // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_shr_r32_p32(dst, dstreg, src2p, inst); // shr dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_shr_r32_p32(dst, dstreg, src2p, inst); // shr dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5472,14 +5472,14 @@ void drcbe_x64::op_shr(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_shr_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // shr [dstp],src2p + emit_shr_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // shr [dstp],src2p // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_shr_r64_p64(dst, dstreg, src2p, inst); // shr dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_shr_r64_p64(dst, dstreg, src2p, inst); // shr dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5509,14 +5509,14 @@ void drcbe_x64::op_sar(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_sar_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // sar [dstp],src2p + emit_sar_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // sar [dstp],src2p // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_sar_r32_p32(dst, dstreg, src2p, inst); // sar dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_sar_r32_p32(dst, dstreg, src2p, inst); // sar dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5525,14 +5525,14 @@ void drcbe_x64::op_sar(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_sar_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // sar [dstp],src2p + emit_sar_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // sar [dstp],src2p // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_sar_r64_p64(dst, dstreg, src2p, inst); // sar dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_sar_r64_p64(dst, dstreg, src2p, inst); // sar dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5562,14 +5562,14 @@ void drcbe_x64::op_rol(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_rol_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // rol [dstp],src2p + emit_rol_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // rol [dstp],src2p // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_rol_r32_p32(dst, dstreg, src2p, inst); // rol dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_rol_r32_p32(dst, dstreg, src2p, inst); // rol dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5578,14 +5578,14 @@ void drcbe_x64::op_rol(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_rol_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // rol [dstp],src2p + emit_rol_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // rol [dstp],src2p // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_rol_r64_p64(dst, dstreg, src2p, inst); // rol dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_rol_r64_p64(dst, dstreg, src2p, inst); // rol dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5615,14 +5615,14 @@ void drcbe_x64::op_ror(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_ror_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // ror [dstp],src2p + emit_ror_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // ror [dstp],src2p // general case else { - emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p - emit_ror_r32_p32(dst, dstreg, src2p, inst); // ror dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32(dst, dstreg, src1p); // mov dstreg,src1p + emit_ror_r32_p32(dst, dstreg, src2p, inst); // ror dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5631,14 +5631,14 @@ void drcbe_x64::op_ror(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_ror_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // ror [dstp],src2p + emit_ror_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // ror [dstp],src2p // general case else { - emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p - emit_ror_r64_p64(dst, dstreg, src2p, inst); // ror dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64(dst, dstreg, src1p); // mov dstreg,src1p + emit_ror_r64_p64(dst, dstreg, src2p, inst); // ror dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5668,14 +5668,14 @@ void drcbe_x64::op_rolc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_rcl_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // rcl [dstp],src2p + emit_rcl_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // rcl [dstp],src2p // general case else { - emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_rcl_r32_p32(dst, dstreg, src2p, inst); // rcl dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_rcl_r32_p32(dst, dstreg, src2p, inst); // rcl dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5684,14 +5684,14 @@ void drcbe_x64::op_rolc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_rcl_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // rcl [dstp],src2p + emit_rcl_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // rcl [dstp],src2p // general case else { - emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_rcl_r64_p64(dst, dstreg, src2p, inst); // rcl dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_rcl_r64_p64(dst, dstreg, src2p, inst); // rcl dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5721,14 +5721,14 @@ void drcbe_x64::op_rorc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_rcr_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // rcr [dstp],src2p + emit_rcr_m32_p32(dst, MABS(dstp.memory()), src2p, inst); // rcr [dstp],src2p // general case else { - emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_rcr_r32_p32(dst, dstreg, src2p, inst); // rcr dstreg,src2p - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r32_p32_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_rcr_r32_p32(dst, dstreg, src2p, inst); // rcr dstreg,src2p + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg } } @@ -5737,14 +5737,14 @@ void drcbe_x64::op_rorc(x86code *&dst, const instruction &inst) { // dstp == src1p in memory if (dstp.is_memory() && dstp == src1p) - emit_rcr_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // rcr [dstp],src2p + emit_rcr_m64_p64(dst, MABS(dstp.memory()), src2p, inst); // rcr [dstp],src2p // general case else { - emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p - emit_rcr_r64_p64(dst, dstreg, src2p, inst); // rcr dstreg,src2p - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_r64_p64_keepflags(dst, dstreg, src1p); // mov dstreg,src1p + emit_rcr_r64_p64(dst, dstreg, src2p, inst); // rcr dstreg,src2p + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg } } } @@ -5782,28 +5782,28 @@ void drcbe_x64::op_fload(x86code *&dst, const instruction &inst) if (inst.size() == 4) { if (indp.is_immediate()) - emit_movss_r128_m32(dst, dstreg, MBD(basereg, baseoffs + 4*indp.immediate())); // movss dstreg,[basep + 4*indp] + emit_movss_r128_m32(dst, dstreg, MBD(basereg, baseoffs + 4*indp.immediate())); // movss dstreg,[basep + 4*indp] else { int indreg = indp.select_register(REG_ECX); - emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp - emit_movss_r128_m32(dst, dstreg, MBISD(basereg, indreg, 4, baseoffs)); // movss dstreg,[basep + 4*indp] + emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp + emit_movss_r128_m32(dst, dstreg, MBISD(basereg, indreg, 4, baseoffs)); // movss dstreg,[basep + 4*indp] } - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { if (indp.is_immediate()) - emit_movsd_r128_m64(dst, dstreg, MBD(basereg, baseoffs + 8*indp.immediate())); // movsd dstreg,[basep + 8*indp] + emit_movsd_r128_m64(dst, dstreg, MBD(basereg, baseoffs + 8*indp.immediate())); // movsd dstreg,[basep + 8*indp] else { int indreg = indp.select_register(REG_ECX); - emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp - emit_movsd_r128_m64(dst, dstreg, MBISD(basereg, indreg, 8, baseoffs)); // movsd dstreg,[basep + 8*indp] + emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp + emit_movsd_r128_m64(dst, dstreg, MBISD(basereg, indreg, 8, baseoffs)); // movsd dstreg,[basep + 8*indp] } - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -5834,28 +5834,28 @@ void drcbe_x64::op_fstore(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, srcreg, srcp); // movss srcreg,srcp + emit_movss_r128_p32(dst, srcreg, srcp); // movss srcreg,srcp if (indp.is_immediate()) - emit_movss_m32_r128(dst, MBD(basereg, baseoffs + 4*indp.immediate()), srcreg); // movss [basep + 4*indp],srcreg + emit_movss_m32_r128(dst, MBD(basereg, baseoffs + 4*indp.immediate()), srcreg); // movss [basep + 4*indp],srcreg else { int indreg = indp.select_register(REG_ECX); - emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp - emit_movss_m32_r128(dst, MBISD(basereg, indreg, 4, baseoffs), srcreg); // movss [basep + 4*indp],srcreg + emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp + emit_movss_m32_r128(dst, MBISD(basereg, indreg, 4, baseoffs), srcreg); // movss [basep + 4*indp],srcreg } } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, srcreg, srcp); // movsd srcreg,srcp + emit_movsd_r128_p64(dst, srcreg, srcp); // movsd srcreg,srcp if (indp.is_immediate()) - emit_movsd_m64_r128(dst, MBD(basereg, baseoffs + 8*indp.immediate()), srcreg); // movsd [basep + 8*indp],srcreg + emit_movsd_m64_r128(dst, MBD(basereg, baseoffs + 8*indp.immediate()), srcreg); // movsd [basep + 8*indp],srcreg else { int indreg = indp.select_register(REG_ECX); - emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp - emit_movsd_m64_r128(dst, MBISD(basereg, indreg, 8, baseoffs), srcreg); // movsd [basep + 8*indp],srcreg + emit_mov_r32_p32(dst, indreg, indp); // mov indreg,indp + emit_movsd_m64_r128(dst, MBISD(basereg, indreg, 8, baseoffs), srcreg); // movsd [basep + 8*indp],srcreg } } } @@ -5880,27 +5880,27 @@ void drcbe_x64::op_fread(x86code *&dst, const instruction &inst) assert((1 << spacep.size()) == inst.size()); // set up a call to the read dword/qword handler - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacep.space()])); // mov param1,space - emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacep.space()])); // mov param1,space + emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param2,addrp if (inst.size() == 4) - emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].read_dword); // call read_dword + emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].read_dword); // call read_dword else if (inst.size() == 8) - emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].read_qword); // call read_qword + emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].read_qword); // call read_qword // store result if (inst.size() == 4) { if (dstp.is_memory()) - emit_mov_m32_r32(dst, MABS(dstp.memory()), REG_EAX); // mov [dstp],eax + emit_mov_m32_r32(dst, MABS(dstp.memory()), REG_EAX); // mov [dstp],eax else if (dstp.is_float_register()) - emit_movd_r128_r32(dst, dstp.freg(), REG_EAX); // movd dstp,eax + emit_movd_r128_r32(dst, dstp.freg(), REG_EAX); // movd dstp,eax } else if (inst.size() == 8) { if (dstp.is_memory()) - emit_mov_m64_r64(dst, MABS(dstp.memory()), REG_RAX); // mov [dstp],rax + emit_mov_m64_r64(dst, MABS(dstp.memory()), REG_RAX); // mov [dstp],rax else if (dstp.is_float_register()) - emit_movq_r128_r64(dst, dstp.freg(), REG_RAX); // movq dstp,rax + emit_movq_r128_r64(dst, dstp.freg(), REG_RAX); // movq dstp,rax } } @@ -5924,27 +5924,27 @@ void drcbe_x64::op_fwrite(x86code *&dst, const instruction &inst) assert((1 << spacep.size()) == inst.size()); // general case - emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacep.space()])); // mov param1,space - emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param21,addrp + emit_mov_r64_imm(dst, REG_PARAM1, (FPTR)(m_space[spacep.space()])); // mov param1,space + emit_mov_r32_p32(dst, REG_PARAM2, addrp); // mov param21,addrp // 32-bit form if (inst.size() == 4) { if (srcp.is_memory()) - emit_mov_r32_m32(dst, REG_PARAM3, MABS(srcp.memory())); // mov param3,[srcp] + emit_mov_r32_m32(dst, REG_PARAM3, MABS(srcp.memory())); // mov param3,[srcp] else if (srcp.is_float_register()) - emit_movd_r32_r128(dst, REG_PARAM3, srcp.freg()); // movd param3,srcp - emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].write_dword); // call write_dword + emit_movd_r32_r128(dst, REG_PARAM3, srcp.freg()); // movd param3,srcp + emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].write_dword); // call write_dword } // 64-bit form else if (inst.size() == 8) { if (srcp.is_memory()) - emit_mov_r64_m64(dst, REG_PARAM3, MABS(srcp.memory())); // mov param3,[srcp] + emit_mov_r64_m64(dst, REG_PARAM3, MABS(srcp.memory())); // mov param3,[srcp] else if (srcp.is_float_register()) - emit_movq_r64_r128(dst, REG_PARAM3, srcp.freg()); // movq param3,srcp - emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].write_qword); // call write_qword + emit_movq_r64_r128(dst, REG_PARAM3, srcp.freg()); // movq param3,srcp + emit_smart_call_m64(dst, (x86code **)&m_accessors[spacep.space()].write_qword); // call write_qword } } @@ -5970,25 +5970,25 @@ void drcbe_x64::op_fmov(x86code *&dst, const instruction &inst) // always start with a jmp emit_link skip = { 0 }; if (inst.condition() != uml::COND_ALWAYS) - emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip + emit_jcc_short_link(dst, X86_NOT_CONDITION(inst.condition()), skip); // jcc skip // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } // resolve the jump if (inst.condition() != uml::COND_ALWAYS) - resolve_link(dst, skip); // skip: + resolve_link(dst, skip); // skip: } @@ -6017,8 +6017,8 @@ void drcbe_x64::op_ftoint(x86code *&dst, const instruction &inst) // set rounding mode if necessary if (roundp.rounding() != ROUND_DEFAULT && roundp.rounding() != ROUND_TRUNC) { - emit_stmxcsr_m32(dst, MABS(&m_near.ssemodesave)); // stmxcsr [ssemodesave] - emit_ldmxcsr_m32(dst, MABS(&m_near.ssecontrol[roundp.rounding()])); // ldmxcsr fpcontrol[mode] + emit_stmxcsr_m32(dst, MABS(&m_near.ssemodesave)); // stmxcsr [ssemodesave] + emit_ldmxcsr_m32(dst, MABS(&m_near.ssecontrol[roundp.rounding()])); // ldmxcsr fpcontrol[mode] } // 32-bit form @@ -6030,16 +6030,16 @@ void drcbe_x64::op_ftoint(x86code *&dst, const instruction &inst) if (srcp.is_memory()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtss2si_r32_m32(dst, dstreg, MABS(srcp.memory())); // cvtss2si dstreg,[srcp] + emit_cvtss2si_r32_m32(dst, dstreg, MABS(srcp.memory())); // cvtss2si dstreg,[srcp] else - emit_cvttss2si_r32_m32(dst, dstreg, MABS(srcp.memory())); // cvttss2si dstreg,[srcp] + emit_cvttss2si_r32_m32(dst, dstreg, MABS(srcp.memory())); // cvttss2si dstreg,[srcp] } else if (srcp.is_float_register()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtss2si_r32_r128(dst, dstreg, srcp.freg()); // cvtss2si dstreg,srcp + emit_cvtss2si_r32_r128(dst, dstreg, srcp.freg()); // cvtss2si dstreg,srcp else - emit_cvttss2si_r32_r128(dst, dstreg, srcp.freg()); // cvttss2si dstreg,srcp + emit_cvttss2si_r32_r128(dst, dstreg, srcp.freg()); // cvttss2si dstreg,srcp } } @@ -6049,16 +6049,16 @@ void drcbe_x64::op_ftoint(x86code *&dst, const instruction &inst) if (srcp.is_memory()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtss2si_r64_m32(dst, dstreg, MABS(srcp.memory())); // cvtss2si dstreg,[srcp] + emit_cvtss2si_r64_m32(dst, dstreg, MABS(srcp.memory())); // cvtss2si dstreg,[srcp] else - emit_cvttss2si_r64_m32(dst, dstreg, MABS(srcp.memory())); // cvttss2si dstreg,[srcp] + emit_cvttss2si_r64_m32(dst, dstreg, MABS(srcp.memory())); // cvttss2si dstreg,[srcp] } else if (srcp.is_float_register()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtss2si_r64_r128(dst, dstreg, srcp.freg()); // cvtss2si dstreg,srcp + emit_cvtss2si_r64_r128(dst, dstreg, srcp.freg()); // cvtss2si dstreg,srcp else - emit_cvttss2si_r64_r128(dst, dstreg, srcp.freg()); // cvttss2si dstreg,srcp + emit_cvttss2si_r64_r128(dst, dstreg, srcp.freg()); // cvttss2si dstreg,srcp } } } @@ -6072,16 +6072,16 @@ void drcbe_x64::op_ftoint(x86code *&dst, const instruction &inst) if (srcp.is_memory()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtsd2si_r32_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2si dstreg,[srcp] + emit_cvtsd2si_r32_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2si dstreg,[srcp] else - emit_cvttsd2si_r32_m64(dst, dstreg, MABS(srcp.memory())); // cvttsd2si dstreg,[srcp] + emit_cvttsd2si_r32_m64(dst, dstreg, MABS(srcp.memory())); // cvttsd2si dstreg,[srcp] } else if (srcp.is_float_register()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtsd2si_r32_r128(dst, dstreg, srcp.freg()); // cvtsd2si dstreg,srcp + emit_cvtsd2si_r32_r128(dst, dstreg, srcp.freg()); // cvtsd2si dstreg,srcp else - emit_cvttsd2si_r32_r128(dst, dstreg, srcp.freg()); // cvttsd2si dstreg,srcp + emit_cvttsd2si_r32_r128(dst, dstreg, srcp.freg()); // cvttsd2si dstreg,srcp } } @@ -6091,29 +6091,29 @@ void drcbe_x64::op_ftoint(x86code *&dst, const instruction &inst) if (srcp.is_memory()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtsd2si_r64_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2si dstreg,[srcp] + emit_cvtsd2si_r64_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2si dstreg,[srcp] else - emit_cvttsd2si_r64_m64(dst, dstreg, MABS(srcp.memory())); // cvttsd2si dstreg,[srcp] + emit_cvttsd2si_r64_m64(dst, dstreg, MABS(srcp.memory())); // cvttsd2si dstreg,[srcp] } else if (srcp.is_float_register()) { if (roundp.rounding() != ROUND_TRUNC) - emit_cvtsd2si_r64_r128(dst, dstreg, srcp.freg()); // cvtsd2si dstreg,srcp + emit_cvtsd2si_r64_r128(dst, dstreg, srcp.freg()); // cvtsd2si dstreg,srcp else - emit_cvttsd2si_r64_r128(dst, dstreg, srcp.freg()); // cvttsd2si dstreg,srcp + emit_cvttsd2si_r64_r128(dst, dstreg, srcp.freg()); // cvttsd2si dstreg,srcp } } } // general case if (sizep.size() == SIZE_DWORD) - emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p32_r32(dst, dstp, dstreg); // mov dstp,dstreg else - emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg + emit_mov_p64_r64(dst, dstp, dstreg); // mov dstp,dstreg // restore rounding mode if (roundp.rounding() != ROUND_DEFAULT && roundp.rounding() != ROUND_TRUNC) - emit_ldmxcsr_m32(dst, MABS(&m_near.ssemodesave)); // ldmxcsr [ssemodesave] + emit_ldmxcsr_m32(dst, MABS(&m_near.ssemodesave)); // ldmxcsr [ssemodesave] } @@ -6144,12 +6144,12 @@ void drcbe_x64::op_ffrint(x86code *&dst, const instruction &inst) if (sizep.size() == SIZE_DWORD) { if (srcp.is_memory()) - emit_cvtsi2ss_r128_m32(dst, dstreg, MABS(srcp.memory())); // cvtsi2ss dstreg,[srcp] + emit_cvtsi2ss_r128_m32(dst, dstreg, MABS(srcp.memory())); // cvtsi2ss dstreg,[srcp] else { int srcreg = srcp.select_register(REG_EAX); - emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp - emit_cvtsi2ss_r128_r32(dst, dstreg, srcreg); // cvtsi2ss dstreg,srcreg + emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp + emit_cvtsi2ss_r128_r32(dst, dstreg, srcreg); // cvtsi2ss dstreg,srcreg } } @@ -6157,15 +6157,15 @@ void drcbe_x64::op_ffrint(x86code *&dst, const instruction &inst) else { if (srcp.is_memory()) - emit_cvtsi2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsi2ss dstreg,[srcp] + emit_cvtsi2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsi2ss dstreg,[srcp] else { int srcreg = srcp.select_register(REG_RAX); - emit_mov_r64_p64(dst, srcreg, srcp); // mov srcreg,srcp - emit_cvtsi2ss_r128_r64(dst, dstreg, srcreg); // cvtsi2ss dstreg,srcreg + emit_mov_r64_p64(dst, srcreg, srcp); // mov srcreg,srcp + emit_cvtsi2ss_r128_r64(dst, dstreg, srcreg); // cvtsi2ss dstreg,srcreg } } - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form @@ -6175,12 +6175,12 @@ void drcbe_x64::op_ffrint(x86code *&dst, const instruction &inst) if (sizep.size() == SIZE_DWORD) { if (srcp.is_memory()) - emit_cvtsi2sd_r128_m32(dst, dstreg, MABS(srcp.memory())); // cvtsi2sd dstreg,[srcp] + emit_cvtsi2sd_r128_m32(dst, dstreg, MABS(srcp.memory())); // cvtsi2sd dstreg,[srcp] else { int srcreg = srcp.select_register(REG_EAX); - emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp - emit_cvtsi2sd_r128_r32(dst, dstreg, srcreg); // cvtsi2sd dstreg,srcreg + emit_mov_r32_p32(dst, srcreg, srcp); // mov srcreg,srcp + emit_cvtsi2sd_r128_r32(dst, dstreg, srcreg); // cvtsi2sd dstreg,srcreg } } @@ -6188,15 +6188,15 @@ void drcbe_x64::op_ffrint(x86code *&dst, const instruction &inst) else { if (srcp.is_memory()) - emit_cvtsi2sd_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsi2sd dstreg,[srcp] + emit_cvtsi2sd_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsi2sd dstreg,[srcp] else { int srcreg = srcp.select_register(REG_EAX); - emit_mov_r64_p64(dst, srcreg, srcp); // mov srcreg,srcp - emit_cvtsi2sd_r128_r64(dst, dstreg, srcreg); // cvtsi2sd dstreg,srcreg + emit_mov_r64_p64(dst, srcreg, srcp); // mov srcreg,srcp + emit_cvtsi2sd_r128_r64(dst, dstreg, srcreg); // cvtsi2sd dstreg,srcreg } } - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6225,20 +6225,20 @@ void drcbe_x64::op_ffrflt(x86code *&dst, const instruction &inst) if (inst.size() == 8 && sizep.size() == SIZE_DWORD) { if (srcp.is_memory()) - emit_cvtss2sd_r128_m32(dst, dstreg, MABS(srcp.memory())); // cvtss2sd dstreg,[srcp] + emit_cvtss2sd_r128_m32(dst, dstreg, MABS(srcp.memory())); // cvtss2sd dstreg,[srcp] else if (srcp.is_float_register()) - emit_cvtss2sd_r128_r128(dst, dstreg, srcp.freg()); // cvtss2sd dstreg,srcp - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_cvtss2sd_r128_r128(dst, dstreg, srcp.freg()); // cvtss2sd dstreg,srcp + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } // double-to-single else if (inst.size() == 4 && sizep.size() == SIZE_QWORD) { if (srcp.is_memory()) - emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] + emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] else if (srcp.is_float_register()) - emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } } @@ -6263,11 +6263,11 @@ void drcbe_x64::op_frnds(x86code *&dst, const instruction &inst) // 64-bit form if (srcp.is_memory()) - emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] + emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] else if (srcp.is_float_register()) - emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp - emit_cvtss2sd_r128_r128(dst, dstreg, dstreg); // cvtss2sd dstreg,dstreg - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp + emit_cvtss2sd_r128_r128(dst, dstreg, dstreg); // cvtss2sd dstreg,dstreg + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } @@ -6294,23 +6294,23 @@ void drcbe_x64::op_fadd(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p + emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p if (src2p.is_memory()) - emit_addss_r128_m32(dst, dstreg, MABS(src2p.memory())); // addss dstreg,[src2p] + emit_addss_r128_m32(dst, dstreg, MABS(src2p.memory())); // addss dstreg,[src2p] else if (src2p.is_float_register()) - emit_addss_r128_r128(dst, dstreg, src2p.freg()); // addss dstreg,src2p - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_addss_r128_r128(dst, dstreg, src2p.freg()); // addss dstreg,src2p + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p + emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p if (src2p.is_memory()) - emit_addsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // addsd dstreg,[src2p] + emit_addsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // addsd dstreg,[src2p] else if (src2p.is_float_register()) - emit_addsd_r128_r128(dst, dstreg, src2p.freg()); // addsd dstreg,src2p - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_addsd_r128_r128(dst, dstreg, src2p.freg()); // addsd dstreg,src2p + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6337,23 +6337,23 @@ void drcbe_x64::op_fsub(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p + emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p if (src2p.is_memory()) - emit_subss_r128_m32(dst, dstreg, MABS(src2p.memory())); // subss dstreg,[src2p] + emit_subss_r128_m32(dst, dstreg, MABS(src2p.memory())); // subss dstreg,[src2p] else if (src2p.is_float_register()) - emit_subss_r128_r128(dst, dstreg, src2p.freg()); // subss dstreg,src2p - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_subss_r128_r128(dst, dstreg, src2p.freg()); // subss dstreg,src2p + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p + emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p if (src2p.is_memory()) - emit_subsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // subsd dstreg,[src2p] + emit_subsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // subsd dstreg,[src2p] else if (src2p.is_float_register()) - emit_subsd_r128_r128(dst, dstreg, src2p.freg()); // subsd dstreg,src2p - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_subsd_r128_r128(dst, dstreg, src2p.freg()); // subsd dstreg,src2p + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6379,21 +6379,21 @@ void drcbe_x64::op_fcmp(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, src1reg, src1p); // movss src1reg,src1p + emit_movss_r128_p32(dst, src1reg, src1p); // movss src1reg,src1p if (src2p.is_memory()) - emit_comiss_r128_m32(dst, src1reg, MABS(src2p.memory())); // comiss src1reg,[src2p] + emit_comiss_r128_m32(dst, src1reg, MABS(src2p.memory())); // comiss src1reg,[src2p] else if (src2p.is_float_register()) - emit_comiss_r128_r128(dst, src1reg, src2p.freg()); // comiss src1reg,src2p + emit_comiss_r128_r128(dst, src1reg, src2p.freg()); // comiss src1reg,src2p } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, src1reg, src1p); // movsd src1reg,src1p + emit_movsd_r128_p64(dst, src1reg, src1p); // movsd src1reg,src1p if (src2p.is_memory()) - emit_comisd_r128_m64(dst, src1reg, MABS(src2p.memory())); // comisd src1reg,[src2p] + emit_comisd_r128_m64(dst, src1reg, MABS(src2p.memory())); // comisd src1reg,[src2p] else if (src2p.is_float_register()) - emit_comisd_r128_r128(dst, src1reg, src2p.freg()); // comisd src1reg,src2p + emit_comisd_r128_r128(dst, src1reg, src2p.freg()); // comisd src1reg,src2p } } @@ -6421,23 +6421,23 @@ void drcbe_x64::op_fmul(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p + emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p if (src2p.is_memory()) - emit_mulss_r128_m32(dst, dstreg, MABS(src2p.memory())); // mulss dstreg,[src2p] + emit_mulss_r128_m32(dst, dstreg, MABS(src2p.memory())); // mulss dstreg,[src2p] else if (src2p.is_float_register()) - emit_mulss_r128_r128(dst, dstreg, src2p.freg()); // mulss dstreg,src2p - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_mulss_r128_r128(dst, dstreg, src2p.freg()); // mulss dstreg,src2p + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p + emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p if (src2p.is_memory()) - emit_mulsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // mulsd dstreg,[src2p] + emit_mulsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // mulsd dstreg,[src2p] else if (src2p.is_float_register()) - emit_mulsd_r128_r128(dst, dstreg, src2p.freg()); // mulsd dstreg,src2p - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_mulsd_r128_r128(dst, dstreg, src2p.freg()); // mulsd dstreg,src2p + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6464,23 +6464,23 @@ void drcbe_x64::op_fdiv(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p + emit_movss_r128_p32(dst, dstreg, src1p); // movss dstreg,src1p if (src2p.is_memory()) - emit_divss_r128_m32(dst, dstreg, MABS(src2p.memory())); // divss dstreg,[src2p] + emit_divss_r128_m32(dst, dstreg, MABS(src2p.memory())); // divss dstreg,[src2p] else if (src2p.is_float_register()) - emit_divss_r128_r128(dst, dstreg, src2p.freg()); // divss dstreg,src2p - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_divss_r128_r128(dst, dstreg, src2p.freg()); // divss dstreg,src2p + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p + emit_movsd_r128_p64(dst, dstreg, src1p); // movsd dstreg,src1p if (src2p.is_memory()) - emit_divsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // divsd dstreg,[src2p] + emit_divsd_r128_m64(dst, dstreg, MABS(src2p.memory())); // divsd dstreg,[src2p] else if (src2p.is_float_register()) - emit_divsd_r128_r128(dst, dstreg, src2p.freg()); // divsd dstreg,src2p - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_divsd_r128_r128(dst, dstreg, src2p.freg()); // divsd dstreg,src2p + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6506,23 +6506,23 @@ void drcbe_x64::op_fneg(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_xorps_r128_r128(dst, dstreg, dstreg); // xorps dstreg,dstreg + emit_xorps_r128_r128(dst, dstreg, dstreg); // xorps dstreg,dstreg if (srcp.is_memory()) - emit_subss_r128_m32(dst, dstreg, MABS(srcp.memory())); // subss dstreg,[srcp] + emit_subss_r128_m32(dst, dstreg, MABS(srcp.memory())); // subss dstreg,[srcp] else if (srcp.is_float_register()) - emit_subss_r128_r128(dst, dstreg, srcp.freg()); // subss dstreg,srcp - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_subss_r128_r128(dst, dstreg, srcp.freg()); // subss dstreg,srcp + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_xorpd_r128_r128(dst, dstreg, dstreg); // xorpd dstreg,dstreg + emit_xorpd_r128_r128(dst, dstreg, dstreg); // xorpd dstreg,dstreg if (srcp.is_memory()) - emit_subsd_r128_m64(dst, dstreg, MABS(srcp.memory())); // subsd dstreg,[srcp] + emit_subsd_r128_m64(dst, dstreg, MABS(srcp.memory())); // subsd dstreg,[srcp] else if (srcp.is_float_register()) - emit_subsd_r128_r128(dst, dstreg, srcp.freg()); // subsd dstreg,srcp - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_subsd_r128_r128(dst, dstreg, srcp.freg()); // subsd dstreg,srcp + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6548,17 +6548,17 @@ void drcbe_x64::op_fabs(x86code *&dst, const instruction &inst) // 32-bit form if (inst.size() == 4) { - emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp - emit_andps_r128_m128(dst, dstreg, MABS(m_absmask32)); // andps dstreg,[absmask32] - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_movss_r128_p32(dst, dstreg, srcp); // movss dstreg,srcp + emit_andps_r128_m128(dst, dstreg, MABS(m_absmask32)); // andps dstreg,[absmask32] + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { - emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp - emit_andpd_r128_m128(dst, dstreg, MABS(m_absmask64)); // andpd dstreg,[absmask64] - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_movsd_r128_p64(dst, dstreg, srcp); // movsd dstreg,srcp + emit_andpd_r128_m128(dst, dstreg, MABS(m_absmask64)); // andpd dstreg,[absmask64] + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6585,20 +6585,20 @@ void drcbe_x64::op_fsqrt(x86code *&dst, const instruction &inst) if (inst.size() == 4) { if (srcp.is_memory()) - emit_sqrtss_r128_m32(dst, dstreg, MABS(srcp.memory())); // sqrtss dstreg,[srcp] + emit_sqrtss_r128_m32(dst, dstreg, MABS(srcp.memory())); // sqrtss dstreg,[srcp] else if (srcp.is_float_register()) - emit_sqrtss_r128_r128(dst, dstreg, srcp.freg()); // sqrtss dstreg,srcp - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_sqrtss_r128_r128(dst, dstreg, srcp.freg()); // sqrtss dstreg,srcp + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form else if (inst.size() == 8) { if (srcp.is_memory()) - emit_sqrtsd_r128_m64(dst, dstreg, MABS(srcp.memory())); // sqrtsd dstreg,[srcp] + emit_sqrtsd_r128_m64(dst, dstreg, MABS(srcp.memory())); // sqrtsd dstreg,[srcp] else if (srcp.is_float_register()) - emit_sqrtsd_r128_r128(dst, dstreg, srcp.freg()); // sqrtsd dstreg,srcp - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_sqrtsd_r128_r128(dst, dstreg, srcp.freg()); // sqrtsd dstreg,srcp + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } @@ -6627,19 +6627,19 @@ void drcbe_x64::op_frecip(x86code *&dst, const instruction &inst) if (USE_RCPSS_FOR_SINGLES) { if (srcp.is_memory()) - emit_rcpss_r128_m32(dst, dstreg, MABS(srcp.memory())); // rcpss dstreg,[srcp] + emit_rcpss_r128_m32(dst, dstreg, MABS(srcp.memory())); // rcpss dstreg,[srcp] else if (srcp.is_float_register()) - emit_rcpss_r128_r128(dst, dstreg, srcp.freg()); // rcpss dstreg,srcp - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_rcpss_r128_r128(dst, dstreg, srcp.freg()); // rcpss dstreg,srcp + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } else { - emit_movss_r128_m32(dst, REG_XMM1, MABS(&m_near.single1)); // movss xmm1,1.0 + emit_movss_r128_m32(dst, REG_XMM1, MABS(&m_near.single1)); // movss xmm1,1.0 if (srcp.is_memory()) - emit_divss_r128_m32(dst, REG_XMM1, MABS(srcp.memory())); // divss xmm1,[srcp] + emit_divss_r128_m32(dst, REG_XMM1, MABS(srcp.memory())); // divss xmm1,[srcp] else if (srcp.is_float_register()) - emit_divss_r128_r128(dst, REG_XMM1, srcp.freg()); // divss xmm1,srcp - emit_movss_p32_r128(dst, dstp, REG_XMM1); // movss dstp,xmm1 + emit_divss_r128_r128(dst, REG_XMM1, srcp.freg()); // divss xmm1,srcp + emit_movss_p32_r128(dst, dstp, REG_XMM1); // movss dstp,xmm1 } } @@ -6649,21 +6649,21 @@ void drcbe_x64::op_frecip(x86code *&dst, const instruction &inst) if (USE_RCPSS_FOR_DOUBLES) { if (srcp.is_memory()) - emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] + emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] else if (srcp.is_float_register()) - emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp - emit_rcpss_r128_r128(dst, dstreg, dstreg); // rcpss dstreg,dstreg - emit_cvtss2sd_r128_r128(dst, dstreg, dstreg); // cvtss2sd dstreg,dstreg - emit_movsd_p64_r128(dst, dstp, REG_XMM1); // movsd dstp,dstreg + emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp + emit_rcpss_r128_r128(dst, dstreg, dstreg); // rcpss dstreg,dstreg + emit_cvtss2sd_r128_r128(dst, dstreg, dstreg); // cvtss2sd dstreg,dstreg + emit_movsd_p64_r128(dst, dstp, REG_XMM1); // movsd dstp,dstreg } else { - emit_movsd_r128_m64(dst, REG_XMM1, MABS(&m_near.double1)); // movsd xmm1,1.0 + emit_movsd_r128_m64(dst, REG_XMM1, MABS(&m_near.double1)); // movsd xmm1,1.0 if (srcp.is_memory()) - emit_divsd_r128_m64(dst, REG_XMM1, MABS(srcp.memory())); // divsd xmm1,[srcp] + emit_divsd_r128_m64(dst, REG_XMM1, MABS(srcp.memory())); // divsd xmm1,[srcp] else if (srcp.is_float_register()) - emit_divsd_r128_r128(dst, REG_XMM1, srcp.freg()); // divsd xmm1,srcp - emit_movsd_p64_r128(dst, dstp, REG_XMM1); // movsd dstp,xmm1 + emit_divsd_r128_r128(dst, REG_XMM1, srcp.freg()); // divsd xmm1,srcp + emit_movsd_p64_r128(dst, dstp, REG_XMM1); // movsd dstp,xmm1 } } } @@ -6693,20 +6693,20 @@ void drcbe_x64::op_frsqrt(x86code *&dst, const instruction &inst) if (USE_RSQRTSS_FOR_SINGLES) { if (srcp.is_memory()) - emit_rsqrtss_r128_m32(dst, dstreg, MABS(srcp.memory())); // rsqrtss dstreg,[srcp] + emit_rsqrtss_r128_m32(dst, dstreg, MABS(srcp.memory())); // rsqrtss dstreg,[srcp] else if (srcp.is_float_register()) - emit_rsqrtss_r128_r128(dst, dstreg, srcp.freg()); // rsqrtss dstreg,srcp + emit_rsqrtss_r128_r128(dst, dstreg, srcp.freg()); // rsqrtss dstreg,srcp } else { if (srcp.is_memory()) - emit_sqrtss_r128_m32(dst, REG_XMM1, MABS(srcp.memory())); // sqrtss xmm1,[srcp] + emit_sqrtss_r128_m32(dst, REG_XMM1, MABS(srcp.memory())); // sqrtss xmm1,[srcp] else if (srcp.is_float_register()) - emit_sqrtss_r128_r128(dst, REG_XMM1, srcp.freg()); // sqrtss xmm1,srcp - emit_movss_r128_m32(dst, dstreg, MABS(&m_near.single1)); // movss dstreg,1.0 - emit_divss_r128_r128(dst, dstreg, REG_XMM1); // divss dstreg,xmm1 + emit_sqrtss_r128_r128(dst, REG_XMM1, srcp.freg()); // sqrtss xmm1,srcp + emit_movss_r128_m32(dst, dstreg, MABS(&m_near.single1)); // movss dstreg,1.0 + emit_divss_r128_r128(dst, dstreg, REG_XMM1); // divss dstreg,xmm1 } - emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg + emit_movss_p32_r128(dst, dstp, dstreg); // movss dstp,dstreg } // 64-bit form @@ -6715,21 +6715,21 @@ void drcbe_x64::op_frsqrt(x86code *&dst, const instruction &inst) if (USE_RSQRTSS_FOR_DOUBLES) { if (srcp.is_memory()) - emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] + emit_cvtsd2ss_r128_m64(dst, dstreg, MABS(srcp.memory())); // cvtsd2ss dstreg,[srcp] else if (srcp.is_float_register()) - emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp - emit_rsqrtss_r128_r128(dst, dstreg, dstreg); // rsqrtss dstreg,dstreg - emit_cvtss2sd_r128_r128(dst, dstreg, dstreg); // cvtss2sd dstreg,dstreg + emit_cvtsd2ss_r128_r128(dst, dstreg, srcp.freg()); // cvtsd2ss dstreg,srcp + emit_rsqrtss_r128_r128(dst, dstreg, dstreg); // rsqrtss dstreg,dstreg + emit_cvtss2sd_r128_r128(dst, dstreg, dstreg); // cvtss2sd dstreg,dstreg } else { if (srcp.is_memory()) - emit_sqrtsd_r128_m64(dst, REG_XMM1, MABS(srcp.memory())); // sqrtsd xmm1,[srcp] + emit_sqrtsd_r128_m64(dst, REG_XMM1, MABS(srcp.memory())); // sqrtsd xmm1,[srcp] else if (srcp.is_float_register()) - emit_sqrtsd_r128_r128(dst, REG_XMM1, srcp.freg()); // sqrtsd xmm1,srcp - emit_movsd_r128_m64(dst, dstreg, MABS(&m_near.double1)); // movsd dstreg,1.0 - emit_divsd_r128_r128(dst, dstreg, REG_XMM1); // divsd dstreg,xmm1 + emit_sqrtsd_r128_r128(dst, REG_XMM1, srcp.freg()); // sqrtsd xmm1,srcp + emit_movsd_r128_m64(dst, dstreg, MABS(&m_near.double1)); // movsd dstreg,1.0 + emit_divsd_r128_r128(dst, dstreg, REG_XMM1); // divsd dstreg,xmm1 } - emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg + emit_movsd_p64_r128(dst, dstp, dstreg); // movsd dstp,dstreg } } |