From cff37cc7ee48d18841481ac95c25e77f8004dc11 Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 10 Jul 2020 09:21:14 -0400 Subject: Remove x86emit.h --- scripts/src/cpu.lua | 1 - src/devices/cpu/drcbex86.cpp | 1 - src/devices/cpu/x86emit.h | 3197 ------------------------------------------ src/devices/cpu/x86log.h | 5 +- 4 files changed, 4 insertions(+), 3200 deletions(-) delete mode 100644 src/devices/cpu/x86emit.h diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index 54c0bc7576a..e8eabea847c 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -44,7 +44,6 @@ if (CPU_INCLUDE_DRC) then MAME_DIR .. "src/devices/cpu/drcbex64.cpp", MAME_DIR .. "src/devices/cpu/drcbex64.h", MAME_DIR .. "src/devices/cpu/drcumlsh.h", - MAME_DIR .. "src/devices/cpu/x86emit.h", } end diff --git a/src/devices/cpu/drcbex86.cpp b/src/devices/cpu/drcbex86.cpp index 647d3c4c351..f005ce5cb6a 100644 --- a/src/devices/cpu/drcbex86.cpp +++ b/src/devices/cpu/drcbex86.cpp @@ -89,7 +89,6 @@ #include "drcuml.h" #include "drcbex86.h" -// This is a trick to make it build on Android where the x86 SDK declares ::REG_Exx namespace drc { using namespace uml; diff --git a/src/devices/cpu/x86emit.h b/src/devices/cpu/x86emit.h deleted file mode 100644 index 5494c0b5668..00000000000 --- a/src/devices/cpu/x86emit.h +++ /dev/null @@ -1,3197 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Aaron Giles -/*************************************************************************** - - x86emit.h - - Generic x86/x64 code emitters. - -**************************************************************************** - - Important note: - - It is assumed in 64-bit mode that all byte register accesses are - intended to be to the low 8 bits (SPL,BPL,SIL,DIL) and not to the - upper half (AH,CH,DH,BH). - -***************************************************************************/ - - -//************************************************************************** -// SHARED DEFINITIONS -//************************************************************************** - -#ifndef __X86EMIT_H__ -#define __X86EMIT_H__ - -// use x86code * to reference generated code -typedef uint8_t x86code; - -// this structure tracks information about a link -struct emit_link -{ - x86code * target; - uint8_t size; -}; - -// structure for describing memory references -class x86_memref -{ -public: - x86_memref(uint8_t basereg, uint8_t indreg, uint8_t scale, int32_t disp) - : m_base(basereg), - m_index(indreg), - m_scale(scale), - m_disp(disp) { } - - x86_memref operator+(int32_t offset) { return x86_memref(m_base, m_index, m_scale, m_disp + offset); } - - uint8_t m_base; - uint8_t m_index; - uint8_t m_scale; - int32_t m_disp; -}; - -#endif - - - -//************************************************************************** -// 32-BIT and 64-BIT SPECIFIC DEFINITIONS -//************************************************************************** - -#ifdef X86EMIT_SIZE - -#if (X86EMIT_SIZE != 32 && X86EMIT_SIZE != 64) -#error Must specify X86EMIT_SIZE as either 32 or 64! -#endif - -// put emitters into their own namespace so they don't clash -#if (X86EMIT_SIZE == 32) -namespace x86emit -#else -namespace x64emit -#endif -{ -//************************************************************************** -// CONSTANTS -//************************************************************************** - -// opcode size flag; low 4 bits must match REX low 4 bits, hence the odd numbers here -const uint8_t OP_16BIT = 0x10; -const uint8_t OP_32BIT = 0x00; -const uint8_t OP_64BIT = 0x08; - -// 16 registers on x64, only 8 on x86 -#if (X86EMIT_SIZE == 64) -const int REG_MAX = 16; -#else -const int REG_MAX = 8; -#endif - -// invalid register index for "none" -const uint8_t REG_NONE = REG_MAX; - -// 8-bit registers -- note that we assume a flat model for 64-bit -const uint8_t REG_AL = 0; -const uint8_t REG_CL = 1; -const uint8_t REG_DL = 2; -const uint8_t REG_BL = 3; -#if (X86EMIT_SIZE == 32) -const uint8_t REG_AH = 4; -const uint8_t REG_CH = 5; -const uint8_t REG_DH = 6; -const uint8_t REG_BH = 7; -#else -const uint8_t REG_SPL = 4; -const uint8_t REG_BPL = 5; -const uint8_t REG_SIL = 6; -const uint8_t REG_DIL = 7; -const uint8_t REG_R8L = 8; -const uint8_t REG_R9L = 9; -const uint8_t REG_R10L = 10; -const uint8_t REG_R11L = 11; -const uint8_t REG_R12L = 12; -const uint8_t REG_R13L = 13; -const uint8_t REG_R14L = 14; -const uint8_t REG_R15L = 15; -#endif - -// 16-bit registers -const uint8_t REG_AX = 0; -const uint8_t REG_CX = 1; -const uint8_t REG_DX = 2; -const uint8_t REG_BX = 3; -const uint8_t REG_SP = 4; -const uint8_t REG_BP = 5; -const uint8_t REG_SI = 6; -const uint8_t REG_DI = 7; -#if (X86EMIT_SIZE == 64) -const uint8_t REG_R8W = 8; -const uint8_t REG_R9W = 9; -const uint8_t REG_R10W = 10; -const uint8_t REG_R11W = 11; -const uint8_t REG_R12W = 12; -const uint8_t REG_R13W = 13; -const uint8_t REG_R14W = 14; -const uint8_t REG_R15W = 15; -#endif - -// 32-bit registers -const uint8_t REG_EAX = 0; -const uint8_t REG_ECX = 1; -const uint8_t REG_EDX = 2; -const uint8_t REG_EBX = 3; -const uint8_t REG_ESP = 4; -const uint8_t REG_EBP = 5; -const uint8_t REG_ESI = 6; -const uint8_t REG_EDI = 7; -#if (X86EMIT_SIZE == 64) -const uint8_t REG_R8D = 8; -const uint8_t REG_R9D = 9; -const uint8_t REG_R10D = 10; -const uint8_t REG_R11D = 11; -const uint8_t REG_R12D = 12; -const uint8_t REG_R13D = 13; -const uint8_t REG_R14D = 14; -const uint8_t REG_R15D = 15; -#endif - -// 64-bit registers -#if (X86EMIT_SIZE == 64) -const uint8_t REG_RAX = 0; -const uint8_t REG_RCX = 1; -const uint8_t REG_RDX = 2; -const uint8_t REG_RBX = 3; -const uint8_t REG_RSP = 4; -const uint8_t REG_RBP = 5; -const uint8_t REG_RSI = 6; -const uint8_t REG_RDI = 7; -const uint8_t REG_R8 = 8; -const uint8_t REG_R9 = 9; -const uint8_t REG_R10 = 10; -const uint8_t REG_R11 = 11; -const uint8_t REG_R12 = 12; -const uint8_t REG_R13 = 13; -const uint8_t REG_R14 = 14; -const uint8_t REG_R15 = 15; -#endif - -// 64-bit MMX registers -const uint8_t REG_MM0 = 0; -const uint8_t REG_MM1 = 1; -const uint8_t REG_MM2 = 2; -const uint8_t REG_MM3 = 3; -const uint8_t REG_MM4 = 4; -const uint8_t REG_MM5 = 5; -const uint8_t REG_MM6 = 6; -const uint8_t REG_MM7 = 7; -#if (X86EMIT_SIZE == 64) -const uint8_t REG_MM8 = 8; -const uint8_t REG_MM9 = 9; -const uint8_t REG_MM10 = 10; -const uint8_t REG_MM11 = 11; -const uint8_t REG_MM12 = 12; -const uint8_t REG_MM13 = 13; -const uint8_t REG_MM14 = 14; -const uint8_t REG_MM15 = 15; -#endif - -// 128-bit XMM registers -const uint8_t REG_XMM0 = 0; -const uint8_t REG_XMM1 = 1; -const uint8_t REG_XMM2 = 2; -const uint8_t REG_XMM3 = 3; -const uint8_t REG_XMM4 = 4; -const uint8_t REG_XMM5 = 5; -const uint8_t REG_XMM6 = 6; -const uint8_t REG_XMM7 = 7; -#if (X86EMIT_SIZE == 64) -const uint8_t REG_XMM8 = 8; -const uint8_t REG_XMM9 = 9; -const uint8_t REG_XMM10 = 10; -const uint8_t REG_XMM11 = 11; -const uint8_t REG_XMM12 = 12; -const uint8_t REG_XMM13 = 13; -const uint8_t REG_XMM14 = 14; -const uint8_t REG_XMM15 = 15; -#endif - -// conditions -const uint8_t COND_A = 7; -const uint8_t COND_AE = 3; -const uint8_t COND_B = 2; -const uint8_t COND_BE = 6; -const uint8_t COND_C = 2; -const uint8_t COND_E = 4; -const uint8_t COND_Z = 4; -const uint8_t COND_G = 15; -const uint8_t COND_GE = 13; -const uint8_t COND_L = 12; -const uint8_t COND_LE = 14; -const uint8_t COND_NA = 6; -const uint8_t COND_NAE = 2; -const uint8_t COND_NB = 3; -const uint8_t COND_NBE = 7; -const uint8_t COND_NC = 3; -const uint8_t COND_NE = 5; -const uint8_t COND_NG = 14; -const uint8_t COND_NGE = 12; -const uint8_t COND_NL = 13; -const uint8_t COND_NLE = 15; -const uint8_t COND_NO = 1; -const uint8_t COND_NP = 11; -const uint8_t COND_NS = 9; -const uint8_t COND_NZ = 5; -const uint8_t COND_O = 0; -const uint8_t COND_P = 10; -const uint8_t COND_PE = 10; -const uint8_t COND_PO = 11; -const uint8_t COND_S = 8; - -// floating point rounding modes -const uint8_t FPRND_NEAR = 0; -const uint8_t FPRND_DOWN = 1; -const uint8_t FPRND_UP = 2; -const uint8_t FPRND_CHOP = 3; - - - -//************************************************************************** -// OPCODE DEFINITIONS -//************************************************************************** - -// opcode flags (in upper 8 bits of opcode) -const uint32_t OPFLAG_8BITREG = (1 << 24); -const uint32_t OPFLAG_8BITRM = (1 << 25); - -// single byte opcodes -const uint32_t OP_ADD_Eb_Gb = (0x00 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_ADD_Ev_Gv = 0x01; -const uint32_t OP_ADD_Gb_Eb = (0x02 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_ADD_Gv_Ev = 0x03; -const uint32_t OP_ADD_AL_Ib = 0x04; -const uint32_t OP_ADD_rAX_Iz = 0x05; -const uint32_t OP_PUSH_ES = 0x06; -const uint32_t OP_POP_ES = 0x07; -const uint32_t OP_OR_Eb_Gb = (0x08 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_OR_Ev_Gv = 0x09; -const uint32_t OP_OR_Gb_Eb = (0x0a | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_OR_Gv_Ev = 0x0b; -const uint32_t OP_OR_AL_Ib = 0x0c; -const uint32_t OP_OR_eAX_Iv = 0x0d; -const uint32_t OP_PUSH_CS = 0x0e; -const uint32_t OP_EXTENDED = 0x0f; - -const uint32_t OP_ADC_Eb_Gb = (0x10 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_ADC_Ev_Gv = 0x11; -const uint32_t OP_ADC_Gb_Eb = (0x12 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_ADC_Gv_Ev = 0x13; -const uint32_t OP_ADC_AL_Ib = 0x14; -const uint32_t OP_ADC_rAX_Iz = 0x15; -const uint32_t OP_PUSH_SS = 0x16; -const uint32_t OP_POP_SS = 0x17; -const uint32_t OP_SBB_Eb_Gb = (0x18 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_SBB_Ev_Gv = 0x19; -const uint32_t OP_SBB_Gb_Eb = (0x1a | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_SBB_Gv_Ev = 0x1b; -const uint32_t OP_SBB_AL_Ib = 0x1c; -const uint32_t OP_SBB_eAX_Iv = 0x1d; -const uint32_t OP_PUSH_DS = 0x1e; -const uint32_t OP_POP_DS = 0x1f; - -const uint32_t OP_AND_Eb_Gb = (0x20 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_AND_Ev_Gv = 0x21; -const uint32_t OP_AND_Gb_Eb = (0x22 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_AND_Gv_Ev = 0x23; -const uint32_t OP_AND_AL_Ib = 0x24; -const uint32_t OP_AND_rAX_Iz = 0x25; -const uint32_t PREFIX_ES = 0x26; -const uint32_t OP_DAA = 0x27; -const uint32_t OP_SUB_Eb_Gb = (0x28 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_SUB_Ev_Gv = 0x29; -const uint32_t OP_SUB_Gb_Eb = (0x2a | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_SUB_Gv_Ev = 0x2b; -const uint32_t OP_SUB_AL_Ib = 0x2c; -const uint32_t OP_SUB_eAX_Iv = 0x2d; -const uint32_t PREFIX_CS = 0x2e; -const uint32_t OP_DAS = 0x2f; - -const uint32_t OP_XOR_Eb_Gb = (0x30 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_XOR_Ev_Gv = 0x31; -const uint32_t OP_XOR_Gb_Eb = (0x32 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_XOR_Gv_Ev = 0x33; -const uint32_t OP_XOR_AL_Ib = 0x34; -const uint32_t OP_XOR_rAX_Iz = 0x35; -const uint32_t PREFIX_SS = 0x36; -const uint32_t OP_AAA = 0x37; -const uint32_t OP_CMP_Eb_Gb = (0x38 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_CMP_Ev_Gv = 0x39; -const uint32_t OP_CMP_Gb_Eb = (0x3a | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_CMP_Gv_Ev = 0x3b; -const uint32_t OP_CMP_AL_Ib = 0x3c; -const uint32_t OP_CMP_eAX_Iv = 0x3d; -const uint32_t PREFIX_DS = 0x3e; -const uint32_t OP_AAS = 0x3f; - -const uint32_t OP_REX = 0x40; -const uint32_t OP_REX_B = 0x41; -const uint32_t OP_REX_X = 0x42; -const uint32_t OP_REX_XB = 0x43; -const uint32_t OP_REX_R = 0x44; -const uint32_t OP_REX_RB = 0x45; -const uint32_t OP_REX_RX = 0x46; -const uint32_t OP_REX_RXB = 0x47; -const uint32_t OP_REX_W = 0x48; -const uint32_t OP_REX_WB = 0x49; -const uint32_t OP_REX_WX = 0x4a; -const uint32_t OP_REX_WXB = 0x4b; -const uint32_t OP_REX_WR = 0x4c; -const uint32_t OP_REX_WRB = 0x4d; -const uint32_t OP_REX_WRX = 0x4e; -const uint32_t OP_REX_WRXB = 0x4f; - -const uint32_t OP_PUSH_rAX = 0x50; -const uint32_t OP_PUSH_rCX = 0x51; -const uint32_t OP_PUSH_rDX = 0x52; -const uint32_t OP_PUSH_rBX = 0x53; -const uint32_t OP_PUSH_rSP = 0x54; -const uint32_t OP_PUSH_rBP = 0x55; -const uint32_t OP_PUSH_rSI = 0x56; -const uint32_t OP_PUSH_rDI = 0x57; -const uint32_t OP_POP_rAX = 0x58; -const uint32_t OP_POP_rCX = 0x59; -const uint32_t OP_POP_rDX = 0x5a; -const uint32_t OP_POP_rBX = 0x5b; -const uint32_t OP_POP_rSP = 0x5c; -const uint32_t OP_POP_rBP = 0x5d; -const uint32_t OP_POP_rSI = 0x5e; -const uint32_t OP_POP_rDI = 0x5f; - -const uint32_t OP_PUSHA = 0x60; -const uint32_t OP_POPA = 0x61; -const uint32_t OP_BOUND_Gv_Ma = 0x62; -const uint32_t OP_ARPL_Ew_Gw = 0x63; -const uint32_t OP_MOVSXD_Gv_Ev = 0x63; -const uint32_t PREFIX_FS = 0x64; -const uint32_t PREFIX_GS = 0x65; -const uint32_t PREFIX_OPSIZE = 0x66; -const uint32_t PREFIX_ADSIZE = 0x67; -const uint32_t OP_PUSH_Iz = 0x68; -const uint32_t OP_IMUL_Gv_Ev_Iz = 0x69; -const uint32_t OP_PUSH_Ib = 0x6a; -const uint32_t OP_IMUL_Gv_Ev_Ib = 0x6b; -const uint32_t OP_INS_Yb_DX = 0x6c; -const uint32_t OP_INS_Yz_DX = 0x6d; -const uint32_t OP_OUTS_DX_Xb = 0x6e; -const uint32_t OP_OUTS_DX_Xz = 0x6f; - -const uint32_t OP_JCC_O_Jb = 0x70; -const uint32_t OP_JCC_NO_Jb = 0x71; -const uint32_t OP_JCC_B_Jb = 0x72; -const uint32_t OP_JCC_C_Jb = 0x72; -const uint32_t OP_JCC_NAE_Jb = 0x72; -const uint32_t OP_JCC_AE_Jb = 0x73; -const uint32_t OP_JCC_NB_Jb = 0x73; -const uint32_t OP_JCC_NC_Jb = 0x73; -const uint32_t OP_JCC_E_Jb = 0x74; -const uint32_t OP_JCC_Z_Jb = 0x74; -const uint32_t OP_JCC_NE_Jb = 0x75; -const uint32_t OP_JCC_NZ_Jb = 0x75; -const uint32_t OP_JCC_BE_Jb = 0x76; -const uint32_t OP_JCC_NA_Jb = 0x76; -const uint32_t OP_JCC_A_Jb = 0x77; -const uint32_t OP_JCC_NBE_Jb = 0x77; -const uint32_t OP_JCC_S_Jb = 0x78; -const uint32_t OP_JCC_NS_Jb = 0x79; -const uint32_t OP_JCC_P_Jb = 0x7a; -const uint32_t OP_JCC_PE_Jb = 0x7a; -const uint32_t OP_JCC_NP_Jb = 0x7b; -const uint32_t OP_JCC_PO_Jb = 0x7b; -const uint32_t OP_JCC_L_Jb = 0x7c; -const uint32_t OP_JCC_NGE_Jb = 0x7c; -const uint32_t OP_JCC_NL_Jb = 0x7d; -const uint32_t OP_JCC_GE_Jb = 0x7d; -const uint32_t OP_JCC_LE_Jb = 0x7e; -const uint32_t OP_JCC_NG_Jb = 0x7e; -const uint32_t OP_JCC_NLE_Jb = 0x7f; -const uint32_t OP_JCC_G_Jb = 0x7f; - -const uint32_t OP_G1_Eb_Ib = (0x80 | OPFLAG_8BITRM); -const uint32_t OP_G1_Ev_Iz = 0x81; -const uint32_t OP_G1_Eb_Ibx = (0x82 | OPFLAG_8BITRM); -const uint32_t OP_G1_Ev_Ib = 0x83; -const uint32_t OP_TEST_Eb_Gb = (0x84 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_TEST_Ev_Gv = 0x85; -const uint32_t OP_XCHG_Eb_Gb = (0x86 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_XCHG_Ev_Gv = 0x87; -const uint32_t OP_MOV_Eb_Gb = (0x88 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_MOV_Ev_Gv = 0x89; -const uint32_t OP_MOV_Gb_Eb = (0x8a | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_MOV_Gv_Ev = 0x8b; -const uint32_t OP_MOV_Ev_Sw = 0x8c; -const uint32_t OP_LEA_Gv_M = 0x8d; -const uint32_t OP_MOV_Sw_Ew = 0x8e; -const uint32_t OP_G1A_Ev = 0x8f; - -const uint32_t OP_NOP = 0x90; -const uint32_t OP_PAUSE = 0x90; -const uint32_t OP_XCHG_rCX = 0x91; -const uint32_t OP_XCHG_rDX = 0x92; -const uint32_t OP_XCHG_rBX = 0x93; -const uint32_t OP_XCHG_rSP = 0x94; -const uint32_t OP_XCHG_rBP = 0x95; -const uint32_t OP_XCHG_rSI = 0x96; -const uint32_t OP_XCHG_rDI = 0x97; -const uint32_t OP_CBW = 0x98; -const uint32_t OP_CWDE = 0x98; -const uint32_t OP_CDQE = 0x98; -const uint32_t OP_CWD = 0x99; -const uint32_t OP_CDQ = 0x99; -const uint32_t OP_CQO = 0x99; -const uint32_t OP_CALLF_Ap = 0x9a; -const uint32_t OP_FWAIT = 0x9b; -const uint32_t OP_PUSHF_Fv = 0x9c; -const uint32_t OP_POPF_Fv = 0x9d; -const uint32_t OP_SAHF = 0x9e; -const uint32_t OP_LAHF = 0x9f; - -const uint32_t OP_MOV_AL_Ob = 0xa0; -const uint32_t OP_MOV_rAX_Ov = 0xa1; -const uint32_t OP_MOV_Ob_AL = 0xa2; -const uint32_t OP_MOV_Ov_rAX = 0xa3; -const uint32_t OP_MOVS_Xb_Yb = 0xa4; -const uint32_t OP_MOVS_Xv_Yv = 0xa5; -const uint32_t OP_CMPS_Xb_Yb = 0xa6; -const uint32_t OP_CMPS_Xv_Yv = 0xa7; -const uint32_t OP_TEST_AL_Ib = 0xa8; -const uint32_t OP_TEST_rAX_Iz = 0xa9; -const uint32_t OP_STOS_Yb_AL = 0xaa; -const uint32_t OP_STOS_Yv_rAX = 0xab; -const uint32_t OP_LODS_AL_Xb = 0xac; -const uint32_t OP_LODS_rAX_Xv = 0xad; -const uint32_t OP_SCAS_AL_Yb = 0xae; -const uint32_t OP_SCAC_rAX_Yv = 0xaf; - -const uint32_t OP_MOV_AL_Ib = 0xb0; -const uint32_t OP_MOV_CL_Ib = 0xb1; -const uint32_t OP_MOV_DL_Ib = 0xb2; -const uint32_t OP_MOV_BL_Ib = 0xb3; -const uint32_t OP_MOV_AH_Ib = 0xb4; -const uint32_t OP_MOV_CH_Ib = 0xb5; -const uint32_t OP_MOV_DH_Ib = 0xb6; -const uint32_t OP_MOV_BH_Ib = 0xb7; -const uint32_t OP_MOV_rAX_Iv = 0xb8; -const uint32_t OP_MOV_rCX_Iv = 0xb9; -const uint32_t OP_MOV_rDX_Iv = 0xba; -const uint32_t OP_MOV_rBX_Iv = 0xbb; -const uint32_t OP_MOV_rSP_Iv = 0xbc; -const uint32_t OP_MOV_rBP_Iv = 0xbd; -const uint32_t OP_MOV_rSI_Iv = 0xbe; -const uint32_t OP_MOV_rDI_Iv = 0xbf; - -const uint32_t OP_G2_Eb_Ib = (0xc0 | OPFLAG_8BITRM); -const uint32_t OP_G2_Ev_Ib = 0xc1; -const uint32_t OP_RETN_Iw = 0xc2; -const uint32_t OP_RETN = 0xc3; -const uint32_t OP_LES_Gz_Mp = 0xc4; -const uint32_t OP_LDS_Gz_Mp = 0xc5; -const uint32_t OP_G11_Eb_Ib = (0xc6 | OPFLAG_8BITRM); -const uint32_t OP_G11_Ev_Iz = 0xc7; -const uint32_t OP_ENTER_Iw_Ib = 0xc8; -const uint32_t OP_LEAVE = 0xc9; -const uint32_t OP_RETF_Iw = 0xca; -const uint32_t OP_RETF = 0xcb; -const uint32_t OP_INT_3 = 0xcc; -const uint32_t OP_INT_Ib = 0xcd; -const uint32_t OP_INTO = 0xce; -const uint32_t OP_IRET = 0xcf; - -const uint32_t OP_G2_Eb_1 = (0xd0 | OPFLAG_8BITRM); -const uint32_t OP_G2_Ev_1 = 0xd1; -const uint32_t OP_G2_Eb_CL = (0xd2 | OPFLAG_8BITRM); -const uint32_t OP_G2_Ev_CL = 0xd3; -const uint32_t OP_AAM = 0xd4; -const uint32_t OP_AAD = 0xd5; -const uint32_t OP_XLAT = 0xd7; -const uint32_t OP_ESC_D8 = 0xd8; -const uint32_t OP_ESC_D9 = 0xd9; -const uint32_t OP_ESC_DA = 0xda; -const uint32_t OP_ESC_DB = 0xdb; -const uint32_t OP_ESC_DC = 0xdc; -const uint32_t OP_ESC_DD = 0xdd; -const uint32_t OP_ESC_DE = 0xde; -const uint32_t OP_ESC_DF = 0xdf; - -const uint32_t OP_LOOPNE_Jb = 0xe0; -const uint32_t OP_LOOPE_Jb = 0xe1; -const uint32_t OP_LOOP_Jb = 0xe2; -const uint32_t OP_JrCXZ_Jb = 0xe3; -const uint32_t OP_IN_AL_Ib = 0xe4; -const uint32_t OP_IN_eAX_Ib = 0xe5; -const uint32_t OP_OUT_Ib_AL = 0xe6; -const uint32_t OP_OUT_Ib_eAX = 0xe7; -const uint32_t OP_CALL_Jz = 0xe8; -const uint32_t OP_JMP_Jz = 0xe9; -const uint32_t OP_JMPF_AP = 0xea; -const uint32_t OP_JMP_Jb = 0xeb; -const uint32_t OP_IN_AL_DX = 0xec; -const uint32_t OP_IN_eAX_D = 0xed; -const uint32_t OP_OUT_DX_AL = 0xee; -const uint32_t OP_OUT_DX_eAX = 0xef; - -const uint32_t PREFIX_LOCK = 0xf0; -const uint32_t PREFIX_REPNE = 0xf2; -const uint32_t PREFIX_REPE = 0xf3; -const uint32_t OP_HLT = 0xf4; -const uint32_t OP_CMC = 0xf5; -const uint32_t OP_G3_Eb = (0xf6 | OPFLAG_8BITRM); -const uint32_t OP_G3_Ev = 0xf7; -const uint32_t OP_CLC = 0xf8; -const uint32_t OP_STC = 0xf9; -const uint32_t OP_CLI = 0xfa; -const uint32_t OP_STI = 0xfb; -const uint32_t OP_CLD = 0xfc; -const uint32_t OP_STD = 0xfd; -const uint32_t OP_G4 = 0xfe; -const uint32_t OP_G5 = 0xff; - - -// double byte opcodes -const uint32_t OP_G6 = 0x0f00; -const uint32_t OP_G7 = 0x0f01; -const uint32_t OP_LAR_Gv_Ew = 0x0f02; -const uint32_t OP_LSL_Gv_Ew = 0x0f03; -const uint32_t OP_SYSCALL = 0x0f05; -const uint32_t OP_CLTS = 0x0f06; -const uint32_t OP_SYSRET = 0x0f07; -const uint32_t OP_INVD = 0x0f08; -const uint32_t OP_WBINVD = 0x0f09; -const uint32_t OP_UD2 = 0x0f0b; -const uint32_t OP_NOP0d_Ev = 0x0f0d; - -const uint32_t OP_MOVUPS_Vps_Wps = 0x0f10; -const uint32_t OP_MOVSS_Vss_Wss = 0xf30f10; -const uint32_t OP_MOVUPD_Vpd_Wpd = 0x660f10; -const uint32_t OP_MOVSD_Vsd_Wsd = 0xf20f10; -const uint32_t OP_MOVUPS_Wps_Vps = 0x0f11; -const uint32_t OP_MOVSS_Wss_Vss = 0xf30f11; -const uint32_t OP_MOVUPD_Wpd_Vpd = 0x660f11; -const uint32_t OP_MOVSD_Wsd_Vsd = 0xf20f11; -const uint32_t OP_MOVLPS_Vq_Mq = 0x0f12; -const uint32_t OP_MOVLPD_Vq_Mq = 0x660f12; -const uint32_t OP_MOVHLPS_Vq_Uq = 0x0f12; -const uint32_t OP_MOVDDUP_Vq_Wq = 0xf20f12; -const uint32_t OP_MOVSLDUP_Vq_Wq = 0xf30f12; -const uint32_t OP_MOVLPS_Mq_Vq = 0x0f13; -const uint32_t OP_MOVLPD_Mq_Vq = 0x660f13; -const uint32_t OP_UNPCKLPS_Vps_Wq = 0x0f14; -const uint32_t OP_UNPCKLPD_Vpd_Wq = 0x660f14; -const uint32_t OP_UNPCKHPS_Vps_Wq = 0x0f15; -const uint32_t OP_UNPCKHPD_Vpd_Wq = 0x660f15; -const uint32_t OP_MOVHPS_Vq_Mq = 0x0f16; -const uint32_t OP_MOVHPD_Vq_Mq = 0x660f16; -const uint32_t OP_MOVLHPS_Vq_Uq = 0x0f16; -const uint32_t OP_MOVSHDUP_Vq_Wq = 0xf30f16; -const uint32_t OP_MOVHPS_Mq_Vq = 0x0f17; -const uint32_t OP_MOVHPD_Mq_Vq = 0x660f17; -const uint32_t OP_PREFETCH_G16 = 0x0f18; -const uint32_t OP_NOP1f_Ev = 0x0f1f; - -const uint32_t OP_MOV_Rd_Cd = 0x0f20; -const uint32_t OP_MOV_Rd_Dd = 0x0f21; -const uint32_t OP_MOV_Cd_Rd = 0x0f22; -const uint32_t OP_MOV_Dd_Rd = 0x0f23; -const uint32_t OP_MOVAPS_Vps_Wps = 0x0f28; -const uint32_t OP_MOVAPD_Vpd_Wpd = 0x660f28; -const uint32_t OP_MOVAPS_Wps_Vps = 0x0f29; -const uint32_t OP_MOVAPD_Wpd_Vpd = 0x660f29; -const uint32_t OP_CVTPI2PS_Vps_Qq = 0x0f2a; -const uint32_t OP_CVTSI2SS_Vss_Ed = 0xf30f2a; -const uint32_t OP_CVTPI2PD_Vpd_Qq = 0x660f2a; -const uint32_t OP_CVTSI2SD_Vsd_Ed = 0xf20f2a; -const uint32_t OP_MOVNTPS_Mps_Vps = 0x0f2b; -const uint32_t OP_MOVNTPD_Mpd_Vpd = 0x660f2b; -const uint32_t OP_CVTTPS2PI_Pq_Wq = 0x0f2c; -const uint32_t OP_CVTTSS2SI_Gd_Wss = 0xf30f2c; -const uint32_t OP_CVTTPD2PI_Pq_Wpd = 0x660f2c; -const uint32_t OP_CVTTSD2SI_Gd_Wsd = 0xf20f2c; -const uint32_t OP_CVTPS2PI_Pq_Wq = 0x0f2d; -const uint32_t OP_CVTSS2SI_Gd_Wss = 0xf30f2d; -const uint32_t OP_CVTPD2PI_Pq_Wpd = 0x660f2d; -const uint32_t OP_CVTSD2SI_Gd_Wsd = 0xf20f2d; -const uint32_t OP_UCOMISS_Vss_Wss = 0x0f2e; -const uint32_t OP_UCOMISD_Vsd_Wsd = 0x660f2e; -const uint32_t OP_COMISS_Vss_Wss = 0x0f2f; -const uint32_t OP_COMISD_Vsd_Wsd = 0x660f2f; - -const uint32_t OP_WRMSR = 0x0f30; -const uint32_t OP_RDTSC = 0x0f31; -const uint32_t OP_RDMSR = 0x0f32; -const uint32_t OP_RDPMC = 0x0f33; -const uint32_t OP_SYSENTER = 0x0f34; -const uint32_t OP_SYSEXIT = 0x0f35; -const uint32_t OP_GETSEC = 0x0f37; - -const uint32_t OP_CMOV_O_Gv_Ev = 0x0f40; -const uint32_t OP_CMOV_NO_Gv_Ev = 0x0f41; -const uint32_t OP_CMOV_B_Gv_Ev = 0x0f42; -const uint32_t OP_CMOV_C_Gv_Ev = 0x0f42; -const uint32_t OP_CMOV_AE_Gv_Ev = 0x0f43; -const uint32_t OP_CMOV_NC_Gv_Ev = 0x0f43; -const uint32_t OP_CMOV_E_Gv_Ev = 0x0f44; -const uint32_t OP_CMOV_Z_Gv_Ev = 0x0f44; -const uint32_t OP_CMOV_NE_Gv_Ev = 0x0f45; -const uint32_t OP_CMOV_NZ_Gv_Ev = 0x0f45; -const uint32_t OP_CMOV_BE_Gv_Ev = 0x0f46; -const uint32_t OP_CMOV_A_Gv_Ev = 0x0f47; -const uint32_t OP_CMOV_S_Gv_Ev = 0x0f48; -const uint32_t OP_CMOV_NS_Gv_Ev = 0x0f49; -const uint32_t OP_CMOV_P_Gv_Ev = 0x0f4a; -const uint32_t OP_CMOV_PE_Gv_Ev = 0x0f4a; -const uint32_t OP_CMOV_NP_Gv_Ev = 0x0f4b; -const uint32_t OP_CMOV_PO_Gv_Ev = 0x0f4b; -const uint32_t OP_CMOV_L_Gv_Ev = 0x0f4c; -const uint32_t OP_CMOV_NGE_Gv_Ev = 0x0f4c; -const uint32_t OP_CMOV_NL_Gv_Ev = 0x0f4d; -const uint32_t OP_CMOV_GE_Gv_Ev = 0x0f4d; -const uint32_t OP_CMOV_LE_Gv_Ev = 0x0f4e; -const uint32_t OP_CMOV_NG_Gv_Ev = 0x0f4e; -const uint32_t OP_CMOV_NLE_Gv_Ev = 0x0f4f; -const uint32_t OP_CMOV_G_Gv_Ev = 0x0f4f; - -const uint32_t OP_MOVMSKPS_Gd_Ups = 0x0f50; -const uint32_t OP_MOVMSKPD_Gd_Upd = 0x660f50; -const uint32_t OP_SQRTPS_Vps_Wps = 0x0f51; -const uint32_t OP_SQRTSS_Vss_Wss = 0xf30f51; -const uint32_t OP_SQRTPD_Vpd_Wpd = 0x660f51; -const uint32_t OP_SQRTSD_Vsd_Wsd = 0xf20f51; -const uint32_t OP_RSQRTPS_Vps_Wps = 0x0f52; -const uint32_t OP_RSQRTSS_Vss_Wss = 0xf30f52; -const uint32_t OP_RCPPS_Vps_Wps = 0x0f53; -const uint32_t OP_RCPSS_Vss_Wss = 0xf30f53; -const uint32_t OP_ANDPS_Vps_Wps = 0x0f54; -const uint32_t OP_ANDPD_Vpd_Wpd = 0x660f54; -const uint32_t OP_ANDNPS_Vps_Wps = 0x0f55; -const uint32_t OP_ANDNPD_Vpd_Wpd = 0x660f55; -const uint32_t OP_ORPS_Vps_Wps = 0x0f56; -const uint32_t OP_ORPD_Vpd_Wpd = 0x660f56; -const uint32_t OP_XORPS_Vps_Wps = 0x0f57; -const uint32_t OP_XORPD_Vpd_Wpd = 0x660f57; -const uint32_t OP_ADDPS_Vps_Wps = 0x0f58; -const uint32_t OP_ADDSS_Vss_Wss = 0xf30f58; -const uint32_t OP_ADDPD_Vpd_Wpd = 0x660f58; -const uint32_t OP_ADDSD_Vsd_Wsd = 0xf20f58; -const uint32_t OP_MULPS_Vps_Wps = 0x0f59; -const uint32_t OP_MULSS_Vss_Wss = 0xf30f59; -const uint32_t OP_MULPD_Vpd_Wpd = 0x660f59; -const uint32_t OP_MULSD_Vsd_Wsd = 0xf20f59; -const uint32_t OP_CVTPS2PD_Vpd_Wq = 0x0f5a; -const uint32_t OP_CVTSS2SD_Vsd_Wss = 0xf30f5a; -const uint32_t OP_CVTPD2PS_Vps_Wpd = 0x660f5a; -const uint32_t OP_CVTSD2SS_Vss_Wsd = 0xf20f5a; -const uint32_t OP_CVTDQ2PS_Vps_Wdq = 0x0f5b; -const uint32_t OP_CVTPS2DQ_Vdq_Wps = 0x660f5b; -const uint32_t OP_CVTTPS2DQ_Vdq_Wps = 0xf30f5b; -const uint32_t OP_SUBPS_Vps_Wps = 0x0f5c; -const uint32_t OP_SUBSS_Vss_Wss = 0xf30f5c; -const uint32_t OP_SUBPD_Vpd_Wpd = 0x660f5c; -const uint32_t OP_SUBSD_Vsd_Wsd = 0xf20f5c; -const uint32_t OP_MINPS_Vps_Wps = 0x0f5d; -const uint32_t OP_MINSS_Vss_Wss = 0xf30f5d; -const uint32_t OP_MINPD_Vpd_Wpd = 0x660f5d; -const uint32_t OP_MINSD_Vsd_Wsd = 0xf20f5d; -const uint32_t OP_DIVPS_Vps_Wps = 0x0f5e; -const uint32_t OP_DIVSS_Vss_Wss = 0xf30f5e; -const uint32_t OP_DIVPD_Vpd_Wpd = 0x660f5e; -const uint32_t OP_DIVSD_Vsd_Wsd = 0xf20f5e; -const uint32_t OP_MAXPS_Vps_Wps = 0x0f5f; -const uint32_t OP_MAXSS_Vss_Wss = 0xf30f5f; -const uint32_t OP_MAXPD_Vpd_Wpd = 0x660f5f; -const uint32_t OP_MAXSD_Vsd_Wsd = 0xf20f5f; - -const uint32_t OP_PUNPCKLBW_Pq_Qd = 0x0f60; -const uint32_t OP_PUNPCKLBW_Vdq_Wdq = 0x660f60; -const uint32_t OP_PUNPCKLWD_Pq_Qd = 0x0f61; -const uint32_t OP_PUNPCKLWD_Vdq_Wdq = 0x660f61; -const uint32_t OP_PUNPCKLDQ_Pq_Qd = 0x0f62; -const uint32_t OP_PUNPCKLDQ_Vdq_Wdq = 0x660f62; -const uint32_t OP_PACKSSWB_Pq_Qq = 0x0f63; -const uint32_t OP_PACKSSWB_Vdq_Wdq = 0x660f63; -const uint32_t OP_PCMPGTB_Pq_Qq = 0x0f64; -const uint32_t OP_PCMPGTB_Vdq_Wdq = 0x660f64; -const uint32_t OP_PCMPGTW_Pq_Qq = 0x0f65; -const uint32_t OP_PCMPGTW_Vdq_Wdq = 0x660f65; -const uint32_t OP_PCMPGTD_Pq_Qq = 0x0f66; -const uint32_t OP_PCMPGTD_Vdq_Wdq = 0x660f66; -const uint32_t OP_PACKUSWB_Pq_Qq = 0x0f67; -const uint32_t OP_PACKUSWB_Vdq_Wdq = 0x660f67; -const uint32_t OP_PUNPCKHBW_Pq_Qq = 0x0f68; -const uint32_t OP_PUNPCKHBW_Vdq_Qdq = 0x660f68; -const uint32_t OP_PUNPCKHWD_Pq_Qq = 0x0f69; -const uint32_t OP_PUNPCKHWD_Vdq_Qdq = 0x660f69; -const uint32_t OP_PUNPCKHDQ_Pq_Qq = 0x0f6a; -const uint32_t OP_PUNPCKHDQ_Vdq_Qdq = 0x660f6a; -const uint32_t OP_PACKSSDW_Pq_Qq = 0x0f6b; -const uint32_t OP_PACKSSDW_Vdq_Qdq = 0x660f6b; -const uint32_t OP_PUNPCKLQDQ_Vdq_Wdq = 0x660f6c; -const uint32_t OP_PUNPCKHQDQ_Vdq_Wdq = 0x660f6d; -const uint32_t OP_MOVD_Pd_Ed = 0x0f6e; -const uint32_t OP_MOVD_Vd_Ed = 0x660f6e; -const uint32_t OP_MOVQ_Pq_Qq = 0x0f6f; -const uint32_t OP_MOVDQA_Vdq_Wdq = 0x660f6f; -const uint32_t OP_MOVDQU_Vdq_Wdq = 0xf30f6f; - -const uint32_t OP_PSHUFW_Pq_Qq_Ib = 0x0f70; -const uint32_t OP_PSHUFD_Vdq_Wdq_Ib = 0x660f70; -const uint32_t OP_PSHUFHW_Vdq_Wdq_Ib = 0xf30f70; -const uint32_t OP_PSHUFLW_Vdq_Wdq_Ib = 0xf20f70; -const uint32_t OP_G12 = 0x0f71; -const uint32_t OP_G13 = 0x0f72; -const uint32_t OP_G14 = 0x0f73; -const uint32_t OP_PCMPEQB_Pq_Qq = 0x0f74; -const uint32_t OP_PCMPEQB_Vdq_Wdq = 0x660f74; -const uint32_t OP_PCMPEQW_Pq_Qq = 0x0f75; -const uint32_t OP_PCMPEQW_Vdq_Wdq = 0x660f75; -const uint32_t OP_PCMPEQD_Pq_Qq = 0x0f76; -const uint32_t OP_PCMPEQD_Vdq_Wdq = 0x660f76; -const uint32_t OP_EMMS = 0x0f77; -const uint32_t OP_VMREAD_Ed_Gd = 0x0f78; -const uint32_t OP_VMWRITE_Gd_Ed = 0x0f79; -const uint32_t OP_HADDPD_Vpd_Wpd = 0x660f7c; -const uint32_t OP_HADDPS_Vps_Wps = 0xf20f7c; -const uint32_t OP_HSUBPD_Vpd_Wpd = 0x660f7d; -const uint32_t OP_HSUBPS_Vps_Wps = 0xf20f7d; -const uint32_t OP_MOVD_Ed_Pd = 0x0f7e; -const uint32_t OP_MOVD_Ed_Vd = 0x660f7e; -const uint32_t OP_MOVQ_Vq_Wq = 0xf30f7e; -const uint32_t OP_MOVQ_Qq_Pq = 0x0f7f; -const uint32_t OP_MOVDQA_Wdq_Vdq = 0x660f7f; -const uint32_t OP_MOVDQU_Wdq_Vdq = 0xf30f7f; - -const uint32_t OP_JCC_O_Jv = 0x0f80; -const uint32_t OP_JCC_NO_Jv = 0x0f81; -const uint32_t OP_JCC_B_Jv = 0x0f82; -const uint32_t OP_JCC_C_Jv = 0x0f82; -const uint32_t OP_JCC_NAE_Jv = 0x0f82; -const uint32_t OP_JCC_AE_Jv = 0x0f83; -const uint32_t OP_JCC_NB_Jv = 0x0f83; -const uint32_t OP_JCC_NC_Jv = 0x0f83; -const uint32_t OP_JCC_E_Jv = 0x0f84; -const uint32_t OP_JCC_Z_Jv = 0x0f84; -const uint32_t OP_JCC_NE_Jv = 0x0f85; -const uint32_t OP_JCC_NZ_Jv = 0x0f85; -const uint32_t OP_JCC_BE_Jv = 0x0f86; -const uint32_t OP_JCC_NA_Jv = 0x0f86; -const uint32_t OP_JCC_A_Jv = 0x0f87; -const uint32_t OP_JCC_NBE_Jv = 0x0f87; -const uint32_t OP_JCC_S_Jv = 0x0f88; -const uint32_t OP_JCC_NS_Jv = 0x0f89; -const uint32_t OP_JCC_P_Jv = 0x0f8a; -const uint32_t OP_JCC_PE_Jv = 0x0f8a; -const uint32_t OP_JCC_NP_Jv = 0x0f8b; -const uint32_t OP_JCC_PO_Jv = 0x0f8b; -const uint32_t OP_JCC_L_Jv = 0x0f8c; -const uint32_t OP_JCC_NGE_Jv = 0x0f8c; -const uint32_t OP_JCC_NL_Jv = 0x0f8d; -const uint32_t OP_JCC_GE_Jv = 0x0f8d; -const uint32_t OP_JCC_LE_Jv = 0x0f8e; -const uint32_t OP_JCC_NG_Jv = 0x0f8e; -const uint32_t OP_JCC_NLE_Jv = 0x0f8f; -const uint32_t OP_JCC_G_Jv = 0x0f8f; - -const uint32_t OP_SETCC_O_Eb = (0x0f90 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NO_Eb = (0x0f91 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_B_Eb = (0x0f92 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_C_Eb = (0x0f92 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NAE_Eb = (0x0f92 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_AE_Eb = (0x0f93 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NB_Eb = (0x0f93 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NC_Eb = (0x0f93 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_E_Eb = (0x0f94 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_Z_Eb = (0x0f94 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NE_Eb = (0x0f95 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NZ_Eb = (0x0f95 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_BE_Eb = (0x0f96 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NA_Eb = (0x0f96 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_A_Eb = (0x0f97 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NBE_Eb = (0x0f97 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_S_Eb = (0x0f98 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NS_Eb = (0x0f99 | OPFLAG_8BITRM); -const uint32_t OP_SETCC_P_Eb = (0x0f9a | OPFLAG_8BITRM); -const uint32_t OP_SETCC_PE_Eb = (0x0f9a | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NP_Eb = (0x0f9b | OPFLAG_8BITRM); -const uint32_t OP_SETCC_PO_Eb = (0x0f9b | OPFLAG_8BITRM); -const uint32_t OP_SETCC_L_Eb = (0x0f9c | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NGE_Eb = (0x0f9c | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NL_Eb = (0x0f9d | OPFLAG_8BITRM); -const uint32_t OP_SETCC_GE_Eb = (0x0f9d | OPFLAG_8BITRM); -const uint32_t OP_SETCC_LE_Eb = (0x0f9e | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NG_Eb = (0x0f9e | OPFLAG_8BITRM); -const uint32_t OP_SETCC_NLE_Eb = (0x0f9f | OPFLAG_8BITRM); -const uint32_t OP_SETCC_G_Eb = (0x0f9f | OPFLAG_8BITRM); - -const uint32_t OP_PUSH_FS = 0x0fa0; -const uint32_t OP_POP_FS = 0x0fa1; -const uint32_t OP_CPUID = 0x0fa2; -const uint32_t OP_BT_Ev_Gv = 0x0fa3; -const uint32_t OP_SHLD_Ev_Gv_Ib = 0x0fa4; -const uint32_t OP_SHLD_Ev_Gv_CL = 0x0fa5; -const uint32_t OP_PUSH_GS = 0x0fa8; -const uint32_t OP_POP_GS = 0x0fa9; -const uint32_t OP_RSM = 0x0faa; -const uint32_t OP_BTS_Ev_Gv = 0x0fab; -const uint32_t OP_SHRD_Ev_Gv_Ib = 0x0fac; -const uint32_t OP_SHRD_Ev_Gv_CL = 0x0fad; -const uint32_t OP_G16 = 0x0fae; -const uint32_t OP_IMUL_Gv_Ev = 0x0faf; - -const uint32_t OP_CMPXCHG_Eb_Gb = (0x0fb0 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_CMPXCHG_Ev_Gv = 0x0fb1; -const uint32_t OP_LSS_Mp = 0x0fb2; -const uint32_t OP_BTR_Ev_Gv = 0x0fb3; -const uint32_t OP_LFS_Mp = 0x0fb4; -const uint32_t OP_LGS_Mp = 0x0fb5; -const uint32_t OP_MOVZX_Gv_Eb = (0x0fb6 | OPFLAG_8BITRM); -const uint32_t OP_MOVZX_Gv_Ew = 0x0fb7; -const uint32_t OP_JMPE = 0x0fb8; -const uint32_t OP_POPCNT_Gv_Ev = 0xf30fb8; -const uint32_t OP_G10_INVALID = 0x0fb9; -const uint32_t OP_G8_Ev_Ib = 0x0fba; -const uint32_t OP_BTC_Ev_Gv = 0x0fbb; -const uint32_t OP_BSF_Gv_Ev = 0x0fbc; -const uint32_t OP_BSR_Gv_Ev = 0x0fbd; -const uint32_t OP_MOVSX_Gv_Eb = (0x0fbe | OPFLAG_8BITRM); -const uint32_t OP_MOVSX_Gv_Ew = 0x0fbf; - -const uint32_t OP_XADD_Eb_Gb = (0x0fc0 | OPFLAG_8BITRM | OPFLAG_8BITREG); -const uint32_t OP_XADD_Ev_Gv = 0x0fc1; -const uint32_t OP_CMPPS_Vps_Wps_Ib = 0x0fc2; -const uint32_t OP_CMPSS_Vss_Wss_Ib = 0xf30fc2; -const uint32_t OP_CMPPD_Vpd_Wpd_Ib = 0x660fc2; -const uint32_t OP_CMPSD_Vsd_Wsd_Ib = 0xf20fc2; -const uint32_t OP_MOVNTI_Md_Gd = 0x0fc3; -const uint32_t OP_PINSRW_Pw_Ew_Ib = 0x0fc4; -const uint32_t OP_PINSRW_Vw_Ew_Ib = 0x660fc4; -const uint32_t OP_PEXTRW_Gw_Pw_Ib = 0x0fc5; -const uint32_t OP_PEXTRW_Gw_Vw_Ib = 0x660fc5; -const uint32_t OP_SHUFPS_Vps_Wps_Ib = 0x0fc6; -const uint32_t OP_SHUFPD_Vpd_Wpd_Ib = 0x660fc6; -const uint32_t OP_G9 = 0x0fc7; -const uint32_t OP_BSWAP_EAX = 0x0fc8; -const uint32_t OP_BSWAP_ECX = 0x0fc9; -const uint32_t OP_BSWAP_EDX = 0x0fca; -const uint32_t OP_BSWAP_EBX = 0x0fcb; -const uint32_t OP_BSWAP_ESP = 0x0fcc; -const uint32_t OP_BSWAP_EBP = 0x0fcd; -const uint32_t OP_BSWAP_ESI = 0x0fce; -const uint32_t OP_BSWAP_EDI = 0x0fcf; - -const uint32_t OP_ADDSUBPD_Vpd_Wpd = 0x0fd0; -const uint32_t OP_ADDSUBPS_Vps_Wps = 0xf20fd0; -const uint32_t OP_PSRLW_Pq_Qq = 0x0fd1; -const uint32_t OP_PSRLW_Vdq_Wdq = 0x660fd1; -const uint32_t OP_PSRLD_Pq_Qq = 0x0fd2; -const uint32_t OP_PSRLD_Vdq_Wdq = 0x660fd2; -const uint32_t OP_PSRLQ_Pq_Qq = 0x0fd3; -const uint32_t OP_PSRLQ_Vdq_Wdq = 0x660fd3; -const uint32_t OP_PADDQ_Pq_Qq = 0x0fd4; -const uint32_t OP_PADDQ_Vdq_Wdq = 0x660fd4; -const uint32_t OP_PMULLW_Pq_Qq = 0x0fd5; -const uint32_t OP_PMULLW_Vdq_Wdq = 0x660fd5; -const uint32_t OP_MOVQ_Wq_Vq = 0x0fd6; -const uint32_t OP_MOVQ2DQ_Vdq_Qq = 0xf30fd6; -const uint32_t OP_MOVDQ2Q_Pq_Vq = 0xf20fd6; -const uint32_t OP_PMOVMSKB_Gd_Pq = 0x0fd7; -const uint32_t OP_PMOVMSKB_Gd_Vdq = 0x660fd7; -const uint32_t OP_PSUBUSB_Pq_Qq = 0x0fd8; -const uint32_t OP_PSUBUSB_Vdq_Wdq = 0x660fd8; -const uint32_t OP_PSUBUSW_Pq_Qq = 0x0fd9; -const uint32_t OP_PSUBUSW_Vdq_Wdq = 0x660fd9; -const uint32_t OP_PMINUB_Pq_Qq = 0x0fda; -const uint32_t OP_PMINUB_Vdq_Wdq = 0x660fda; -const uint32_t OP_PAND_Pq_Qq = 0x0fdb; -const uint32_t OP_PAND_Vdq_Wdq = 0x660fdb; -const uint32_t OP_PADDUSB_Pq_Qq = 0x0fdc; -const uint32_t OP_PADDUSB_Vdq_Wdq = 0x660fdc; -const uint32_t OP_PADDUSW_Pq_Qq = 0x0fdd; -const uint32_t OP_PADDUSW_Vdq_Wdq = 0x660fdd; -const uint32_t OP_PMAXUB_Pq_Qq = 0x0fde; -const uint32_t OP_PMAXUB_Vdq_Wdq = 0x660fde; -const uint32_t OP_PANDN_Pq_Qq = 0x0fdf; -const uint32_t OP_PANDN_Vdq_Wdq = 0x660fdf; - -const uint32_t OP_PAVGB_Pq_Qq = 0x0fe0; -const uint32_t OP_PAVGB_Vdq_Wdq = 0x660fe0; -const uint32_t OP_PSRAW_Pq_Qq = 0x0fe1; -const uint32_t OP_PSRAW_Vdq_Wdq = 0x660fe1; -const uint32_t OP_PSRAD_Pq_Qq = 0x0fe2; -const uint32_t OP_PSRAD_Vdq_Wdq = 0x660fe2; -const uint32_t OP_PAVGW_Pq_Qq = 0x0fe3; -const uint32_t OP_PAVGW_Vdq_Wdq = 0x660fe3; -const uint32_t OP_PMULHUW_Pq_Qq = 0x0fe4; -const uint32_t OP_PMULHUW_Vdq_Wdq = 0x660fe4; -const uint32_t OP_PMULHW_Pq_Qq = 0x0fe5; -const uint32_t OP_PMULHW_Vdq_Wdq = 0x660fe5; -const uint32_t OP_CVTPD2DQ_Vdq_Wpd = 0xf20fe6; -const uint32_t OP_CVTTPD2DQ_Vdq_Wpd = 0x660fe6; -const uint32_t OP_CVTDQ2PD_Vpd_Wq = 0xf30fe6; -const uint32_t OP_MOVNTQ_Mq_Vq = 0x0fe7; -const uint32_t OP_MOVNTDQ_Mdq_Vdq = 0x660fe7; -const uint32_t OP_PSUBSB_Pq_Qq = 0x0fe8; -const uint32_t OP_PSUBSB_Vdq_Wdq = 0x660fe8; -const uint32_t OP_PSUBSW_Pq_Qq = 0x0fe9; -const uint32_t OP_PSUBSW_Vdq_Wdq = 0x660fe9; -const uint32_t OP_PMINSW_Pq_Qq = 0x0fea; -const uint32_t OP_PMINSW_Vdq_Wdq = 0x660fea; -const uint32_t OP_POR_Pq_Qq = 0x0feb; -const uint32_t OP_POR_Vdq_Wdq = 0x660feb; -const uint32_t OP_PADDSB_Pq_Qq = 0x0fec; -const uint32_t OP_PADDSB_Vdq_Wdq = 0x660fec; -const uint32_t OP_PADDSW_Pq_Qq = 0x0fed; -const uint32_t OP_PADDSW_Vdq_Wdq = 0x660fed; -const uint32_t OP_PMAXSW_Pq_Qq = 0x0fee; -const uint32_t OP_PMAXSW_Vdq_Wdq = 0x660fee; -const uint32_t OP_PXOR_Pq_Qq = 0x0fef; -const uint32_t OP_PXOR_Vdq_Wdq = 0x660fef; - -const uint32_t OP_LDDQU_Vdq_Mdq = 0xf20ff0; -const uint32_t OP_PSLLW_Pq_Qq = 0x0ff1; -const uint32_t OP_PSLLW_Vdq_Wdq = 0x660ff1; -const uint32_t OP_PSLLD_Pq_Qq = 0x0ff2; -const uint32_t OP_PSLLD_Vdq_Wdq = 0x660ff2; -const uint32_t OP_PSLLQ_Pq_Qq = 0x0ff3; -const uint32_t OP_PSLLQ_Vdq_Wdq = 0x660ff3; -const uint32_t OP_PMULUDQ_Pq_Qq = 0x0ff4; -const uint32_t OP_PMULUDQ_Vdq_Wdq = 0x660ff4; -const uint32_t OP_PMADDWD_Pq_Qq = 0x0ff5; -const uint32_t OP_PMADDWD_Vdq_Wdq = 0x660ff5; -const uint32_t OP_PSADBW_Pq_Qq = 0x0ff6; -const uint32_t OP_PSADBW_Vdq_Wdq = 0x660ff6; -const uint32_t OP_MASKMOVQ_Pq_Qq = 0x0ff7; -const uint32_t OP_MASKMOVDQU_Vdq_Wdq = 0x660ff7; -const uint32_t OP_PSUBB_Pq_Qq = 0x0ff8; -const uint32_t OP_PSUBB_Vdq_Wdq = 0x660ff8; -const uint32_t OP_PSUBW_Pq_Qq = 0x0ff9; -const uint32_t OP_PSUBW_Vdq_Wdq = 0x660ff9; -const uint32_t OP_PSUBD_Pq_Qq = 0x0ffa; -const uint32_t OP_PSUBD_Vdq_Wdq = 0x660ffa; -const uint32_t OP_PSUBQ_Pq_Qq = 0x0ffb; -const uint32_t OP_PSUBQ_Vdq_Wdq = 0x660ffb; -const uint32_t OP_PADDB_Pq_Qq = 0x0ffc; -const uint32_t OP_PADDB_Vdq_Wdq = 0x660ffc; -const uint32_t OP_PADDW_Pq_Qq = 0x0ffd; -const uint32_t OP_PADDW_Vdq_Wdq = 0x660ffd; -const uint32_t OP_PADDD_Pq_Qq = 0x0ffe; -const uint32_t OP_PADDD_Vdq_Wdq = 0x660ffe; - - -// triple byte opcodes (0f 38) -const uint32_t OP_PSHUFB_Pq_Qq = 0x0f3800; -const uint32_t OP_PSHUFB_Vdq_Wdq = 0x660f3800; -const uint32_t OP_PHADDW_Pq_Qq = 0x0f3801; -const uint32_t OP_PHADDW_Vdq_Wdq = 0x660f3801; -const uint32_t OP_PHADDD_Pq_Qq = 0x0f3802; -const uint32_t OP_PHADDD_Vdq_Wdq = 0x660f3802; -const uint32_t OP_PHADDSW_Pq_Qq = 0x0f3803; -const uint32_t OP_PHADDSW_Vdq_Wdq = 0x660f3803; -const uint32_t OP_PMADDUBSW_Pq_Qq = 0x0f3804; -const uint32_t OP_PMADDUBSW_Vdq_Wdq = 0x660f3804; -const uint32_t OP_PHSUBW_Pq_Qq = 0x0f3805; -const uint32_t OP_PHSUBW_Vdq_Wdq = 0x660f3805; -const uint32_t OP_PHSUBD_Pq_Qq = 0x0f3806; -const uint32_t OP_PHSUBD_Vdq_Wdq = 0x660f3806; -const uint32_t OP_PHSUBSW_Pq_Qq = 0x0f3807; -const uint32_t OP_PHSUBSW_Vdq_Wdq = 0x660f3807; -const uint32_t OP_PSIGNB_Pq_Qq = 0x0f3808; -const uint32_t OP_PSIGNB_Vdq_Wdq = 0x660f3808; -const uint32_t OP_PSIGNW_Pq_Qq = 0x0f3809; -const uint32_t OP_PSIGNW_Vdq_Wdq = 0x660f3809; -const uint32_t OP_PSIGND_Pq_Qq = 0x0f380a; -const uint32_t OP_PSIGND_Vdq_Wdq = 0x660f380a; -const uint32_t OP_PMULHRSW_Pq_Qq = 0x0f380b; -const uint32_t OP_PMULHRSW_Vdq_Wdq = 0x660f380b; - -const uint32_t OP_PBLENDVB_Vdq_Wdq = 0x660f3810; -const uint32_t OP_PBLENDVPS_Vdq_Wdq = 0x660f3814; -const uint32_t OP_PBLENDVPD_Vdq_Wdq = 0x660f3815; -const uint32_t OP_PTEST_Vdq_Wdq = 0x660f3817; -const uint32_t OP_PABSB_Pq_Qq = 0x0f381c; -const uint32_t OP_PABSB_Vdq_Wdq = 0x660f381c; -const uint32_t OP_PABSW_Pq_Qq = 0x0f381d; -const uint32_t OP_PABSW_Vdq_Wdq = 0x660f381d; -const uint32_t OP_PABSD_Pq_Qq = 0x0f381e; -const uint32_t OP_PABSD_Vdq_Wdq = 0x660f381e; - -const uint32_t OP_PMOVSXBW_Vdq_Udq = 0x660f3820; -const uint32_t OP_PMOVSXBD_Vdq_Udq = 0x660f3821; -const uint32_t OP_PMOVSXBQ_Vdq_Udq = 0x660f3822; -const uint32_t OP_PMOVSXWD_Vdq_Udq = 0x660f3823; -const uint32_t OP_PMOVSXWQ_Vdq_Udq = 0x660f3824; -const uint32_t OP_PMOVSXDQ_Vdq_Udq = 0x660f3825; -const uint32_t OP_PMULDQ_Vdq_Udq = 0x660f3828; -const uint32_t OP_PCMPEQQ_Vdq_Udq = 0x660f3829; -const uint32_t OP_MOVNTDQA_Vdq_Udq = 0x660f382a; -const uint32_t OP_PACKUSDW_Vdq_Udq = 0x660f382b; - -const uint32_t OP_PMOVZXBW_Vdq_Udq = 0x660f3830; -const uint32_t OP_PMOVZXBD_Vdq_Udq = 0x660f3831; -const uint32_t OP_PMOVZXBQ_Vdq_Udq = 0x660f3832; -const uint32_t OP_PMOVZXWD_Vdq_Udq = 0x660f3833; -const uint32_t OP_PMOVZXWQ_Vdq_Udq = 0x660f3834; -const uint32_t OP_PMOVZXDQ_Vdq_Udq = 0x660f3835; -const uint32_t OP_PMINSB_Vdq_Udq = 0x660f3838; -const uint32_t OP_PMINSD_Vdq_Udq = 0x660f3839; -const uint32_t OP_PMINUW_Vdq_Udq = 0x660f383a; -const uint32_t OP_PMINUD_Vdq_Udq = 0x660f383b; -const uint32_t OP_PMAXSB_Vdq_Udq = 0x660f383c; -const uint32_t OP_PMAXSD_Vdq_Udq = 0x660f383d; -const uint32_t OP_PMAXUW_Vdq_Udq = 0x660f383e; -const uint32_t OP_PMAXUD_Vdq_Udq = 0x660f383f; - -const uint32_t OP_MULLD_Vdq_Wdq = 0x660f3840; -const uint32_t OP_PHMINPOSUW_Vdq_Wdq = 0x660f3841; - -const uint32_t OP_NVEPT_Gd_Mdq = 0x660f3880; -const uint32_t OP_NVVPID_Gd_Mdq = 0x660f3881; - -const uint32_t OP_MOVBE_Gv_Mv = 0x0f38f0; -const uint32_t OP_CRC32_Gd_Eb = 0xf20f38f0; -const uint32_t OP_MOVBE_Mv_Gv = 0x0f38f1; -const uint32_t OP_CRC32_Gd_Ev = 0xf20f38f1; - - -// triple byte opcodes (0f 3a) -const uint32_t OP_ROUNDPS_Vdq_Wdq_Ib = 0x660f3a08; -const uint32_t OP_ROUNDPD_Vdq_Wdq_Ib = 0x660f3a09; -const uint32_t OP_ROUNDSS_Vss_Wss_Ib = 0x660f3a0a; -const uint32_t OP_ROUNDSD_Vsd_Wsd_Ib = 0x660f3a0b; -const uint32_t OP_BLENDPS_Vdq_Wdq_Ib = 0x660f3a0c; -const uint32_t OP_BLENDPD_Vdq_Wdq_Ib = 0x660f3a0d; -const uint32_t OP_PBLENDW_Vdq_Wdq_Ib = 0x660f3a0e; -const uint32_t OP_PALIGNR_Pq_Qq_Ib = 0x0f3a0f; -const uint32_t OP_PALIGNR_Vdq_Wdq_Ib = 0x660f3a0f; - -const uint32_t OP_EXTRB_Rd_Vdq_Ib = 0x660f3a14; -const uint32_t OP_EXTRW_Rd_Vdq_Ib = 0x660f3a15; -const uint32_t OP_EXTRD_Rd_Vdq_Ib = 0x660f3a16; -const uint32_t OP_EXTRACTPS_Ed_Vdq_Ib = 0x660f3a17; - -const uint32_t OP_PINSRB_Vdq_Rd_Ib = 0x660f3a20; -const uint32_t OP_INSERTPS_Vdq_Udq_Ib = 0x660f3a21; -const uint32_t OP_PINSRD_Vdq_Ed_Ib = 0x660f3a22; - -const uint32_t OP_DPPS_Vdq_Wdq_Ib = 0x660f3a40; -const uint32_t OP_DPPD_Vdq_Wdq_Ib = 0x660f3a41; -const uint32_t OP_MPSADBW_Vdq_Wdq_Ib = 0x660f3a42; - -const uint32_t OP_PCMPESTRM_Vdq_Wdq_Ib = 0x660f3a60; -const uint32_t OP_PCMPESTRI_Vdq_Wdq_Ib = 0x660f3a61; -const uint32_t OP_PCMPISTRM_Vdq_Wdq_Ib = 0x660f3a62; -const uint32_t OP_PCMPISTRI_Vdq_Wdq_Ib = 0x660f3a63; - - -// floating point opcodes -const uint32_t OP_FADD_ST0_STn = 0xd8c0; -const uint32_t OP_FMUL_ST0_STn = 0xd8c8; -const uint32_t OP_FCOM_ST0_STn = 0xd8d0; -const uint32_t OP_FCOMP_ST0_STn = 0xd8d8; -const uint32_t OP_FSUB_ST0_STn = 0xd8e0; -const uint32_t OP_FSUBR_ST0_STn = 0xd8e8; -const uint32_t OP_FDIV_ST0_STn = 0xd8f0; -const uint32_t OP_FDIVR_ST0_STn = 0xd8f8; -const uint32_t OP_FLD_ST0_STn = 0xd9c0; -const uint32_t OP_FXCH_ST0_STn = 0xd9c8; -const uint32_t OP_FNOP = 0xd9d0; -const uint32_t OP_FCHS = 0xd9e0; -const uint32_t OP_FABS = 0xd9e1; -const uint32_t OP_FTST = 0xd9e4; -const uint32_t OP_FXAM = 0xd9e5; -const uint32_t OP_FLD1 = 0xd9e8; -const uint32_t OP_FLDL2T = 0xd9e9; -const uint32_t OP_FLDL2E = 0xd9ea; -const uint32_t OP_FLDPI = 0xd9eb; -const uint32_t OP_FLDLG2 = 0xd9ec; -const uint32_t OP_FLDLN2 = 0xd9ed; -const uint32_t OP_FLDZ = 0xd9ee; -const uint32_t OP_F2XM1 = 0xd9f0; -const uint32_t OP_FYL2X = 0xd9f1; -const uint32_t OP_FPTAN = 0xd9f2; -const uint32_t OP_FPATAN = 0xd9f3; -const uint32_t OP_FXTRACT = 0xd9f4; -const uint32_t OP_FPREM1 = 0xd9f5; -const uint32_t OP_FDECSTP = 0xd9f6; -const uint32_t OP_FINCSTP = 0xd9f7; -const uint32_t OP_FPREM = 0xd9f8; -const uint32_t OP_FYL2XP1 = 0xd9f9; -const uint32_t OP_FSQRT = 0xd9fa; -const uint32_t OP_FSINCOS = 0xd9fb; -const uint32_t OP_FRNDINT = 0xd9fc; -const uint32_t OP_FSCALE = 0xd9fd; -const uint32_t OP_FSIN = 0xd9fe; -const uint32_t OP_FCOS = 0xd9ff; -const uint32_t OP_FCMOVB_ST0_STn = 0xdac0; -const uint32_t OP_FCMOVE_ST0_STn = 0xdac8; -const uint32_t OP_FCMOVBE_ST0_STn = 0xdad0; -const uint32_t OP_FCMOVU_ST0_STn = 0xdad8; -const uint32_t OP_FUCOMPP = 0xdae9; -const uint32_t OP_FCMOVNB_ST0_STn = 0xdbc0; -const uint32_t OP_FCMOVNE_ST0_STn = 0xdbc8; -const uint32_t OP_FCMOVNBE_ST0_STn = 0xdbd0; -const uint32_t OP_FCMOVNU_ST0_STn = 0xdbd8; -const uint32_t OP_FCLEX = 0xdbe2; -const uint32_t OP_FINIT = 0xdbe3; -const uint32_t OP_FUCOMI_ST0_STn = 0xdbe8; -const uint32_t OP_FCOMI_ST0_STn = 0xdbf0; -const uint32_t OP_FADD_STn_ST0 = 0xdcc0; -const uint32_t OP_FMUL_STn_ST0 = 0xdcc8; -const uint32_t OP_FSUBR_STn_ST0 = 0xdce0; -const uint32_t OP_FSUB_STn_ST0 = 0xdce8; -const uint32_t OP_FDIVR_STn_ST0 = 0xdcf0; -const uint32_t OP_FDIV_STn_ST0 = 0xdcf8; -const uint32_t OP_FFREE_STn = 0xddc0; -const uint32_t OP_FST_STn = 0xddd0; -const uint32_t OP_FSTP_STn = 0xddd8; -const uint32_t OP_FUCOM_STn_ST0 = 0xdde0; -const uint32_t OP_FUCOMP_STn = 0xdde8; -const uint32_t OP_FADDP_STn_ST0 = 0xdec0; -const uint32_t OP_FMULP_STn_ST0 = 0xdec8; -const uint32_t OP_FCOMPP = 0xded9; -const uint32_t OP_FSUBRP_STn_ST0 = 0xdee0; -const uint32_t OP_FSUBP_STn_ST0 = 0xdee8; -const uint32_t OP_FDIVRP_STn_ST0 = 0xdef0; -const uint32_t OP_FDIVP_STn_ST0 = 0xdef8; -const uint32_t OP_FSTSW_AX = 0xdfe0; -const uint32_t OP_FCOMIP_ST0_STn = 0xdff0; - - - -//************************************************************************** -// MEMORY REFERENCES -//************************************************************************** - -inline x86_memref MBD(uint8_t base, int32_t disp) { return x86_memref(base, REG_NONE, 1, disp); } -inline x86_memref MBISD(uint8_t base, uint8_t ind, uint8_t scale, int32_t disp) { return x86_memref(base, ind, scale, disp); } - -#if (X86EMIT_SIZE == 32) -inline x86_memref MABS(const void *mem) { return x86_memref(REG_NONE, REG_NONE, 1, reinterpret_cast(const_cast(mem))); } -inline x86_memref MABSI(const void *mem, uint8_t index) { return x86_memref(index, REG_NONE, 1, reinterpret_cast(const_cast(mem))); } -inline x86_memref MABSI(const void *mem, uint8_t index, uint8_t scale) { return x86_memref(REG_NONE, index, scale, reinterpret_cast(const_cast(mem))); } -#endif - - - -//************************************************************************** -// CORE FUNCTIONS -//************************************************************************** - -//------------------------------------------------- -// make_modrm - assemble a modrm byte from the -// three components -//------------------------------------------------- - -inline uint8_t make_modrm(uint8_t mode, uint8_t reg, uint8_t rm) -{ - assert(mode < 4); - assert(reg < REG_MAX); - assert(rm < REG_MAX); - return (mode << 6) | ((reg & 7) << 3) | (rm & 7); -} - - -//------------------------------------------------- -// make_sib - assemble an sib byte from the -// three components -//------------------------------------------------- - -inline uint8_t make_sib(uint8_t scale, uint8_t index, uint8_t base) -{ - static const uint8_t scale_lookup[9] = { 0<<6, 0<<6, 1<<6, 0<<6, 2<<6, 0<<6, 0<<6, 0<<6, 3<<6 }; - assert(scale == 1 || scale == 2 || scale == 4 || scale == 8); - assert(index < REG_MAX); - assert(base < REG_MAX); - return scale_lookup[scale] | ((index & 7) << 3) | (base & 7); -} - - -//------------------------------------------------- -// emit_byte - emit a byte -//------------------------------------------------- - -inline void emit_byte(x86code *&emitptr, uint8_t byte) -{ - *((uint8_t *)emitptr) = byte; - emitptr += 1; -} - - -//------------------------------------------------- -// emit_word - emit a word -//------------------------------------------------- - -inline void emit_word(x86code *&emitptr, uint16_t word) -{ - *((uint16_t *)emitptr) = word; - emitptr += 2; -} - - -//------------------------------------------------- -// emit_dword - emit a dword -//------------------------------------------------- - -inline void emit_dword(x86code *&emitptr, uint32_t dword) -{ - *((uint32_t *)emitptr) = dword; - emitptr += 4; -} - - -//------------------------------------------------- -// emit_qword - emit a dword -//------------------------------------------------- - -inline void emit_qword(x86code *&emitptr, uint64_t qword) -{ - *((uint64_t *)emitptr) = qword; - emitptr += 8; -} - - - -//************************************************************************** -// GENERIC OPCODE EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_op - emit a 1, 2, or 3-byte opcode, -// along with any necessary REX prefixes for x64 -//------------------------------------------------- - -inline void emit_op(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, uint8_t sib, uint8_t rm) -{ - if (opsize == OP_16BIT) - emit_byte(emitptr, PREFIX_OPSIZE); - - bool has_prefix = (op & 0xff0000) == 0x660000 || (op & 0xff0000) == 0xf20000 || (op & 0xff0000) == 0xf30000; - - if (has_prefix) - emit_byte(emitptr, op >> 16); - -#if (X86EMIT_SIZE == 64) -{ - uint8_t rex; - - assert(opsize == OP_16BIT || opsize == OP_32BIT || opsize == OP_64BIT); - - rex = (opsize & 8) | ((reg & 8) >> 1) | ((sib & 8) >> 2) | ((rm & 8) >> 3); - if (rex != 0 || ((op & OPFLAG_8BITREG) && reg >= 4) || ((op & OPFLAG_8BITRM) && rm >= 4)) - emit_byte(emitptr, OP_REX + rex); -} -#else - assert(opsize != OP_64BIT); -#endif - - if ((op & 0xff0000) != 0 && !has_prefix) - emit_byte(emitptr, op >> 16); - if ((op & 0xff00) != 0) - emit_byte(emitptr, op >> 8); - emit_byte(emitptr, op); -} - - -//------------------------------------------------- -// emit_op_simple - emit a simple opcode -//------------------------------------------------- - -inline void emit_op_simple(x86code *&emitptr, uint32_t op, uint8_t opsize) -{ - emit_op(emitptr, op, opsize, 0, 0, 0); -} - - -//------------------------------------------------- -// emit_op_reg - emit a simple opcode that has -// a register parameter -//------------------------------------------------- - -inline void emit_op_reg(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg) -{ - emit_op(emitptr, op, opsize, 0, 0, reg); -} - - -//------------------------------------------------- -// emit_op_modrm_reg - emit an opcode with a -// register modrm byte -//------------------------------------------------- - -inline void emit_op_modrm_reg(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, uint8_t rm) -{ - assert(reg < REG_MAX); - assert(rm < REG_MAX); - - emit_op(emitptr, op, opsize, reg, 0, rm); - emit_byte(emitptr, make_modrm(3, reg, rm)); -} - - -//------------------------------------------------- -// emit_op_modrm_mem - emit an opcode with a -// memory modrm byte -//------------------------------------------------- - -inline void emit_op_modrm_mem(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, x86_memref memref) -{ - assert(reg < REG_MAX); - assert(memref.m_base < REG_MAX || memref.m_base == REG_NONE); - assert(memref.m_index < REG_MAX || memref.m_index == REG_NONE); - - // turn off the OPFLAG_8BITRM flag since it only applies to register operands - op &= ~OPFLAG_8BITRM; - - // displacement only case - if (memref.m_base == REG_NONE && memref.m_index == REG_NONE) - { -#if (X86EMIT_SIZE == 32) - emit_op(emitptr, op, opsize, reg, 0, 5); - emit_byte(emitptr, make_modrm(0, reg, 5)); - emit_dword(emitptr, memref.m_disp); -#else - fatalerror("Invalid absolute mode in 64-bits!\n"); -#endif - } - - // base only case - else if (memref.m_index == REG_NONE && (memref.m_base & 7) != REG_ESP) - { - emit_op(emitptr, op, opsize, reg, 0, memref.m_base); - - // mode 0 for no offset - if (memref.m_disp == 0 && (memref.m_base & 7) != REG_EBP) - emit_byte(emitptr, make_modrm(0, reg, memref.m_base)); - - // mode 1 for 1-byte offset - else if ((int8_t)memref.m_disp == memref.m_disp) - { - emit_byte(emitptr, make_modrm(1, reg, memref.m_base)); - emit_byte(emitptr, (int8_t)memref.m_disp); - } - - // mode 2 for 4-byte offset - else - { - emit_byte(emitptr, make_modrm(2, reg, memref.m_base)); - emit_dword(emitptr, memref.m_disp); - } - } - - // full BISD case - else - { - assert(memref.m_index != REG_ESP); - emit_op(emitptr, op, opsize, reg, memref.m_index, memref.m_base); - - // a "none" index == REG_ESP - if (memref.m_index == REG_NONE) - memref.m_index = REG_ESP; - - // no base is a special case - if (memref.m_base == REG_NONE) - { - emit_byte(emitptr, make_modrm(0, reg, 4)); - emit_byte(emitptr, make_sib(memref.m_scale, memref.m_index, REG_EBP)); - emit_dword(emitptr, memref.m_disp); - } - - // mode 0 for no offset - else if (memref.m_disp == 0 && (memref.m_base & 7) != REG_EBP) - { - emit_byte(emitptr, make_modrm(0, reg, 4)); - emit_byte(emitptr, make_sib(memref.m_scale, memref.m_index, memref.m_base)); - } - - // mode 1 for 1-byte offset - else if ((int8_t)memref.m_disp == memref.m_disp) - { - emit_byte(emitptr, make_modrm(1, reg, 4)); - emit_byte(emitptr, make_sib(memref.m_scale, memref.m_index, memref.m_base)); - emit_byte(emitptr, (int8_t)memref.m_disp); - } - - // mode 2 for 4-byte offset - else - { - emit_byte(emitptr, make_modrm(2, reg, 4)); - emit_byte(emitptr, make_sib(memref.m_scale, memref.m_index, memref.m_base)); - emit_dword(emitptr, memref.m_disp); - } - } -} - - - -//************************************************************************** -// GENERIC OPCODE + IMMEDIATE EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_op_modrm_reg_imm8 - emit an opcode with a -// register modrm byte and an 8-bit immediate -//------------------------------------------------- - -inline void emit_op_modrm_reg_imm8(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, uint8_t rm, uint8_t imm) -{ - emit_op_modrm_reg(emitptr, op, opsize, reg, rm); - emit_byte(emitptr, imm); -} - - -//------------------------------------------------- -// emit_op_modrm_mem_imm8 - emit an opcode with a -// memory modrm byte and an 8-bit immediate -//------------------------------------------------- - -inline void emit_op_modrm_mem_imm8(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, x86_memref memref, uint8_t imm) -{ - emit_op_modrm_mem(emitptr, op, opsize, reg, memref); - emit_byte(emitptr, imm); -} - - -//------------------------------------------------- -// emit_op_modrm_reg_imm16 - emit an opcode with a -// register modrm byte and a 16-bit immediate -//------------------------------------------------- - -inline void emit_op_modrm_reg_imm16(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, uint8_t rm, uint16_t imm) -{ - emit_op_modrm_reg(emitptr, op, opsize, reg, rm); - emit_word(emitptr, imm); -} - - -//------------------------------------------------- -// emit_op_modrm_mem_imm16 - emit an opcode with a -// memory modrm byte and a 16-bit immediate -//------------------------------------------------- - -inline void emit_op_modrm_mem_imm16(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, x86_memref memref, uint16_t imm) -{ - emit_op_modrm_mem(emitptr, op, opsize, reg, memref); - emit_word(emitptr, imm); -} - - -//------------------------------------------------- -// emit_op_modrm_reg_imm816 - emit an opcode with -// a register modrm byte and an 8-bit or 16-bit -// immediate -//------------------------------------------------- - -inline void emit_op_modrm_reg_imm816(x86code *&emitptr, uint32_t op8, uint32_t op16, uint8_t opsize, uint8_t reg, uint8_t rm, uint16_t imm) -{ - if ((int8_t)imm == (int16_t)imm) - { - emit_op_modrm_reg(emitptr, op8, opsize, reg, rm); - emit_byte(emitptr, imm); - } - else - { - emit_op_modrm_reg(emitptr, op16, opsize, reg, rm); - emit_word(emitptr, imm); - } -} - - -//------------------------------------------------- -// emit_op_modrm_mem_imm816 - emit an opcode with -// a memory modrm byte and an 8-bit or 16-bit -// immediate -//------------------------------------------------- - -inline void emit_op_modrm_mem_imm816(x86code *&emitptr, uint32_t op8, uint32_t op16, uint8_t opsize, uint8_t reg, x86_memref memref, uint16_t imm) -{ - if ((int8_t)imm == (int16_t)imm) - { - emit_op_modrm_mem(emitptr, op8, opsize, reg, memref); - emit_byte(emitptr, imm); - } - else - { - emit_op_modrm_mem(emitptr, op16, opsize, reg, memref); - emit_word(emitptr, imm); - } -} - - -//------------------------------------------------- -// emit_op_modrm_reg_imm32 - emit an opcode with a -// register modrm byte and a 32-bit immediate -//------------------------------------------------- - -inline void emit_op_modrm_reg_imm32(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, uint8_t rm, uint32_t imm) -{ - emit_op_modrm_reg(emitptr, op, opsize, reg, rm); - emit_dword(emitptr, imm); -} - - -//------------------------------------------------- -// emit_op_modrm_mem_imm32 - emit an opcode with a -// memory modrm byte and a 32-bit immediate -//------------------------------------------------- - -inline void emit_op_modrm_mem_imm32(x86code *&emitptr, uint32_t op, uint8_t opsize, uint8_t reg, x86_memref memref, uint32_t imm) -{ - emit_op_modrm_mem(emitptr, op, opsize, reg, memref); - emit_dword(emitptr, imm); -} - - -//------------------------------------------------- -// emit_op_modrm_reg_imm832 - emit an opcode with -// a register modrm byte and an 8-bit or 32-bit -// immediate -//------------------------------------------------- - -inline void emit_op_modrm_reg_imm832(x86code *&emitptr, uint32_t op8, uint32_t op32, uint8_t opsize, uint8_t reg, uint8_t rm, uint32_t imm) -{ - if ((int8_t)imm == (int32_t)imm) - { - emit_op_modrm_reg(emitptr, op8, opsize, reg, rm); - emit_byte(emitptr, imm); - } - else - { - emit_op_modrm_reg(emitptr, op32, opsize, reg, rm); - emit_dword(emitptr, imm); - } -} - - -//------------------------------------------------- -// emit_op_modrm_mem_imm832 - emit an opcode with -// a memory modrm byte and an 8-bit or 32-bit -// immediate -//------------------------------------------------- - -inline void emit_op_modrm_mem_imm832(x86code *&emitptr, uint32_t op8, uint32_t op32, uint8_t opsize, uint8_t reg, x86_memref memref, uint32_t imm) -{ - if ((int8_t)imm == (int32_t)imm) - { - emit_op_modrm_mem(emitptr, op8, opsize, reg, memref); - emit_byte(emitptr, imm); - } - else - { - emit_op_modrm_mem(emitptr, op32, opsize, reg, memref); - emit_dword(emitptr, imm); - } -} - - - -//************************************************************************** -// SIMPLE OPCODE EMITTERS -//************************************************************************** - -inline void emit_nop(x86code *&emitptr) { emit_op_simple(emitptr, OP_NOP, OP_32BIT); } -inline void emit_int_3(x86code *&emitptr) { emit_op_simple(emitptr, OP_INT_3, OP_32BIT); } -inline void emit_ret(x86code *&emitptr) { emit_op_simple(emitptr, OP_RETN, OP_32BIT); } -inline void emit_cdq(x86code *&emitptr) { emit_op_simple(emitptr, OP_CDQ, OP_32BIT); } -inline void emit_clc(x86code *&emitptr) { emit_op_simple(emitptr, OP_CLC, OP_32BIT); } -inline void emit_stc(x86code *&emitptr) { emit_op_simple(emitptr, OP_STC, OP_32BIT); } -inline void emit_cmc(x86code *&emitptr) { emit_op_simple(emitptr, OP_CMC, OP_32BIT); } -inline void emit_pushf(x86code *&emitptr) { emit_op_simple(emitptr, OP_PUSHF_Fv, OP_32BIT); } -inline void emit_popf(x86code *&emitptr) { emit_op_simple(emitptr, OP_POPF_Fv, OP_32BIT); } -inline void emit_cpuid(x86code *&emitptr) { emit_op_simple(emitptr, OP_CPUID, OP_32BIT); } - -#if (X86EMIT_SIZE == 32) -inline void emit_pushad(x86code *&emitptr) { emit_op_simple(emitptr, OP_PUSHA, OP_32BIT); } -inline void emit_popad(x86code *&emitptr) { emit_op_simple(emitptr, OP_POPA, OP_32BIT); } -inline void emit_lahf(x86code *&emitptr) { emit_op_simple(emitptr, OP_LAHF, OP_32BIT); } -inline void emit_sahf(x86code *&emitptr) { emit_op_simple(emitptr, OP_SAHF, OP_32BIT); } -#endif - -#if (X86EMIT_SIZE == 64) -inline void emit_cqo(x86code *&emitptr) { emit_op_simple(emitptr, OP_CQO, OP_64BIT); } -#endif - - - -//************************************************************************** -// CALL/JUMP EMITTERS -//************************************************************************** - -//------------------------------------------------- -// resolve_link - resolve a link in a jump -// instruction -//------------------------------------------------- - -inline void resolve_link(x86code *&destptr, const emit_link &linkinfo) -{ - int64_t delta = destptr - linkinfo.target; - if (linkinfo.size == 1) - { - assert((int8_t)delta == delta); - ((int8_t *)linkinfo.target)[-1] = (int8_t)delta; - } - else if (linkinfo.size == 2) - { - assert((int16_t)delta == delta); - ((int16_t *)linkinfo.target)[-1] = (int16_t)delta; - } - else - { - assert((int32_t)delta == delta); - ((int32_t *)linkinfo.target)[-1] = (int32_t)delta; - } -} - - -//------------------------------------------------- -// emit_call_* -//------------------------------------------------- - -inline void emit_call_link(x86code *&emitptr, emit_link &linkinfo) -{ - emit_op_simple(emitptr, OP_CALL_Jz, OP_32BIT); - emit_dword(emitptr, 0); - linkinfo.target = emitptr; - linkinfo.size = 4; -} - -inline void emit_call(x86code *&emitptr, x86code *target) -{ - emit_link link; - emit_call_link(emitptr, link); - resolve_link(target, link); -} - - -//------------------------------------------------- -// emit_jmp_* -//------------------------------------------------- - -inline void emit_jmp_short_link(x86code *&emitptr, emit_link &linkinfo) -{ - emit_op_simple(emitptr, OP_JMP_Jb, OP_32BIT); - emit_byte(emitptr, 0); - linkinfo.target = emitptr; - linkinfo.size = 1; -} - -inline void emit_jmp_near_link(x86code *&emitptr, emit_link &linkinfo) -{ - emit_op_simple(emitptr, OP_JMP_Jz, OP_32BIT); - emit_dword(emitptr, 0); - linkinfo.target = emitptr; - linkinfo.size = 4; -} - -inline void emit_jmp(x86code *&emitptr, x86code *target) -{ - int32_t delta = target - (emitptr + 2); - emit_link link; - - if ((int8_t)delta == delta) - emit_jmp_short_link(emitptr, link); - else - emit_jmp_near_link(emitptr, link); - resolve_link(target, link); -} - - -//------------------------------------------------- -// emit_jcc_* -//------------------------------------------------- - -inline void emit_jcc_short_link(x86code *&emitptr, uint8_t cond, emit_link &linkinfo) -{ - emit_op_simple(emitptr, OP_JCC_O_Jb + cond, OP_32BIT); - emit_byte(emitptr, 0); - linkinfo.target = emitptr; - linkinfo.size = 1; -} - -inline void emit_jcc_near_link(x86code *&emitptr, uint8_t cond, emit_link &linkinfo) -{ - emit_op_simple(emitptr, OP_JCC_O_Jv + cond, OP_32BIT); - emit_dword(emitptr, 0); - linkinfo.target = emitptr; - linkinfo.size = 4; -} - -inline void emit_jcc(x86code *&emitptr, uint8_t cond, x86code *target) -{ - int32_t delta = emitptr + 2 - target; - emit_link link; - - if ((int8_t)delta == delta) - emit_jcc_short_link(emitptr, cond, link); - else - emit_jcc_near_link(emitptr, cond, link); - resolve_link(target, link); -} - - -//------------------------------------------------- -// emit_jecxz_* -//------------------------------------------------- - -inline void emit_jecxz_link(x86code *&emitptr, emit_link &linkinfo) -{ - emit_op_simple(emitptr, OP_JrCXZ_Jb, OP_32BIT); - emit_byte(emitptr, 0); - linkinfo.target = emitptr; - linkinfo.size = 1; -} - -inline void emit_jecxz(x86code *&emitptr, x86code *target) -{ - emit_link link; - emit_jecxz_link(emitptr, link); - resolve_link(target, link); -} - -#if (X86EMIT_SIZE == 64) - -inline void emit_jrcxz_link(x86code *&emitptr, emit_link &linkinfo) -{ - emit_op_simple(emitptr, OP_JrCXZ_Jb, OP_64BIT); - emit_byte(emitptr, 0); - linkinfo.target = emitptr; - linkinfo.size = 1; -} - -inline void emit_jrcxz(x86code *&emitptr, x86code *target) -{ - emit_link link; - emit_jrcxz_link(emitptr, link); - resolve_link(target, link); -} - -#endif - - -//------------------------------------------------- -// emit_call/jmp_* -//------------------------------------------------- - -#if (X86EMIT_SIZE == 32) -inline void emit_call_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G5, OP_32BIT, 2, dreg); } -inline void emit_call_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G5, OP_32BIT, 2, memref); } -inline void emit_jmp_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G5, OP_32BIT, 4, dreg); } -inline void emit_jmp_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G5, OP_32BIT, 4, memref); } -#else -inline void emit_call_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G5, OP_32BIT, 2, dreg); } -inline void emit_call_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G5, OP_32BIT, 2, memref); } -inline void emit_jmp_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G5, OP_32BIT, 4, dreg); } -inline void emit_jmp_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G5, OP_32BIT, 4, memref); } -#endif - - -//------------------------------------------------- -// emit_ret_* -//------------------------------------------------- - -inline void emit_ret_imm(x86code *&emitptr, uint16_t imm) -{ - emit_op_simple(emitptr, OP_RETN_Iw, OP_32BIT); - emit_word(emitptr, imm); -} - - - -//************************************************************************** -// PUSH/POP EMITTERS -//************************************************************************** - -inline void emit_push_imm(x86code *&emitptr, int32_t imm) -{ - if ((int8_t)imm == imm) - { - emit_op_simple(emitptr, OP_PUSH_Ib, OP_32BIT); - emit_byte(emitptr, (int8_t)imm); - } - else - { - emit_op_simple(emitptr, OP_PUSH_Iz, OP_32BIT); - emit_dword(emitptr, imm); - } -} - -#if (X86EMIT_SIZE == 32) - -inline void emit_push_r32(x86code *&emitptr, uint8_t reg) { emit_op_reg(emitptr, OP_PUSH_rAX + (reg & 7), OP_32BIT, reg); } -inline void emit_push_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G5, OP_32BIT, 6, memref); } -inline void emit_pop_r32(x86code *&emitptr, uint8_t reg) { emit_op_reg(emitptr, OP_POP_rAX + (reg & 7), OP_32BIT, reg); } -inline void emit_pop_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G1A_Ev, OP_32BIT, 0, memref); } - -#else - -inline void emit_push_r64(x86code *&emitptr, uint8_t reg) { emit_op_reg(emitptr, OP_PUSH_rAX + (reg & 7), OP_32BIT, reg); } -inline void emit_push_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G5, OP_32BIT, 6, memref); } -inline void emit_pop_r64(x86code *&emitptr, uint8_t reg) { emit_op_reg(emitptr, OP_POP_rAX + (reg & 7), OP_32BIT, reg); } -inline void emit_pop_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G1A_Ev, OP_32BIT, 0, memref); } - -#endif - - - -//************************************************************************** -// MOVE EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_mov_r8_* -//------------------------------------------------- - -inline void emit_mov_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) -{ - emit_op_reg(emitptr, OP_MOV_AL_Ib | (dreg & 7), OP_32BIT, dreg); - emit_byte(emitptr, imm); -} - -inline void emit_mov_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOV_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_mov_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOV_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_mov_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOV_Eb_Gb, OP_32BIT, sreg, memref); } -inline void emit_mov_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G11_Eb_Ib, OP_32BIT, 0, memref, imm); } - - -//------------------------------------------------- -// emit_xchg_r8_* -//------------------------------------------------- - -inline void emit_xchg_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) -{ - if (dreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (sreg & 7), OP_32BIT, sreg); - else if (sreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (dreg & 7), OP_32BIT, dreg); - else - emit_op_modrm_reg(emitptr, OP_XCHG_Eb_Gb, OP_32BIT, dreg, sreg); -} - - -//------------------------------------------------- -// emit_mov_r16_* -//------------------------------------------------- - -inline void emit_mov_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) -{ - emit_op_reg(emitptr, OP_MOV_rAX_Iv | (dreg & 7), OP_16BIT, dreg); - emit_word(emitptr, imm); -} - -inline void emit_mov_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOV_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_mov_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOV_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_mov_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm16(emitptr, OP_G11_Ev_Iz, OP_16BIT, 0, memref, imm); } -inline void emit_mov_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOV_Ev_Gv, OP_16BIT, sreg, memref); } -inline void emit_movsx_r16_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSX_Gv_Eb, OP_16BIT, dreg, sreg); } -inline void emit_movsx_r16_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSX_Gv_Eb, OP_16BIT, dreg, memref); } -inline void emit_movzx_r16_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVZX_Gv_Eb, OP_16BIT, dreg, sreg); } -inline void emit_movzx_r16_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVZX_Gv_Eb, OP_16BIT, dreg, memref); } -inline void emit_cmovcc_r16_r16(x86code *&emitptr, uint8_t cond, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CMOV_O_Gv_Ev + cond, OP_16BIT, dreg, sreg); } -inline void emit_cmovcc_r16_m16(x86code *&emitptr, uint8_t cond, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CMOV_O_Gv_Ev + cond, OP_16BIT, dreg, memref); } - - -//------------------------------------------------- -// emit_xchg_r16_* -//------------------------------------------------- - -inline void emit_xchg_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) -{ - if (dreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (sreg & 7), OP_16BIT, sreg); - else if (sreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (dreg & 7), OP_16BIT, dreg); - else - emit_op_modrm_reg(emitptr, OP_XCHG_Ev_Gv, OP_16BIT, dreg, sreg); -} - - -//------------------------------------------------- -// emit_mov_r32_* -//------------------------------------------------- - -inline void emit_mov_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) -{ - emit_op_reg(emitptr, OP_MOV_rAX_Iv | (dreg & 7), OP_32BIT, dreg); - emit_dword(emitptr, imm); -} - -inline void emit_mov_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOV_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_mov_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOV_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_mov_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm32(emitptr, OP_G11_Ev_Iz, OP_32BIT, 0, memref, imm); } -inline void emit_mov_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOV_Ev_Gv, OP_32BIT, sreg, memref); } -inline void emit_movsx_r32_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSX_Gv_Eb, OP_32BIT, dreg, sreg); } -inline void emit_movsx_r32_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSX_Gv_Eb, OP_32BIT, dreg, memref); } -inline void emit_movsx_r32_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSX_Gv_Ew, OP_32BIT, dreg, sreg); } -inline void emit_movsx_r32_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSX_Gv_Ew, OP_32BIT, dreg, memref); } -inline void emit_movzx_r32_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) -{ -#if (X86EMIT_SIZE == 32) - if (sreg >= 4) - { - emit_op_modrm_reg(emitptr, OP_MOV_Gv_Ev, OP_32BIT, dreg, sreg); // mov dreg,sreg - emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 4, dreg, 0xff); // and dreg,0xff - } - else -#endif - emit_op_modrm_reg(emitptr, OP_MOVZX_Gv_Eb, OP_32BIT, dreg, sreg); -} -inline void emit_movzx_r32_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVZX_Gv_Eb, OP_32BIT, dreg, memref); } -inline void emit_movzx_r32_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVZX_Gv_Ew, OP_32BIT, dreg, sreg); } -inline void emit_movzx_r32_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVZX_Gv_Ew, OP_32BIT, dreg, memref); } -inline void emit_cmovcc_r32_r32(x86code *&emitptr, uint8_t cond, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CMOV_O_Gv_Ev + cond, OP_32BIT, dreg, sreg); } -inline void emit_cmovcc_r32_m32(x86code *&emitptr, uint8_t cond, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CMOV_O_Gv_Ev + cond, OP_32BIT, dreg, memref); } - - -//------------------------------------------------- -// emit_xchg_r32_* -//------------------------------------------------- - -inline void emit_xchg_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) -{ - if (dreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (sreg & 7), OP_32BIT, sreg); - else if (sreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (dreg & 7), OP_32BIT, dreg); - else - emit_op_modrm_reg(emitptr, OP_XCHG_Ev_Gv, OP_32BIT, dreg, sreg); -} - - -//------------------------------------------------- -// emit_mov_r64_* -//------------------------------------------------- - -#if (X86EMIT_SIZE == 64) - -inline void emit_mov_r64_imm(x86code *&emitptr, uint8_t dreg, uint64_t imm) -{ - if ((uint32_t)imm == imm) - { - emit_op_reg(emitptr, OP_MOV_rAX_Iv | (dreg & 7), OP_32BIT, dreg); - emit_dword(emitptr, imm); - } - else if ((int32_t)imm == imm) - emit_op_modrm_reg_imm32(emitptr, OP_G11_Ev_Iz, OP_64BIT, 0, dreg, imm); - else - { - emit_op_reg(emitptr, OP_MOV_rAX_Iv | (dreg & 7), OP_64BIT, dreg); - emit_qword(emitptr, imm); - } -} - -inline void emit_mov_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOV_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_mov_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOV_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_mov_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm32(emitptr, OP_G11_Ev_Iz, OP_64BIT, 0, memref, imm); } -inline void emit_mov_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOV_Ev_Gv, OP_64BIT, sreg, memref); } -inline void emit_movsx_r64_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSX_Gv_Eb, OP_64BIT, dreg, sreg); } -inline void emit_movsx_r64_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSX_Gv_Eb, OP_64BIT, dreg, memref); } -inline void emit_movsx_r64_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSX_Gv_Ew, OP_64BIT, dreg, sreg); } -inline void emit_movsx_r64_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSX_Gv_Ew, OP_64BIT, dreg, memref); } -inline void emit_movsxd_r64_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSXD_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_movsxd_r64_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSXD_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_movzx_r64_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVZX_Gv_Eb, OP_64BIT, dreg, sreg); } -inline void emit_movzx_r64_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVZX_Gv_Eb, OP_64BIT, dreg, memref); } -inline void emit_movzx_r64_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVZX_Gv_Ew, OP_64BIT, dreg, sreg); } -inline void emit_movzx_r64_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVZX_Gv_Ew, OP_64BIT, dreg, memref); } -inline void emit_cmovcc_r64_r64(x86code *&emitptr, uint8_t cond, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CMOV_O_Gv_Ev + cond, OP_64BIT, dreg, sreg); } -inline void emit_cmovcc_r64_m64(x86code *&emitptr, uint8_t cond, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CMOV_O_Gv_Ev + cond, OP_64BIT, dreg, memref); } - - -//------------------------------------------------- -// emit_xchg_r64_* -//------------------------------------------------- - -inline void emit_xchg_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) -{ - if (dreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (sreg & 7), OP_64BIT, sreg); - else if (sreg == REG_EAX) - emit_op_reg(emitptr, OP_NOP | (dreg & 7), OP_64BIT, dreg); - else - emit_op_modrm_reg(emitptr, OP_XCHG_Ev_Gv, OP_64BIT, dreg, sreg); -} - -#endif - - -//************************************************************************** -// ARITHMETIC EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_arith_r8_* -//------------------------------------------------- - -inline void emit_add_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 0, dreg, imm); } -inline void emit_add_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 0, memref, imm); } -inline void emit_add_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADD_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_add_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADD_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_add_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADD_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_or_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 1, dreg, imm); } -inline void emit_or_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 1, memref, imm); } -inline void emit_or_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_OR_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_or_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_OR_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_or_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_OR_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_adc_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 2, dreg, imm); } -inline void emit_adc_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 2, memref, imm); } -inline void emit_adc_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADC_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_adc_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADC_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_adc_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADC_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_sbb_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 3, dreg, imm); } -inline void emit_sbb_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 3, memref, imm); } -inline void emit_sbb_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SBB_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_sbb_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SBB_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_sbb_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SBB_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_and_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 4, dreg, imm); } -inline void emit_and_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 4, memref, imm); } -inline void emit_and_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_AND_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_and_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_AND_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_and_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_AND_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_sub_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 5, dreg, imm); } -inline void emit_sub_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 5, memref, imm); } -inline void emit_sub_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUB_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_sub_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUB_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_sub_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SUB_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_xor_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 6, dreg, imm); } -inline void emit_xor_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 6, memref, imm); } -inline void emit_xor_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_XOR_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_xor_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_XOR_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_xor_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_XOR_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_cmp_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 7, dreg, imm); } -inline void emit_cmp_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G1_Eb_Ib, OP_32BIT, 7, memref, imm); } -inline void emit_cmp_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CMP_Gb_Eb, OP_32BIT, dreg, sreg); } -inline void emit_cmp_r8_m8(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CMP_Gb_Eb, OP_32BIT, dreg, memref); } -inline void emit_cmp_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_CMP_Eb_Gb, OP_32BIT, sreg, memref); } - -inline void emit_test_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G3_Eb, OP_32BIT, 0, dreg, imm); } -inline void emit_test_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G3_Eb, OP_32BIT, 0, memref, imm); } -inline void emit_test_r8_r8(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_TEST_Eb_Gb, OP_32BIT, sreg, dreg); } -inline void emit_test_m8_r8(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_TEST_Eb_Gb, OP_32BIT, sreg, memref); } - - -//------------------------------------------------- -// emit_arith_r16_* -//------------------------------------------------- - -inline void emit_add_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 0, dreg, imm); } -inline void emit_add_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 0, memref, imm); } -inline void emit_add_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADD_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_add_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADD_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_add_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADD_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_or_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 1, dreg, imm); } -inline void emit_or_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 1, memref, imm); } -inline void emit_or_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_OR_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_or_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_OR_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_or_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_OR_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_adc_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 2, dreg, imm); } -inline void emit_adc_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 2, memref, imm); } -inline void emit_adc_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADC_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_adc_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADC_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_adc_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADC_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_sbb_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 3, dreg, imm); } -inline void emit_sbb_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 3, memref, imm); } -inline void emit_sbb_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SBB_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_sbb_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SBB_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_sbb_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SBB_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_and_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 4, dreg, imm); } -inline void emit_and_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 4, memref, imm); } -inline void emit_and_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_AND_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_and_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_AND_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_and_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_AND_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_sub_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 5, dreg, imm); } -inline void emit_sub_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 5, memref, imm); } -inline void emit_sub_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUB_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_sub_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUB_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_sub_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SUB_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_xor_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 6, dreg, imm); } -inline void emit_xor_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 6, memref, imm); } -inline void emit_xor_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_XOR_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_xor_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_XOR_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_xor_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_XOR_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_cmp_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 7, dreg, imm); } -inline void emit_cmp_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_16BIT, 7, memref, imm); } -inline void emit_cmp_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CMP_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_cmp_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CMP_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_cmp_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_CMP_Ev_Gv, OP_16BIT, sreg, memref); } - -inline void emit_test_r16_imm(x86code *&emitptr, uint8_t dreg, uint16_t imm) { emit_op_modrm_reg_imm16(emitptr, OP_G3_Ev, OP_16BIT, 0, dreg, imm); } -inline void emit_test_m16_imm(x86code *&emitptr, x86_memref memref, uint16_t imm) { emit_op_modrm_mem_imm16(emitptr, OP_G3_Ev, OP_16BIT, 0, memref, imm); } -inline void emit_test_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_TEST_Ev_Gv, OP_16BIT, sreg, dreg); } -inline void emit_test_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_TEST_Ev_Gv, OP_16BIT, sreg, memref); } - - -//------------------------------------------------- -// emit_arith_r32_* -//------------------------------------------------- - -inline void emit_add_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 0, dreg, imm); } -inline void emit_add_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 0, memref, imm); } -inline void emit_add_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADD_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_add_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADD_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_add_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADD_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_or_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 1, dreg, imm); } -inline void emit_or_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 1, memref, imm); } -inline void emit_or_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_OR_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_or_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_OR_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_or_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_OR_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_adc_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 2, dreg, imm); } -inline void emit_adc_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 2, memref, imm); } -inline void emit_adc_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADC_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_adc_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADC_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_adc_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADC_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_sbb_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 3, dreg, imm); } -inline void emit_sbb_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 3, memref, imm); } -inline void emit_sbb_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SBB_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_sbb_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SBB_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_sbb_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SBB_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_and_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 4, dreg, imm); } -inline void emit_and_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 4, memref, imm); } -inline void emit_and_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_AND_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_and_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_AND_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_and_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_AND_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_sub_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 5, dreg, imm); } -inline void emit_sub_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 5, memref, imm); } -inline void emit_sub_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUB_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_sub_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUB_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_sub_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SUB_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_xor_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 6, dreg, imm); } -inline void emit_xor_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 6, memref, imm); } -inline void emit_xor_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_XOR_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_xor_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_XOR_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_xor_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_XOR_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_cmp_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 7, dreg, imm); } -inline void emit_cmp_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_32BIT, 7, memref, imm); } -inline void emit_cmp_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CMP_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_cmp_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CMP_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_cmp_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_CMP_Ev_Gv, OP_32BIT, sreg, memref); } - -inline void emit_test_r32_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm32(emitptr, OP_G3_Ev, OP_32BIT, 0, dreg, imm); } -inline void emit_test_m32_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm32(emitptr, OP_G3_Ev, OP_32BIT, 0, memref, imm); } -inline void emit_test_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_TEST_Ev_Gv, OP_32BIT, sreg, dreg); } -inline void emit_test_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_TEST_Ev_Gv, OP_32BIT, sreg, memref); } - - -//------------------------------------------------- -// emit_arith_r64_* -//------------------------------------------------- - -#if (X86EMIT_SIZE == 64) - -inline void emit_add_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 0, dreg, imm); } -inline void emit_add_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 0, memref, imm); } -inline void emit_add_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADD_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_add_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADD_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_add_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADD_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_or_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 1, dreg, imm); } -inline void emit_or_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 1, memref, imm); } -inline void emit_or_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_OR_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_or_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_OR_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_or_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_OR_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_adc_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 2, dreg, imm); } -inline void emit_adc_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 2, memref, imm); } -inline void emit_adc_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADC_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_adc_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADC_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_adc_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_ADC_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_sbb_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 3, dreg, imm); } -inline void emit_sbb_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 3, memref, imm); } -inline void emit_sbb_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SBB_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_sbb_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SBB_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_sbb_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SBB_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_and_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 4, dreg, imm); } -inline void emit_and_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 4, memref, imm); } -inline void emit_and_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_AND_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_and_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_AND_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_and_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_AND_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_sub_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 5, dreg, imm); } -inline void emit_sub_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 5, memref, imm); } -inline void emit_sub_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUB_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_sub_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUB_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_sub_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SUB_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_xor_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 6, dreg, imm); } -inline void emit_xor_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 6, memref, imm); } -inline void emit_xor_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_XOR_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_xor_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_XOR_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_xor_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_XOR_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_cmp_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 7, dreg, imm); } -inline void emit_cmp_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_G1_Ev_Ib, OP_G1_Ev_Iz, OP_64BIT, 7, memref, imm); } -inline void emit_cmp_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CMP_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_cmp_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CMP_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_cmp_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_CMP_Ev_Gv, OP_64BIT, sreg, memref); } - -inline void emit_test_r64_imm(x86code *&emitptr, uint8_t dreg, uint32_t imm) { emit_op_modrm_reg_imm32(emitptr, OP_G3_Ev, OP_64BIT, 0, dreg, imm); } -inline void emit_test_m64_imm(x86code *&emitptr, x86_memref memref, uint32_t imm) { emit_op_modrm_mem_imm32(emitptr, OP_G3_Ev, OP_64BIT, 0, memref, imm); } -inline void emit_test_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_TEST_Ev_Gv, OP_64BIT, sreg, dreg); } -inline void emit_test_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_TEST_Ev_Gv, OP_64BIT, sreg, memref); } - -#endif - - - -//************************************************************************** -// SHIFT EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_shift_reg_imm -//------------------------------------------------- - -inline void emit_shift_reg_imm(x86code *&emitptr, uint32_t op1, uint32_t opn, uint8_t opsize, uint8_t opindex, uint8_t dreg, uint8_t imm) -{ - if (imm == 1) - emit_op_modrm_reg(emitptr, op1, opsize, opindex, dreg); - else - emit_op_modrm_reg_imm8(emitptr, opn, opsize, opindex, dreg, imm); -} - -inline void emit_shift_mem_imm(x86code *&emitptr, uint32_t op1, uint32_t opn, uint8_t opsize, uint8_t opindex, x86_memref memref, uint8_t imm) -{ - if (imm == 1) - emit_op_modrm_mem(emitptr, op1, opsize, opindex, memref); - else - emit_op_modrm_mem_imm8(emitptr, opn, opsize, opindex, memref, imm); -} - - -//------------------------------------------------- -// emit_shift_r8_* -//------------------------------------------------- - -inline void emit_rol_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 0, dreg, imm); } -inline void emit_rol_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 0, memref, imm); } -inline void emit_rol_r8_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Eb_CL, OP_32BIT, 0, dreg); } -inline void emit_rol_m8_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Eb_CL, OP_32BIT, 0, memref); } - -inline void emit_ror_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 1, dreg, imm); } -inline void emit_ror_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 1, memref, imm); } -inline void emit_ror_r8_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Eb_CL, OP_32BIT, 1, dreg); } -inline void emit_ror_m8_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Eb_CL, OP_32BIT, 1, memref); } - -inline void emit_rcl_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 2, dreg, imm); } -inline void emit_rcl_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 2, memref, imm); } -inline void emit_rcl_r8_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Eb_CL, OP_32BIT, 2, dreg); } -inline void emit_rcl_m8_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Eb_CL, OP_32BIT, 2, memref); } - -inline void emit_rcr_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 3, dreg, imm); } -inline void emit_rcr_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 3, memref, imm); } -inline void emit_rcr_r8_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Eb_CL, OP_32BIT, 3, dreg); } -inline void emit_rcr_m8_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Eb_CL, OP_32BIT, 3, memref); } - -inline void emit_shl_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 4, dreg, imm); } -inline void emit_shl_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 4, memref, imm); } -inline void emit_shl_r8_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Eb_CL, OP_32BIT, 4, dreg); } -inline void emit_shl_m8_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Eb_CL, OP_32BIT, 4, memref); } - -inline void emit_shr_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 5, dreg, imm); } -inline void emit_shr_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 5, memref, imm); } -inline void emit_shr_r8_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Eb_CL, OP_32BIT, 5, dreg); } -inline void emit_shr_m8_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Eb_CL, OP_32BIT, 5, memref); } - -inline void emit_sar_r8_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 7, dreg, imm); } -inline void emit_sar_m8_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Eb_1, OP_G2_Eb_Ib, OP_32BIT, 7, memref, imm); } -inline void emit_sar_r8_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Eb_CL, OP_32BIT, 7, dreg); } -inline void emit_sar_m8_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Eb_CL, OP_32BIT, 7, memref); } - - -//------------------------------------------------- -// emit_shift_r16_* -//------------------------------------------------- - -inline void emit_rol_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 0, dreg, imm); } -inline void emit_rol_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 0, memref, imm); } -inline void emit_rol_r16_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_16BIT, 0, dreg); } -inline void emit_rol_m16_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_16BIT, 0, memref); } - -inline void emit_ror_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 1, dreg, imm); } -inline void emit_ror_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 1, memref, imm); } -inline void emit_ror_r16_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_16BIT, 1, dreg); } -inline void emit_ror_m16_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_16BIT, 1, memref); } - -inline void emit_rcl_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 2, dreg, imm); } -inline void emit_rcl_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 2, memref, imm); } -inline void emit_rcl_r16_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_16BIT, 2, dreg); } -inline void emit_rcl_m16_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_16BIT, 2, memref); } - -inline void emit_rcr_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 3, dreg, imm); } -inline void emit_rcr_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 3, memref, imm); } -inline void emit_rcr_r16_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_16BIT, 3, dreg); } -inline void emit_rcr_m16_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_16BIT, 3, memref); } - -inline void emit_shl_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 4, dreg, imm); } -inline void emit_shl_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 4, memref, imm); } -inline void emit_shl_r16_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_16BIT, 4, dreg); } -inline void emit_shl_m16_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_16BIT, 4, memref); } - -inline void emit_shr_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 5, dreg, imm); } -inline void emit_shr_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 5, memref, imm); } -inline void emit_shr_r16_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_16BIT, 5, dreg); } -inline void emit_shr_m16_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_16BIT, 5, memref); } - -inline void emit_sar_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 7, dreg, imm); } -inline void emit_sar_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_16BIT, 7, memref, imm); } -inline void emit_sar_r16_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_16BIT, 7, dreg); } -inline void emit_sar_m16_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_16BIT, 7, memref); } - - -//------------------------------------------------- -// emit_shift_r32_* -//------------------------------------------------- - -inline void emit_rol_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 0, dreg, imm); } -inline void emit_rol_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 0, memref, imm); } -inline void emit_rol_r32_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_32BIT, 0, dreg); } -inline void emit_rol_m32_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_32BIT, 0, memref); } - -inline void emit_ror_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 1, dreg, imm); } -inline void emit_ror_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 1, memref, imm); } -inline void emit_ror_r32_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_32BIT, 1, dreg); } -inline void emit_ror_m32_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_32BIT, 1, memref); } - -inline void emit_rcl_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 2, dreg, imm); } -inline void emit_rcl_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 2, memref, imm); } -inline void emit_rcl_r32_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_32BIT, 2, dreg); } -inline void emit_rcl_m32_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_32BIT, 2, memref); } - -inline void emit_rcr_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 3, dreg, imm); } -inline void emit_rcr_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 3, memref, imm); } -inline void emit_rcr_r32_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_32BIT, 3, dreg); } -inline void emit_rcr_m32_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_32BIT, 3, memref); } - -inline void emit_shl_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 4, dreg, imm); } -inline void emit_shl_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 4, memref, imm); } -inline void emit_shl_r32_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_32BIT, 4, dreg); } -inline void emit_shl_m32_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_32BIT, 4, memref); } - -inline void emit_shr_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 5, dreg, imm); } -inline void emit_shr_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 5, memref, imm); } -inline void emit_shr_r32_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_32BIT, 5, dreg); } -inline void emit_shr_m32_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_32BIT, 5, memref); } - -inline void emit_sar_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 7, dreg, imm); } -inline void emit_sar_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_32BIT, 7, memref, imm); } -inline void emit_sar_r32_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_32BIT, 7, dreg); } -inline void emit_sar_m32_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_32BIT, 7, memref); } - -inline void emit_shld_r32_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_SHLD_Ev_Gv_Ib, OP_32BIT, sreg, dreg, imm); } -inline void emit_shld_m32_r32_imm(x86code *&emitptr, x86_memref memref, uint8_t sreg, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_SHLD_Ev_Gv_Ib, OP_32BIT, sreg, memref, imm); } -inline void emit_shld_r32_r32_cl(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SHLD_Ev_Gv_CL, OP_32BIT, sreg, dreg); } -inline void emit_shld_m32_r32_cl(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SHLD_Ev_Gv_CL, OP_32BIT, sreg, memref); } - -inline void emit_shrd_r32_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_SHRD_Ev_Gv_Ib, OP_32BIT, sreg, dreg, imm); } -inline void emit_shrd_m32_r32_imm(x86code *&emitptr, x86_memref memref, uint8_t sreg, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_SHRD_Ev_Gv_Ib, OP_32BIT, sreg, memref, imm); } -inline void emit_shrd_r32_r32_cl(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SHRD_Ev_Gv_CL, OP_32BIT, sreg, dreg); } -inline void emit_shrd_m32_r32_cl(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SHRD_Ev_Gv_CL, OP_32BIT, sreg, memref); } - - -//------------------------------------------------- -// emit_shift_r64_* -//------------------------------------------------- - -#if (X86EMIT_SIZE == 64) - -inline void emit_rol_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 0, dreg, imm); } -inline void emit_rol_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 0, memref, imm); } -inline void emit_rol_r64_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_64BIT, 0, dreg); } -inline void emit_rol_m64_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_64BIT, 0, memref); } - -inline void emit_ror_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 1, dreg, imm); } -inline void emit_ror_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 1, memref, imm); } -inline void emit_ror_r64_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_64BIT, 1, dreg); } -inline void emit_ror_m64_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_64BIT, 1, memref); } - -inline void emit_rcl_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 2, dreg, imm); } -inline void emit_rcl_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 2, memref, imm); } -inline void emit_rcl_r64_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_64BIT, 2, dreg); } -inline void emit_rcl_m64_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_64BIT, 2, memref); } - -inline void emit_rcr_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 3, dreg, imm); } -inline void emit_rcr_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 3, memref, imm); } -inline void emit_rcr_r64_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_64BIT, 3, dreg); } -inline void emit_rcr_m64_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_64BIT, 3, memref); } - -inline void emit_shl_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 4, dreg, imm); } -inline void emit_shl_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 4, memref, imm); } -inline void emit_shl_r64_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_64BIT, 4, dreg); } -inline void emit_shl_m64_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_64BIT, 4, memref); } - -inline void emit_shr_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 5, dreg, imm); } -inline void emit_shr_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 5, memref, imm); } -inline void emit_shr_r64_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_64BIT, 5, dreg); } -inline void emit_shr_m64_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_64BIT, 5, memref); } - -inline void emit_sar_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_shift_reg_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 7, dreg, imm); } -inline void emit_sar_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_shift_mem_imm(emitptr, OP_G2_Ev_1, OP_G2_Ev_Ib, OP_64BIT, 7, memref, imm); } -inline void emit_sar_r64_cl(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G2_Ev_CL, OP_64BIT, 7, dreg); } -inline void emit_sar_m64_cl(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G2_Ev_CL, OP_64BIT, 7, memref); } - -inline void emit_shld_r64_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_SHLD_Ev_Gv_Ib, OP_64BIT, sreg, dreg, imm); } -inline void emit_shld_m64_r64_imm(x86code *&emitptr, x86_memref memref, uint8_t sreg, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_SHLD_Ev_Gv_Ib, OP_64BIT, sreg, memref, imm); } -inline void emit_shld_r64_r64_cl(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SHLD_Ev_Gv_CL, OP_64BIT, sreg, dreg); } -inline void emit_shld_m64_r64_cl(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SHLD_Ev_Gv_CL, OP_64BIT, sreg, memref); } - -inline void emit_shrd_r64_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_SHRD_Ev_Gv_Ib, OP_64BIT, sreg, dreg, imm); } -inline void emit_shrd_m64_r64_imm(x86code *&emitptr, x86_memref memref, uint8_t sreg, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_SHRD_Ev_Gv_Ib, OP_64BIT, sreg, memref, imm); } -inline void emit_shrd_r64_r64_cl(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SHRD_Ev_Gv_CL, OP_64BIT, sreg, dreg); } -inline void emit_shrd_m64_r64_cl(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_SHRD_Ev_Gv_CL, OP_64BIT, sreg, memref); } - -#endif - - - -//************************************************************************** -// GROUP3 EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_group3_r8_* -//------------------------------------------------- - -inline void emit_not_r8(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 2, dreg); } -inline void emit_not_m8(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 2, memref); } - -inline void emit_neg_r8(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 3, dreg); } -inline void emit_neg_m8(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 3, memref); } - -inline void emit_mul_r8(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 4, dreg); } -inline void emit_mul_m8(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 4, memref); } - -inline void emit_imul_r8(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 5, dreg); } -inline void emit_imul_m8(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 5, memref); } - -inline void emit_div_r8(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 6, dreg); } -inline void emit_div_m8(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 6, memref); } - -inline void emit_idiv_r8(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 7, dreg); } -inline void emit_idiv_m8(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 7, memref); } - - -//------------------------------------------------- -// emit_group3_r16_* -//------------------------------------------------- - -inline void emit_not_r16(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_16BIT, 2, dreg); } -inline void emit_not_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_16BIT, 2, memref); } - -inline void emit_neg_r16(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_16BIT, 3, dreg); } -inline void emit_neg_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_16BIT, 3, memref); } - -inline void emit_mul_r16(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_16BIT, 4, dreg); } -inline void emit_mul_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_16BIT, 4, memref); } - -inline void emit_imul_r16(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_16BIT, 5, dreg); } -inline void emit_imul_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_16BIT, 5, memref); } - -inline void emit_div_r16(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_16BIT, 6, dreg); } -inline void emit_div_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_16BIT, 6, memref); } - -inline void emit_idiv_r16(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_16BIT, 7, dreg); } -inline void emit_idiv_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_16BIT, 7, memref); } - - -//------------------------------------------------- -// emit_group3_r32_* -//------------------------------------------------- - -inline void emit_not_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 2, dreg); } -inline void emit_not_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 2, memref); } - -inline void emit_neg_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 3, dreg); } -inline void emit_neg_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 3, memref); } - -inline void emit_mul_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 4, dreg); } -inline void emit_mul_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 4, memref); } - -inline void emit_imul_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 5, dreg); } -inline void emit_imul_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 5, memref); } - -inline void emit_div_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 6, dreg); } -inline void emit_div_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 6, memref); } - -inline void emit_idiv_r32(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_32BIT, 7, dreg); } -inline void emit_idiv_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_32BIT, 7, memref); } - - -//------------------------------------------------- -// emit_group3_r64_* -//------------------------------------------------- - -#if (X86EMIT_SIZE == 64) - -inline void emit_not_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_64BIT, 2, dreg); } -inline void emit_not_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_64BIT, 2, memref); } - -inline void emit_neg_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_64BIT, 3, dreg); } -inline void emit_neg_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_64BIT, 3, memref); } - -inline void emit_mul_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_64BIT, 4, dreg); } -inline void emit_mul_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_64BIT, 4, memref); } - -inline void emit_imul_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_64BIT, 5, dreg); } -inline void emit_imul_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_64BIT, 5, memref); } - -inline void emit_div_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_64BIT, 6, dreg); } -inline void emit_div_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_64BIT, 6, memref); } - -inline void emit_idiv_r64(x86code *&emitptr, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_G3_Ev, OP_64BIT, 7, dreg); } -inline void emit_idiv_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G3_Ev, OP_64BIT, 7, memref); } - -#endif - - - -//************************************************************************** -// IMUL EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_imul_r16_* -//------------------------------------------------- - -inline void emit_imul_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_IMUL_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_imul_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_IMUL_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_imul_r16_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, int16_t imm) { emit_op_modrm_reg_imm816(emitptr, OP_IMUL_Gv_Ev_Ib, OP_IMUL_Gv_Ev_Iz, OP_16BIT, dreg, sreg, imm); } -inline void emit_imul_r16_m16_imm(x86code *&emitptr, uint8_t dreg, x86_memref memref, int16_t imm) { emit_op_modrm_mem_imm816(emitptr, OP_IMUL_Gv_Ev_Ib, OP_IMUL_Gv_Ev_Iz, OP_16BIT, dreg, memref, imm); } - -inline void emit_imul_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_IMUL_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_imul_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_IMUL_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_imul_r32_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, int32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_IMUL_Gv_Ev_Ib, OP_IMUL_Gv_Ev_Iz, OP_32BIT, dreg, sreg, imm); } -inline void emit_imul_r32_m32_imm(x86code *&emitptr, uint8_t dreg, x86_memref memref, int32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_IMUL_Gv_Ev_Ib, OP_IMUL_Gv_Ev_Iz, OP_32BIT, dreg, memref, imm); } - -#if (X86EMIT_SIZE == 64) - -inline void emit_imul_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_IMUL_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_imul_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_IMUL_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_imul_r64_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, int32_t imm) { emit_op_modrm_reg_imm832(emitptr, OP_IMUL_Gv_Ev_Ib, OP_IMUL_Gv_Ev_Iz, OP_64BIT, dreg, sreg, imm); } -inline void emit_imul_r64_m64_imm(x86code *&emitptr, uint8_t dreg, x86_memref memref, int32_t imm) { emit_op_modrm_mem_imm832(emitptr, OP_IMUL_Gv_Ev_Ib, OP_IMUL_Gv_Ev_Iz, OP_64BIT, dreg, memref, imm); } - -#endif - - - -//************************************************************************** -// BIT OPERATION EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_bswap_* -//------------------------------------------------- - -inline void emit_bswap_r32(x86code *&emitptr, uint8_t dreg) { emit_op_reg(emitptr, OP_BSWAP_EAX + (dreg & 7), OP_32BIT, dreg); } -inline void emit_bswap_r64(x86code *&emitptr, uint8_t dreg) { emit_op_reg(emitptr, OP_BSWAP_EAX + (dreg & 7), OP_64BIT, dreg); } - - -//------------------------------------------------- -// emit_bsr/bsf_r16_* -//------------------------------------------------- - -inline void emit_bsf_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BSF_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_bsf_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_BSF_Gv_Ev, OP_16BIT, dreg, memref); } -inline void emit_bsr_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BSR_Gv_Ev, OP_16BIT, dreg, sreg); } -inline void emit_bsr_r16_m16(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_BSR_Gv_Ev, OP_16BIT, dreg, memref); } - -inline void emit_bsf_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BSF_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_bsf_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_BSF_Gv_Ev, OP_32BIT, dreg, memref); } -inline void emit_bsr_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BSR_Gv_Ev, OP_32BIT, dreg, sreg); } -inline void emit_bsr_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_BSR_Gv_Ev, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_bsf_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BSF_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_bsf_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_BSF_Gv_Ev, OP_64BIT, dreg, memref); } -inline void emit_bsr_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BSR_Gv_Ev, OP_64BIT, dreg, sreg); } -inline void emit_bsr_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_BSR_Gv_Ev, OP_64BIT, dreg, memref); } -#endif - - -//------------------------------------------------- -// emit_bit_r16_* -//------------------------------------------------- - -inline void emit_bt_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BT_Ev_Gv, OP_16BIT, sreg, dreg); } -inline void emit_bt_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BT_Ev_Gv, OP_16BIT, sreg, memref); } -inline void emit_bt_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 4, dreg, imm); } -inline void emit_bt_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 4, memref, imm); } - -inline void emit_bts_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTS_Ev_Gv, OP_16BIT, sreg, dreg); } -inline void emit_bts_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTS_Ev_Gv, OP_16BIT, sreg, memref); } -inline void emit_bts_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 5, dreg, imm); } -inline void emit_bts_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 5, memref, imm); } - -inline void emit_btr_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTR_Ev_Gv, OP_16BIT, sreg, dreg); } -inline void emit_btr_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTR_Ev_Gv, OP_16BIT, sreg, memref); } -inline void emit_btr_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 6, dreg, imm); } -inline void emit_btr_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 6, memref, imm); } - -inline void emit_btc_r16_r16(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTC_Ev_Gv, OP_16BIT, sreg, dreg); } -inline void emit_btc_m16_r16(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTC_Ev_Gv, OP_16BIT, sreg, memref); } -inline void emit_btc_r16_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 7, dreg, imm); } -inline void emit_btc_m16_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_16BIT, 7, memref, imm); } - - -//------------------------------------------------- -// emit_bit_r32_* -//------------------------------------------------- - -inline void emit_bt_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BT_Ev_Gv, OP_32BIT, sreg, dreg); } -inline void emit_bt_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BT_Ev_Gv, OP_32BIT, sreg, memref); } -inline void emit_bt_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 4, dreg, imm); } -inline void emit_bt_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 4, memref, imm); } - -inline void emit_bts_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTS_Ev_Gv, OP_32BIT, sreg, dreg); } -inline void emit_bts_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTS_Ev_Gv, OP_32BIT, sreg, memref); } -inline void emit_bts_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 5, dreg, imm); } -inline void emit_bts_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 5, memref, imm); } - -inline void emit_btr_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTR_Ev_Gv, OP_32BIT, sreg, dreg); } -inline void emit_btr_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTR_Ev_Gv, OP_32BIT, sreg, memref); } -inline void emit_btr_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 6, dreg, imm); } -inline void emit_btr_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 6, memref, imm); } - -inline void emit_btc_r32_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTC_Ev_Gv, OP_32BIT, sreg, dreg); } -inline void emit_btc_m32_r32(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTC_Ev_Gv, OP_32BIT, sreg, memref); } -inline void emit_btc_r32_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 7, dreg, imm); } -inline void emit_btc_m32_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_32BIT, 7, memref, imm); } - - -//------------------------------------------------- -// emit_bit_r64_* -//------------------------------------------------- - -#if (X86EMIT_SIZE == 64) - -inline void emit_bt_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BT_Ev_Gv, OP_64BIT, sreg, dreg); } -inline void emit_bt_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BT_Ev_Gv, OP_64BIT, sreg, memref); } -inline void emit_bt_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 4, dreg, imm); } -inline void emit_bt_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 4, memref, imm); } - -inline void emit_bts_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTS_Ev_Gv, OP_64BIT, sreg, dreg); } -inline void emit_bts_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTS_Ev_Gv, OP_64BIT, sreg, memref); } -inline void emit_bts_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 5, dreg, imm); } -inline void emit_bts_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 5, memref, imm); } - -inline void emit_btr_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTR_Ev_Gv, OP_64BIT, sreg, dreg); } -inline void emit_btr_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTR_Ev_Gv, OP_64BIT, sreg, memref); } -inline void emit_btr_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 6, dreg, imm); } -inline void emit_btr_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 6, memref, imm); } - -inline void emit_btc_r64_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_BTC_Ev_Gv, OP_64BIT, sreg, dreg); } -inline void emit_btc_m64_r64(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_BTC_Ev_Gv, OP_64BIT, sreg, memref); } -inline void emit_btc_r64_imm(x86code *&emitptr, uint8_t dreg, uint8_t imm) { emit_op_modrm_reg_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 7, dreg, imm); } -inline void emit_btc_m64_imm(x86code *&emitptr, x86_memref memref, uint8_t imm) { emit_op_modrm_mem_imm8(emitptr, OP_G8_Ev_Ib, OP_64BIT, 7, memref, imm); } - -#endif - - - -//************************************************************************** -// LEA EMITTERS -//************************************************************************** - -inline void emit_lea_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_LEA_Gv_M, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_lea_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_LEA_Gv_M, OP_64BIT, dreg, memref); } -#endif - - - -//************************************************************************** -// SET EMITTERS -//************************************************************************** - -//------------------------------------------------- -// emit_setcc_* -//------------------------------------------------- - -inline void emit_setcc_r8(x86code *&emitptr, uint8_t cond, uint8_t dreg) { emit_op_modrm_reg(emitptr, OP_SETCC_O_Eb + cond, OP_32BIT, 0, dreg); } -inline void emit_setcc_m8(x86code *&emitptr, uint8_t cond, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SETCC_O_Eb + cond, OP_32BIT, 0, memref); } - - - -//************************************************************************** -// SIMPLE FPU EMITTERS -//************************************************************************** - -#if (X86EMIT_SIZE == 32) - -inline void emit_fnop(x86code *&emitptr) { emit_op_simple(emitptr, OP_FNOP, OP_32BIT); } -inline void emit_fchs(x86code *&emitptr) { emit_op_simple(emitptr, OP_FCHS, OP_32BIT); } -inline void emit_fabs(x86code *&emitptr) { emit_op_simple(emitptr, OP_FABS, OP_32BIT); } -inline void emit_ftst(x86code *&emitptr) { emit_op_simple(emitptr, OP_FTST, OP_32BIT); } -inline void emit_fxam(x86code *&emitptr) { emit_op_simple(emitptr, OP_FXAM, OP_32BIT); } -inline void emit_fld1(x86code *&emitptr) { emit_op_simple(emitptr, OP_FLD1, OP_32BIT); } -inline void emit_fldl2t(x86code *&emitptr) { emit_op_simple(emitptr, OP_FLDL2T, OP_32BIT); } -inline void emit_fldl2e(x86code *&emitptr) { emit_op_simple(emitptr, OP_FLDL2E, OP_32BIT); } -inline void emit_fldpi(x86code *&emitptr) { emit_op_simple(emitptr, OP_FLDPI, OP_32BIT); } -inline void emit_fldlg2(x86code *&emitptr) { emit_op_simple(emitptr, OP_FLDLG2, OP_32BIT); } -inline void emit_fldln2(x86code *&emitptr) { emit_op_simple(emitptr, OP_FLDLN2, OP_32BIT); } -inline void emit_fldz(x86code *&emitptr) { emit_op_simple(emitptr, OP_FLDZ, OP_32BIT); } -inline void emit_f2xm1(x86code *&emitptr) { emit_op_simple(emitptr, OP_F2XM1, OP_32BIT); } -inline void emit_fyl2x(x86code *&emitptr) { emit_op_simple(emitptr, OP_FYL2X, OP_32BIT); } -inline void emit_fptan(x86code *&emitptr) { emit_op_simple(emitptr, OP_FPTAN, OP_32BIT); } -inline void emit_fpatan(x86code *&emitptr) { emit_op_simple(emitptr, OP_FPATAN, OP_32BIT); } -inline void emit_fxtract(x86code *&emitptr) { emit_op_simple(emitptr, OP_FXTRACT, OP_32BIT); } -inline void emit_fprem1(x86code *&emitptr) { emit_op_simple(emitptr, OP_FPREM1, OP_32BIT); } -inline void emit_fdecstp(x86code *&emitptr) { emit_op_simple(emitptr, OP_FDECSTP, OP_32BIT); } -inline void emit_fincstp(x86code *&emitptr) { emit_op_simple(emitptr, OP_FINCSTP, OP_32BIT); } -inline void emit_fprem(x86code *&emitptr) { emit_op_simple(emitptr, OP_FPREM, OP_32BIT); } -inline void emit_fyl2xp1(x86code *&emitptr) { emit_op_simple(emitptr, OP_FYL2XP1, OP_32BIT); } -inline void emit_fsqrt(x86code *&emitptr) { emit_op_simple(emitptr, OP_FSQRT, OP_32BIT); } -inline void emit_fsincos(x86code *&emitptr) { emit_op_simple(emitptr, OP_FSINCOS, OP_32BIT); } -inline void emit_frndint(x86code *&emitptr) { emit_op_simple(emitptr, OP_FRNDINT, OP_32BIT); } -inline void emit_fscale(x86code *&emitptr) { emit_op_simple(emitptr, OP_FSCALE, OP_32BIT); } -inline void emit_fsin(x86code *&emitptr) { emit_op_simple(emitptr, OP_FSIN, OP_32BIT); } -inline void emit_fcos(x86code *&emitptr) { emit_op_simple(emitptr, OP_FCOS, OP_32BIT); } -inline void emit_fucompp(x86code *&emitptr) { emit_op_simple(emitptr, OP_FUCOMPP, OP_32BIT); } -inline void emit_fclex(x86code *&emitptr) { emit_op_simple(emitptr, OP_FCLEX, OP_32BIT); } -inline void emit_finit(x86code *&emitptr) { emit_op_simple(emitptr, OP_FINIT, OP_32BIT); } -inline void emit_fcompp(x86code *&emitptr) { emit_op_simple(emitptr, OP_FCOMPP, OP_32BIT); } -inline void emit_fstsw_ax(x86code *&emitptr) { emit_op_simple(emitptr, OP_FSTSW_AX, OP_32BIT); } - -#endif - - - -//************************************************************************** -// REGISTER-BASED FPU EMITTERS -//************************************************************************** - -#if (X86EMIT_SIZE == 32) - -inline void emit_ffree_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FFREE_STn + reg, OP_32BIT); } -inline void emit_fst_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FST_STn + reg, OP_32BIT); } -inline void emit_fstp_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FSTP_STn + reg, OP_32BIT); } -inline void emit_fucomp_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FUCOMP_STn + reg, OP_32BIT); } - -inline void emit_fadd_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FADD_ST0_STn + reg, OP_32BIT); } -inline void emit_fmul_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FMUL_ST0_STn + reg, OP_32BIT); } -inline void emit_fcom_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCOM_ST0_STn + reg, OP_32BIT); } -inline void emit_fcomp_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCOMP_ST0_STn + reg, OP_32BIT); } -inline void emit_fsub_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FSUB_ST0_STn + reg, OP_32BIT); } -inline void emit_fsubr_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FSUBR_ST0_STn + reg, OP_32BIT); } -inline void emit_fdiv_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FDIV_ST0_STn + reg, OP_32BIT); } -inline void emit_fdivr_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FDIVR_ST0_STn + reg, OP_32BIT); } -inline void emit_fld_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FLD_ST0_STn + reg, OP_32BIT); } -inline void emit_fxch_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FXCH_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmovb_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVB_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmove_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVE_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmovbe_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVBE_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmovu_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVU_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmovnb_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVNB_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmovne_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVNE_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmovnbe_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVNBE_ST0_STn + reg, OP_32BIT); } -inline void emit_fcmovnu_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCMOVNU_ST0_STn + reg, OP_32BIT); } -inline void emit_fucomi_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FUCOMI_ST0_STn + reg, OP_32BIT); } -inline void emit_fcomi_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCOMI_ST0_STn + reg, OP_32BIT); } -inline void emit_fcomip_st0_stn(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FCOMIP_ST0_STn + reg, OP_32BIT); } - -inline void emit_fadd_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FADD_STn_ST0 + reg, OP_32BIT); } -inline void emit_fmul_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FMUL_STn_ST0 + reg, OP_32BIT); } -inline void emit_fsubr_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FSUBR_STn_ST0 + reg, OP_32BIT); } -inline void emit_fsub_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FSUB_STn_ST0 + reg, OP_32BIT); } -inline void emit_fdivr_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FDIVR_STn_ST0 + reg, OP_32BIT); } -inline void emit_fdiv_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FDIV_STn_ST0 + reg, OP_32BIT); } -inline void emit_fucom_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FUCOM_STn_ST0 + reg, OP_32BIT); } -inline void emit_faddp_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FADDP_STn_ST0 + reg, OP_32BIT); } -inline void emit_fmulp_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FMULP_STn_ST0 + reg, OP_32BIT); } -inline void emit_fsubrp_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FSUBRP_STn_ST0 + reg, OP_32BIT); } -inline void emit_fsubp_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FSUBP_STn_ST0 + reg, OP_32BIT); } -inline void emit_fdivrp_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FDIVRP_STn_ST0 + reg, OP_32BIT); } -inline void emit_fdivp_stn_st0(x86code *&emitptr, uint8_t reg) { emit_op_simple(emitptr, OP_FDIVP_STn_ST0 + reg, OP_32BIT); } - -inline void emit_faddp(x86code *&emitptr) { emit_faddp_stn_st0(emitptr, 1); } -inline void emit_fmulp(x86code *&emitptr) { emit_fmulp_stn_st0(emitptr, 1); } -inline void emit_fsubrp(x86code *&emitptr) { emit_fsubrp_stn_st0(emitptr, 1); } -inline void emit_fsubp(x86code *&emitptr) { emit_fsubp_stn_st0(emitptr, 1); } -inline void emit_fdivrp(x86code *&emitptr) { emit_fdivrp_stn_st0(emitptr, 1); } -inline void emit_fdivp(x86code *&emitptr) { emit_fdivp_stn_st0(emitptr, 1); } - -#endif - - - -//************************************************************************** -// MEMORY FPU EMITTERS -//************************************************************************** - -#if (X86EMIT_SIZE == 32) - -inline void emit_fadd_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 0, memref); } -inline void emit_fmul_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 1, memref); } -inline void emit_fcom_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 2, memref); } -inline void emit_fcomp_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 3, memref); } -inline void emit_fsub_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 4, memref); } -inline void emit_fsubr_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 5, memref); } -inline void emit_fdiv_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 6, memref); } -inline void emit_fdivr_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D8, OP_32BIT, 7, memref); } - -inline void emit_fld_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D9, OP_32BIT, 0, memref); } -inline void emit_fst_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D9, OP_32BIT, 2, memref); } -inline void emit_fstp_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D9, OP_32BIT, 3, memref); } -inline void emit_fldenv_m(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D9, OP_32BIT, 4, memref); } -inline void emit_fldcw_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D9, OP_32BIT, 5, memref); } -inline void emit_fstenv_m(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D9, OP_32BIT, 6, memref); } -inline void emit_fstcw_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_D9, OP_32BIT, 7, memref); } - -inline void emit_fiadd_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 0, memref); } -inline void emit_fimul_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 1, memref); } -inline void emit_ficom_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 2, memref); } -inline void emit_ficomp_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 3, memref); } -inline void emit_fisub_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 4, memref); } -inline void emit_fisubr_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 5, memref); } -inline void emit_fidiv_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 6, memref); } -inline void emit_fidivr_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DA, OP_32BIT, 7, memref); } - -inline void emit_fild_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DB, OP_32BIT, 0, memref); } -inline void emit_fisttp_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DB, OP_32BIT, 1, memref); } -inline void emit_fist_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DB, OP_32BIT, 2, memref); } -inline void emit_fistp_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DB, OP_32BIT, 3, memref); } -inline void emit_fld_m80(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DB, OP_32BIT, 5, memref); } -inline void emit_fstp_m80(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DB, OP_32BIT, 7, memref); } - -inline void emit_fadd_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 0, memref); } -inline void emit_fmul_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 1, memref); } -inline void emit_fcom_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 2, memref); } -inline void emit_fcomp_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 3, memref); } -inline void emit_fsub_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 4, memref); } -inline void emit_fsubr_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 5, memref); } -inline void emit_fdiv_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 6, memref); } -inline void emit_fdivr_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DC, OP_32BIT, 7, memref); } - -inline void emit_fld_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DD, OP_32BIT, 0, memref); } -inline void emit_fisttp_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DD, OP_32BIT, 1, memref); } -inline void emit_fst_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DD, OP_32BIT, 2, memref); } -inline void emit_fstp_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DD, OP_32BIT, 3, memref); } -inline void emit_frstor_m(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DD, OP_32BIT, 4, memref); } -inline void emit_fsave_m(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DD, OP_32BIT, 6, memref); } -inline void emit_fstsw_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DD, OP_32BIT, 7, memref); } - -inline void emit_fiadd_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 0, memref); } -inline void emit_fimul_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 1, memref); } -inline void emit_ficom_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 2, memref); } -inline void emit_ficomp_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 3, memref); } -inline void emit_fisub_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 4, memref); } -inline void emit_fisubr_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 5, memref); } -inline void emit_fidiv_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 6, memref); } -inline void emit_fidivr_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DE, OP_32BIT, 7, memref); } - -inline void emit_fild_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 0, memref); } -inline void emit_fisttp_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 1, memref); } -inline void emit_fist_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 2, memref); } -inline void emit_fistp_m16(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 3, memref); } -inline void emit_fbld_m80(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 4, memref); } -inline void emit_fild_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 5, memref); } -inline void emit_fbstp_m80(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 6, memref); } -inline void emit_fistp_m64(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ESC_DF, OP_32BIT, 7, memref); } - -#endif - - - -//************************************************************************** -// GROUP16 EMITTERS -//************************************************************************** - -inline void emit_ldmxcsr_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G16, OP_32BIT, 2, memref); } -inline void emit_stmxcsr_m32(x86code *&emitptr, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_G16, OP_32BIT, 3, memref); } - - - -//************************************************************************** -// MISC SSE EMITTERS -//************************************************************************** - -inline void emit_movd_r128_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVD_Vd_Ed, OP_32BIT, dreg, sreg); } -inline void emit_movd_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVD_Vd_Ed, OP_32BIT, dreg, memref); } -inline void emit_movd_r32_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVD_Ed_Vd, OP_32BIT, sreg, dreg); } -inline void emit_movd_m32_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVD_Ed_Vd, OP_32BIT, sreg, memref); } - -#if (X86EMIT_SIZE == 64) - -inline void emit_movq_r128_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVD_Vd_Ed, OP_64BIT, dreg, sreg); } -inline void emit_movq_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVD_Vd_Ed, OP_64BIT, dreg, memref); } -inline void emit_movq_r64_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVD_Ed_Vd, OP_64BIT, sreg, dreg); } -inline void emit_movq_m64_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVD_Ed_Vd, OP_64BIT, sreg, memref); } - -#endif - -inline void emit_movdqa_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVDQA_Vdq_Wdq, OP_32BIT, dreg, memref); } -inline void emit_movdqa_m128_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVDQA_Wdq_Vdq, OP_32BIT, sreg, memref); } -inline void emit_movdqu_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVDQU_Vdq_Wdq, OP_32BIT, dreg, memref); } -inline void emit_movdqu_m128_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVDQU_Wdq_Vdq, OP_32BIT, sreg, memref); } - - -//************************************************************************** -// SSE SCALAR SINGLE EMITTERS -//************************************************************************** - -inline void emit_movss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_movss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSS_Vss_Wss, OP_32BIT, dreg, memref); } -inline void emit_movss_m32_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVSS_Wss_Vss, OP_32BIT, sreg, memref); } - -inline void emit_addss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADDSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_addss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADDSS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_subss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUBSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_subss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUBSS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_mulss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MULSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_mulss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MULSS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_divss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_DIVSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_divss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_DIVSS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_rcpss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_RCPSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_rcpss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_RCPSS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_sqrtss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SQRTSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_sqrtss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SQRTSS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_rsqrtss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_RSQRTSS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_rsqrtss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_RSQRTSS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_comiss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_COMISS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_comiss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_COMISS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_ucomiss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_UCOMISS_Vss_Wss, OP_32BIT, dreg, sreg); } -inline void emit_ucomiss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_UCOMISS_Vss_Wss, OP_32BIT, dreg, memref); } - -inline void emit_cvtsi2ss_r128_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSI2SS_Vss_Ed, OP_32BIT, dreg, sreg); } -inline void emit_cvtsi2ss_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSI2SS_Vss_Ed, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_cvtsi2ss_r128_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSI2SS_Vss_Ed, OP_64BIT, dreg, sreg); } -inline void emit_cvtsi2ss_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSI2SS_Vss_Ed, OP_64BIT, dreg, memref); } -#endif - -inline void emit_cvtsd2ss_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSD2SS_Vss_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_cvtsd2ss_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSD2SS_Vss_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_cvtss2si_r32_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSS2SI_Gd_Wss, OP_32BIT, dreg, sreg); } -inline void emit_cvtss2si_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSS2SI_Gd_Wss, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_cvtss2si_r64_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSS2SI_Gd_Wss, OP_64BIT, dreg, sreg); } -inline void emit_cvtss2si_r64_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSS2SI_Gd_Wss, OP_64BIT, dreg, memref); } -#endif - -inline void emit_cvttss2si_r32_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTTSS2SI_Gd_Wss, OP_32BIT, dreg, sreg); } -inline void emit_cvttss2si_r32_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTTSS2SI_Gd_Wss, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_cvttss2si_r64_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTTSS2SI_Gd_Wss, OP_64BIT, dreg, sreg); } -inline void emit_cvttss2si_r64_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTTSS2SI_Gd_Wss, OP_64BIT, dreg, memref); } -#endif - -inline void emit_roundss_r128_r128_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg(emitptr, OP_ROUNDSS_Vss_Wss_Ib, OP_32BIT, dreg, sreg); emit_byte(emitptr, imm); } -inline void emit_roundss_r128_m32_imm(x86code *&emitptr, uint8_t dreg, x86_memref memref, uint8_t imm) { emit_op_modrm_mem(emitptr, OP_ROUNDSS_Vss_Wss_Ib, OP_32BIT, dreg, memref); emit_byte(emitptr, imm); } - - - -//************************************************************************** -// SSE PACKED SINGLE EMITTERS -//************************************************************************** - -inline void emit_movps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVAPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_movps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVAPS_Vps_Wps, OP_32BIT, dreg, memref); } -inline void emit_movps_m128_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVAPS_Wps_Vps, OP_32BIT, sreg, memref); } - -inline void emit_addps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADDPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_addps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADDPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_subps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUBPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_subps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUBPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_mulps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MULPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_mulps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MULPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_divps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_DIVPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_divps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_DIVPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_rcpps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_RCPPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_rcpps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_RCPPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_sqrtps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SQRTPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_sqrtps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SQRTPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_rsqrtps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_RSQRTPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_rsqrtps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_RSQRTPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_andps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ANDPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_andps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ANDPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_andnps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ANDNPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_andnps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ANDNPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_orps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ORPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_orps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ORPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_xorps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_XORPS_Vps_Wps, OP_32BIT, dreg, sreg); } -inline void emit_xorps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_XORPS_Vps_Wps, OP_32BIT, dreg, memref); } - -inline void emit_cvtdq2ps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTDQ2PS_Vps_Wdq, OP_32BIT, dreg, sreg); } -inline void emit_cvtdq2ps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTDQ2PS_Vps_Wdq, OP_32BIT, dreg, memref); } - -inline void emit_cvtpd2ps_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTPD2PS_Vps_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_cvtpd2ps_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTPD2PS_Vps_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_cvtps2dq_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTPS2DQ_Vdq_Wps, OP_32BIT, dreg, sreg); } -inline void emit_cvtps2dq_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTPS2DQ_Vdq_Wps, OP_32BIT, dreg, memref); } - -inline void emit_cvttps2dq_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTTPS2DQ_Vdq_Wps, OP_32BIT, dreg, sreg); } -inline void emit_cvttps2dq_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTTPS2DQ_Vdq_Wps, OP_32BIT, dreg, memref); } - -inline void emit_roundps_r128_r128_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg(emitptr, OP_ROUNDPS_Vdq_Wdq_Ib, OP_32BIT, dreg, sreg); emit_byte(emitptr, imm); } -inline void emit_roundps_r128_m128_imm(x86code *&emitptr, uint8_t dreg, x86_memref memref, uint8_t imm) { emit_op_modrm_mem(emitptr, OP_ROUNDPS_Vdq_Wdq_Ib, OP_32BIT, dreg, memref); emit_byte(emitptr, imm); } - - - -//************************************************************************** -// SSE SCALAR DOUBLE EMITTERS -//************************************************************************** - -inline void emit_movsd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVSD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_movsd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVSD_Vsd_Wsd, OP_32BIT, dreg, memref); } -inline void emit_movsd_m64_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVSD_Wsd_Vsd, OP_32BIT, sreg, memref); } - -inline void emit_addsd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADDSD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_addsd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADDSD_Vsd_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_subsd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUBSD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_subsd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUBSD_Vsd_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_mulsd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MULSD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_mulsd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MULSD_Vsd_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_divsd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_DIVSD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_divsd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_DIVSD_Vsd_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_sqrtsd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SQRTSD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_sqrtsd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SQRTSD_Vsd_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_comisd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_COMISD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_comisd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_COMISD_Vsd_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_ucomisd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_UCOMISD_Vsd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_ucomisd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_UCOMISD_Vsd_Wsd, OP_32BIT, dreg, memref); } - -inline void emit_cvtsi2sd_r128_r32(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSI2SD_Vsd_Ed, OP_32BIT, dreg, sreg); } -inline void emit_cvtsi2sd_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSI2SD_Vsd_Ed, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_cvtsi2sd_r128_r64(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSI2SD_Vsd_Ed, OP_64BIT, dreg, sreg); } -inline void emit_cvtsi2sd_r128_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSI2SD_Vsd_Ed, OP_64BIT, dreg, memref); } -#endif - -inline void emit_cvtss2sd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSS2SD_Vsd_Wss, OP_32BIT, dreg, sreg); } -inline void emit_cvtss2sd_r128_m32(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSS2SD_Vsd_Wss, OP_32BIT, dreg, memref); } - -inline void emit_cvtsd2si_r32_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSD2SI_Gd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_cvtsd2si_r32_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSD2SI_Gd_Wsd, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_cvtsd2si_r64_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTSD2SI_Gd_Wsd, OP_64BIT, dreg, sreg); } -inline void emit_cvtsd2si_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTSD2SI_Gd_Wsd, OP_64BIT, dreg, memref); } -#endif - -inline void emit_cvttsd2si_r32_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTTSD2SI_Gd_Wsd, OP_32BIT, dreg, sreg); } -inline void emit_cvttsd2si_r32_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTTSD2SI_Gd_Wsd, OP_32BIT, dreg, memref); } - -#if (X86EMIT_SIZE == 64) -inline void emit_cvttsd2si_r64_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTTSD2SI_Gd_Wsd, OP_64BIT, dreg, sreg); } -inline void emit_cvttsd2si_r64_m64(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTTSD2SI_Gd_Wsd, OP_64BIT, dreg, memref); } -#endif - -inline void emit_roundsd_r128_r128_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg(emitptr, OP_ROUNDSD_Vsd_Wsd_Ib, OP_32BIT, dreg, sreg); emit_byte(emitptr, imm); } -inline void emit_roundsd_r128_m64_imm(x86code *&emitptr, uint8_t dreg, x86_memref memref, uint8_t imm) { emit_op_modrm_mem(emitptr, OP_ROUNDSD_Vsd_Wsd_Ib, OP_32BIT, dreg, memref); emit_byte(emitptr, imm); } - - - -//************************************************************************** -// SSE PACKED DOUBLE EMITTERS -//************************************************************************** - -inline void emit_movpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MOVAPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_movpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MOVAPD_Vpd_Wpd, OP_32BIT, dreg, memref); } -inline void emit_movpd_m128_r128(x86code *&emitptr, x86_memref memref, uint8_t sreg) { emit_op_modrm_mem(emitptr, OP_MOVAPD_Wpd_Vpd, OP_32BIT, sreg, memref); } - -inline void emit_addpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ADDPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_addpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ADDPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_subpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SUBPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_subpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SUBPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_mulpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_MULPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_mulpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_MULPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_divpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_DIVPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_divpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_DIVPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_sqrtpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_SQRTPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_sqrtpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_SQRTPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_andpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ANDPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_andpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ANDPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_andnpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ANDNPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_andnpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ANDNPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_orpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_ORPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_orpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_ORPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_xorpd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_XORPD_Vpd_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_xorpd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_XORPD_Vpd_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_cvtdq2pd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTDQ2PD_Vpd_Wq, OP_32BIT, dreg, sreg); } -inline void emit_cvtdq2pd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTDQ2PD_Vpd_Wq, OP_32BIT, dreg, memref); } - -inline void emit_cvtps2pd_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTPS2PD_Vpd_Wq, OP_32BIT, dreg, sreg); } -inline void emit_cvtps2pd_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTPS2PD_Vpd_Wq, OP_32BIT, dreg, memref); } - -inline void emit_cvtpd2dq_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTPD2DQ_Vdq_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_cvtpd2dq_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTPD2DQ_Vdq_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_cvttpd2dq_r128_r128(x86code *&emitptr, uint8_t dreg, uint8_t sreg) { emit_op_modrm_reg(emitptr, OP_CVTTPD2DQ_Vdq_Wpd, OP_32BIT, dreg, sreg); } -inline void emit_cvttpd2dq_r128_m128(x86code *&emitptr, uint8_t dreg, x86_memref memref) { emit_op_modrm_mem(emitptr, OP_CVTTPD2DQ_Vdq_Wpd, OP_32BIT, dreg, memref); } - -inline void emit_roundpd_r128_r128_imm(x86code *&emitptr, uint8_t dreg, uint8_t sreg, uint8_t imm) { emit_op_modrm_reg(emitptr, OP_ROUNDPD_Vdq_Wdq_Ib, OP_32BIT, dreg, sreg); emit_byte(emitptr, imm); } -inline void emit_roundpd_r128_m128_imm(x86code *&emitptr, uint8_t dreg, x86_memref memref, uint8_t imm) { emit_op_modrm_mem(emitptr, OP_ROUNDPD_Vdq_Wdq_Ib, OP_32BIT, dreg, memref); emit_byte(emitptr, imm); } - -} - -#undef X86EMIT_SIZE - -#endif diff --git a/src/devices/cpu/x86log.h b/src/devices/cpu/x86log.h index ac7195c99bd..ba2a349a55f 100644 --- a/src/devices/cpu/x86log.h +++ b/src/devices/cpu/x86log.h @@ -15,7 +15,6 @@ #include #include -#include "x86emit.h" /*************************************************************************** @@ -32,6 +31,10 @@ constexpr int COMMENT_POOL_SIZE{MAX_COMMENTS * 40}; TYPE DEFINITIONS ***************************************************************************/ +// use x86code * to reference generated code +typedef uint8_t x86code; + + /* code logging info */ struct log_comment { -- cgit v1.2.3