/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* vim : set ts = 8 sts = 2 et sw = 2 tw = 80 :
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef jit_x86_shared_Encoding_x86_shared_h
#define jit_x86_shared_Encoding_x86_shared_h
#include <type_traits>
#include "jit/x86-shared/Constants-x86-shared.h"
namespace js {
namespace jit {
namespace X86Encoding {
static const size_t MaxInstructionSize =
16 ;
// These enumerated values are following the Intel documentation Volume 2C [1],
// Appendix A.2 and Appendix A.3.
//
// Operand size/types as listed in the Appendix A.2. Tables of the instructions
// and their operands can be found in the Appendix A.3.
//
// B = reg (VEX.vvvv of VEX prefix)
// E = reg/mem
// G = reg (reg field of ModR/M)
// U = xmm (R/M field of ModR/M)
// V = xmm (reg field of ModR/M)
// W = xmm/mem64
// I = immediate
// O = offset
//
// b = byte (8-bit)
// w = word (16-bit)
// v = register size
// d = double (32-bit)
// dq = double-quad (128-bit) (xmm)
// ss = scalar float 32 (xmm)
// ps = packed float 32 (xmm)
// sd = scalar double (xmm)
// pd = packed double (xmm)
// y = 32/64-bit
// z = 16/32/64-bit
// vqp = (*)
//
// (*) Some website [2] provides a convenient list of all instructions, but be
// aware that they do not follow the Intel documentation naming, as the
// following enumeration does. Do not use these names as a reference for adding
// new instructions.
//
// [1]
// http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-manual-325462.html
// [2] http://ref.x86asm.net/geek.html
//
// OPn_NAME_DstSrc
enum OneByteOpcodeID {
OP_NOP_00 =
0 x00,
OP_ADD_EbGb =
0 x00,
OP_ADD_EvGv =
0 x01,
OP_ADD_GvEv =
0 x03,
OP_ADD_EAXIv =
0 x05,
OP_OR_EbGb =
0 x08,
OP_OR_EvGv =
0 x09,
OP_OR_GvEv =
0 x0B,
OP_OR_EAXIv =
0 x0D,
OP_2BYTE_ESCAPE =
0 x0F,
OP_NOP_0F =
0 x0F,
OP_ADC_GvEv =
0 x13,
OP_SBB_GvEv =
0 x1B,
OP_NOP_1F =
0 x1F,
OP_AND_EbGb =
0 x20,
OP_AND_EvGv =
0 x21,
OP_AND_GvEv =
0 x23,
OP_AND_EAXIv =
0 x25,
OP_SUB_EbGb =
0 x28,
OP_SUB_EvGv =
0 x29,
OP_SUB_GvEv =
0 x2B,
OP_SUB_EAXIv =
0 x2D,
PRE_PREDICT_BRANCH_NOT_TAKEN =
0 x2E,
OP_XOR_EbGb =
0 x30,
OP_XOR_EvGv =
0 x31,
OP_XOR_GvEv =
0 x33,
OP_XOR_EAXIv =
0 x35,
OP_CMP_EbGb =
0 x38,
OP_CMP_EvGv =
0 x39,
OP_CMP_GbEb =
0 x3A,
OP_CMP_GvEv =
0 x3B,
OP_CMP_EAXIb =
0 x3C,
OP_CMP_EAXIv =
0 x3D,
#ifdef JS_CODEGEN_X64
PRE_REX =
0 x40,
#endif
OP_NOP_40 =
0 x40,
OP_NOP_44 =
0 x44,
OP_PUSH_EAX =
0 x50,
OP_POP_EAX =
0 x58,
#ifdef JS_CODEGEN_X86
OP_PUSHA =
0 x60,
OP_POPA =
0 x61,
#endif
#ifdef JS_CODEGEN_X64
OP_MOVSXD_GvEv =
0 x63,
#endif
PRE_OPERAND_SIZE =
0 x66,
PRE_SSE_66 =
0 x66,
OP_NOP_66 =
0 x66,
OP_PUSH_Iz =
0 x68,
OP_IMUL_GvEvIz =
0 x69,
OP_PUSH_Ib =
0 x6a,
OP_IMUL_GvEvIb =
0 x6b,
OP_JCC_rel8 =
0 x70,
OP_GROUP1_EbIb =
0 x80,
OP_NOP_80 =
0 x80,
OP_GROUP1_EvIz =
0 x81,
OP_GROUP1_EvIb =
0 x83,
OP_TEST_EbGb =
0 x84,
OP_NOP_84 =
0 x84,
OP_TEST_EvGv =
0 x85,
OP_XCHG_GbEb =
0 x86,
OP_XCHG_GvEv =
0 x87,
OP_MOV_EbGv =
0 x88,
OP_MOV_EvGv =
0 x89,
OP_MOV_GvEb =
0 x8A,
OP_MOV_GvEv =
0 x8B,
OP_LEA =
0 x8D,
OP_GROUP1A_Ev =
0 x8F,
OP_NOP =
0 x90,
OP_PUSHFLAGS =
0 x9C,
OP_POPFLAGS =
0 x9D,
OP_CDQ =
0 x99,
OP_MOV_EAXOv =
0 xA1,
OP_MOV_OvEAX =
0 xA3,
OP_TEST_EAXIb =
0 xA8,
OP_TEST_EAXIv =
0 xA9,
OP_MOV_EbIb =
0 xB0,
OP_MOV_EAXIv =
0 xB8,
OP_GROUP2_EvIb =
0 xC1,
OP_ADDP_ST0_ST1 =
0 xC1,
OP_RET_Iz =
0 xC2,
PRE_VEX_C4 =
0 xC4,
PRE_VEX_C5 =
0 xC5,
OP_RET =
0 xC3,
OP_GROUP11_EvIb =
0 xC6,
OP_GROUP11_EvIz =
0 xC7,
OP_INT3 =
0 xCC,
OP_GROUP2_Ev1 =
0 xD1,
OP_GROUP2_EvCL =
0 xD3,
OP_FPU6 =
0 xDD,
OP_FPU6_F32 =
0 xD9,
OP_FPU6_ADDP =
0 xDE,
OP_FILD =
0 xDF,
OP_CALL_rel32 =
0 xE8,
OP_JMP_rel32 =
0 xE9,
OP_JMP_rel8 =
0 xEB,
PRE_LOCK =
0 xF0,
PRE_SSE_F2 =
0 xF2,
PRE_SSE_F3 =
0 xF3,
PRE_REP =
0 xF3,
OP_HLT =
0 xF4,
OP_GROUP3_EbIb =
0 xF6,
OP_GROUP3_Ev =
0 xF7,
OP_GROUP3_EvIz =
0 xF7,
// OP_GROUP3_Ev has an immediate, when instruction is a test.
OP_GROUP5_Ev =
0 xFF
};
enum class ShiftID {
vpsrlx =
2 ,
vpsrldq =
3 ,
vpsrad =
4 ,
vpsllx =
6 ,
vpslldq =
7
};
enum TwoByteOpcodeID {
OP2_UD2 =
0 x0B,
OP2_MOVSD_VsdWsd =
0 x10,
OP2_MOVPS_VpsWps =
0 x10,
OP2_MOVSD_WsdVsd =
0 x11,
OP2_MOVPS_WpsVps =
0 x11,
OP2_MOVDDUP_VqWq =
0 x12,
OP2_MOVHLPS_VqUq =
0 x12,
OP2_MOVSLDUP_VpsWps =
0 x12,
OP2_MOVLPS_VqEq =
0 x12,
OP2_MOVLPS_EqVq =
0 x13,
OP2_UNPCKLPS_VsdWsd =
0 x14,
OP2_UNPCKHPS_VsdWsd =
0 x15,
OP2_MOVLHPS_VqUq =
0 x16,
OP2_MOVSHDUP_VpsWps =
0 x16,
OP2_MOVHPS_VqEq =
0 x16,
OP2_MOVHPS_EqVq =
0 x17,
OP2_MOVAPD_VsdWsd =
0 x28,
OP2_MOVAPS_VsdWsd =
0 x28,
OP2_MOVAPS_WsdVsd =
0 x29,
OP2_CVTSI2SD_VsdEd =
0 x2A,
OP2_CVTTSD2SI_GdWsd =
0 x2C,
OP2_UCOMISD_VsdWsd =
0 x2E,
OP2_CMOVCC_GvEv =
0 x40,
OP2_MOVMSKPD_EdVd =
0 x50,
OP2_ANDPS_VpsWps =
0 x54,
OP2_ANDNPS_VpsWps =
0 x55,
OP2_ORPS_VpsWps =
0 x56,
OP2_XORPS_VpsWps =
0 x57,
OP2_ADDSD_VsdWsd =
0 x58,
OP2_ADDPS_VpsWps =
0 x58,
OP2_ADDPD_VpdWpd =
0 x58,
OP2_MULSD_VsdWsd =
0 x59,
OP2_MULPD_VpdWpd =
0 x59,
OP2_MULPS_VpsWps =
0 x59,
OP2_CVTSS2SD_VsdEd =
0 x5A,
OP2_CVTSD2SS_VsdEd =
0 x5A,
OP2_CVTPS2PD_VpdWps =
0 x5A,
OP2_CVTPD2PS_VpsWpd =
0 x5A,
OP2_CVTTPS2DQ_VdqWps =
0 x5B,
OP2_CVTDQ2PS_VpsWdq =
0 x5B,
OP2_SUBSD_VsdWsd =
0 x5C,
OP2_SUBPS_VpsWps =
0 x5C,
OP2_SUBPD_VpdWpd =
0 x5C,
OP2_MINSD_VsdWsd =
0 x5D,
OP2_MINSS_VssWss =
0 x5D,
OP2_MINPS_VpsWps =
0 x5D,
OP2_MINPD_VpdWpd =
0 x5D,
OP2_DIVSD_VsdWsd =
0 x5E,
OP2_DIVPS_VpsWps =
0 x5E,
OP2_DIVPD_VpdWpd =
0 x5E,
OP2_MAXSD_VsdWsd =
0 x5F,
OP2_MAXSS_VssWss =
0 x5F,
OP2_MAXPS_VpsWps =
0 x5F,
OP2_MAXPD_VpdWpd =
0 x5F,
OP2_SQRTSD_VsdWsd =
0 x51,
OP2_SQRTSS_VssWss =
0 x51,
OP2_SQRTPS_VpsWps =
0 x51,
OP2_SQRTPD_VpdWpd =
0 x51,
OP2_RSQRTPS_VpsWps =
0 x52,
OP2_RCPPS_VpsWps =
0 x53,
OP2_ANDPD_VpdWpd =
0 x54,
OP2_ORPD_VpdWpd =
0 x56,
OP2_XORPD_VpdWpd =
0 x57,
OP2_PUNPCKLBW_VdqWdq =
0 x60,
OP2_PUNPCKLWD_VdqWdq =
0 x61,
OP2_PUNPCKLDQ_VdqWdq =
0 x62,
OP2_PACKSSWB_VdqWdq =
0 x63,
OP2_PCMPGTB_VdqWdq =
0 x64,
OP2_PCMPGTW_VdqWdq =
0 x65,
OP2_PCMPGTD_VdqWdq =
0 x66,
OP2_PACKUSWB_VdqWdq =
0 x67,
OP2_PUNPCKHBW_VdqWdq =
0 x68,
OP2_PUNPCKHWD_VdqWdq =
0 x69,
OP2_PUNPCKHDQ_VdqWdq =
0 x6A,
OP2_PACKSSDW_VdqWdq =
0 x6B,
OP2_PUNPCKLQDQ_VdqWdq =
0 x6C,
OP2_PUNPCKHQDQ_VdqWdq =
0 x6D,
OP2_MOVD_VdEd =
0 x6E,
OP2_MOVDQ_VsdWsd =
0 x6F,
OP2_MOVDQ_VdqWdq =
0 x6F,
OP2_PSHUFD_VdqWdqIb =
0 x70,
OP2_PSHUFLW_VdqWdqIb =
0 x70,
OP2_PSHUFHW_VdqWdqIb =
0 x70,
OP2_PSLLW_UdqIb =
0 x71,
OP2_PSRAW_UdqIb =
0 x71,
OP2_PSRLW_UdqIb =
0 x71,
OP2_PSLLD_UdqIb =
0 x72,
OP2_PSRAD_UdqIb =
0 x72,
OP2_PSRLD_UdqIb =
0 x72,
OP2_PSRLDQ_Vd =
0 x73,
OP2_PCMPEQB_VdqWdq =
0 x74,
OP2_PCMPEQW_VdqWdq =
0 x75,
OP2_PCMPEQD_VdqWdq =
0 x76,
OP2_HADDPD =
0 x7C,
OP2_MOVD_EdVd =
0 x7E,
OP2_MOVQ_VdWd =
0 x7E,
OP2_MOVDQ_WdqVdq =
0 x7F,
OP2_JCC_rel32 =
0 x80,
OP_SETCC =
0 x90,
OP2_SHLD =
0 xA4,
OP2_SHLD_GvEv =
0 xA5,
OP2_SHRD =
0 xAC,
OP2_SHRD_GvEv =
0 xAD,
OP_FENCE =
0 xAE,
OP2_IMUL_GvEv =
0 xAF,
OP2_CMPXCHG_GvEb =
0 xB0,
OP2_CMPXCHG_GvEw =
0 xB1,
OP2_POPCNT_GvEv =
0 xB8,
OP2_BSF_GvEv =
0 xBC,
OP2_TZCNT_GvEv =
0 xBC,
OP2_BSR_GvEv =
0 xBD,
OP2_LZCNT_GvEv =
0 xBD,
OP2_MOVSX_GvEb =
0 xBE,
OP2_MOVSX_GvEw =
0 xBF,
OP2_MOVZX_GvEb =
0 xB6,
OP2_MOVZX_GvEw =
0 xB7,
OP2_XADD_EbGb =
0 xC0,
OP2_XADD_EvGv =
0 xC1,
OP2_CMPPS_VpsWps =
0 xC2,
OP2_CMPPD_VpdWpd =
0 xC2,
OP2_PINSRW =
0 xC4,
OP2_PEXTRW_GdUdIb =
0 xC5,
OP2_SHUFPS_VpsWpsIb =
0 xC6,
OP2_SHUFPD_VpdWpdIb =
0 xC6,
OP2_CMPXCHGNB =
0 xC7,
// CMPXCHG8B; CMPXCHG16B with REX
OP2_BSWAP =
0 xC8,
OP2_PSRLW_VdqWdq =
0 xD1,
OP2_PSRLD_VdqWdq =
0 xD2,
OP2_PSRLQ_VdqWdq =
0 xD3,
OP2_PADDQ_VdqWdq =
0 xD4,
OP2_PMULLW_VdqWdq =
0 xD5,
OP2_MOVQ_WdVd =
0 xD6,
OP2_PMOVMSKB_EdVd =
0 xD7,
OP2_PSUBUSB_VdqWdq =
0 xD8,
OP2_PSUBUSW_VdqWdq =
0 xD9,
OP2_PMINUB_VdqWdq =
0 xDA,
OP2_PANDDQ_VdqWdq =
0 xDB,
OP2_PADDUSB_VdqWdq =
0 xDC,
OP2_PADDUSW_VdqWdq =
0 xDD,
OP2_PMAXUB_VdqWdq =
0 xDE,
OP2_PANDNDQ_VdqWdq =
0 xDF,
OP2_PAVGB_VdqWdq =
0 xE0,
OP2_PSRAW_VdqWdq =
0 xE1,
OP2_PSRAD_VdqWdq =
0 xE2,
OP2_PAVGW_VdqWdq =
0 xE3,
OP2_PMULHUW_VdqWdq =
0 xE4,
OP2_PMULHW_VdqWdq =
0 xE5,
OP2_CVTDQ2PD_VpdWdq =
0 xE6,
OP2_CVTTPD2DQ_VdqWpd =
0 xE6,
OP2_PSUBSB_VdqWdq =
0 xE8,
OP2_PSUBSW_VdqWdq =
0 xE9,
OP2_PMINSW_VdqWdq =
0 xEA,
OP2_PORDQ_VdqWdq =
0 xEB,
OP2_PADDSB_VdqWdq =
0 xEC,
OP2_PADDSW_VdqWdq =
0 xED,
OP2_PMAXSW_VdqWdq =
0 xEE,
OP2_PXORDQ_VdqWdq =
0 xEF,
OP2_PSLLW_VdqWdq =
0 xF1,
OP2_PSLLD_VdqWdq =
0 xF2,
OP2_PSLLQ_VdqWdq =
0 xF3,
OP2_PMULUDQ_VdqWdq =
0 xF4,
OP2_PMADDWD_VdqWdq =
0 xF5,
OP2_PSUBB_VdqWdq =
0 xF8,
OP2_PSUBW_VdqWdq =
0 xF9,
OP2_PSUBD_VdqWdq =
0 xFA,
OP2_PSUBQ_VdqWdq =
0 xFB,
OP2_PADDB_VdqWdq =
0 xFC,
OP2_PADDW_VdqWdq =
0 xFD,
OP2_PADDD_VdqWdq =
0 xFE
};
enum ThreeByteOpcodeID {
OP3_PSHUFB_VdqWdq =
0 x00,
OP3_PHADDD_VdqWdq =
0 x02,
OP3_PMADDUBSW_VdqWdq =
0 x04,
OP3_ROUNDPS_VpsWps =
0 x08,
OP3_ROUNDPD_VpdWpd =
0 x09,
OP3_ROUNDSS_VsdWsd =
0 x0A,
OP3_PSIGND_PdqQdq =
0 x0A,
OP3_ROUNDSD_VsdWsd =
0 x0B,
OP3_PMULHRSW_VdqWdq =
0 x0B,
OP3_BLENDPS_VpsWpsIb =
0 x0C,
OP3_PBLENDW_VdqWdqIb =
0 x0E,
OP3_PALIGNR_VdqWdqIb =
0 x0F,
OP3_PBLENDVB_VdqWdq =
0 x10,
OP3_VCVTPH2PS_VxWxIb =
0 x13,
OP3_BLENDVPS_VdqWdq =
0 x14,
OP3_PEXTRB_EvVdqIb =
0 x14,
OP3_PEXTRW_EwVdqIb =
0 x15,
OP3_BLENDVPD_VdqWdq =
0 x15,
OP3_PEXTRD_EvVdqIb =
0 x16,
OP3_PEXTRQ_EvVdqIb =
0 x16,
OP3_PTEST_VdVd =
0 x17,
OP3_EXTRACTPS_EdVdqIb =
0 x17,
OP3_VBROADCASTSS_VxWd =
0 x18,
OP3_PABSB_VdqWdq =
0 x1C,
OP3_PABSW_VdqWdq =
0 x1D,
OP3_VCVTPS2PH_WxVxIb =
0 x1D,
OP3_PABSD_VdqWdq =
0 x1E,
OP3_PINSRB_VdqEvIb =
0 x20,
OP3_PMOVSXBW_VdqWdq =
0 x20,
OP3_INSERTPS_VpsUps =
0 x21,
OP3_PINSRD_VdqEvIb =
0 x22,
OP3_PINSRQ_VdqEvIb =
0 x22,
OP3_PMOVSXWD_VdqWdq =
0 x23,
OP3_PMOVSXDQ_VdqWdq =
0 x25,
OP3_PMULDQ_VdqWdq =
0 x28,
OP3_PCMPEQQ_VdqWdq =
0 x29,
OP3_PACKUSDW_VdqWdq =
0 x2B,
OP3_PMOVZXBW_VdqWdq =
0 x30,
OP3_PMOVZXBD_VdqWdq =
0 x31,
OP3_PMOVZXBQ_VdqWdq =
0 x32,
OP3_PMOVZXWD_VdqWdq =
0 x33,
OP3_PMOVZXWQ_VdqWdq =
0 x34,
OP3_PMOVZXDQ_VdqWdq =
0 x35,
OP3_PCMPGTQ_VdqWdq =
0 x37,
OP3_PMINSB_VdqWdq =
0 x38,
OP3_PMINSD_VdqWdq =
0 x39,
OP3_PMINUW_VdqWdq =
0 x3A,
OP3_PMINUD_VdqWdq =
0 x3B,
OP3_PMAXSB_VdqWdq =
0 x3C,
OP3_PMAXSD_VdqWdq =
0 x3D,
OP3_PMAXUW_VdqWdq =
0 x3E,
OP3_PMAXUD_VdqWdq =
0 x3F,
OP3_PMULLD_VdqWdq =
0 x40,
OP3_VBLENDVPS_VdqWdq =
0 x4A,
OP3_VBLENDVPD_VdqWdq =
0 x4B,
OP3_VPBLENDVB_VdqWdq =
0 x4C,
OP3_VBROADCASTD_VxWx =
0 x58,
OP3_VBROADCASTQ_VxWx =
0 x59,
OP3_VBROADCASTB_VxWx =
0 x78,
OP3_VBROADCASTW_VxWx =
0 x79,
OP3_VFMADD231PS_VxHxWx =
0 xB8,
OP3_VFMADD231PD_VxHxWx =
0 xB8,
OP3_VFNMADD231PS_VxHxWx =
0 xBC,
OP3_VFNMADD231PD_VxHxWx =
0 xBC,
OP3_SHLX_GyEyBy =
0 xF7,
OP3_SARX_GyEyBy =
0 xF7,
OP3_SHRX_GyEyBy =
0 xF7,
};
// Test whether the given opcode should be printed with its operands reversed.
inline bool IsXMMReversedOperands(TwoByteOpcodeID opcode) {
switch (opcode) {
case OP2_MOVSD_WsdVsd:
// also OP2_MOVPS_WpsVps
case OP2_MOVAPS_WsdVsd:
case OP2_MOVDQ_WdqVdq:
return true ;
default :
break ;
}
return false ;
}
enum ThreeByteEscape { ESCAPE_38 =
0 x38, ESCAPE_3A =
0 x3A };
enum VexOperandType { VEX_PS =
0 , VEX_PD =
1 , VEX_SS =
2 , VEX_SD =
3 };
inline OneByteOpcodeID jccRel8(Condition cond) {
return OneByteOpcodeID(OP_JCC_rel8 + std::underlying_type_t<Condition>(cond));
}
inline TwoByteOpcodeID jccRel32(Condition cond) {
return TwoByteOpcodeID(OP2_JCC_rel32 +
std::underlying_type_t<Condition>(cond));
}
inline TwoByteOpcodeID setccOpcode(Condition cond) {
return TwoByteOpcodeID(OP_SETCC + std::underlying_type_t<Condition>(cond));
}
inline TwoByteOpcodeID cmovccOpcode(Condition cond) {
return TwoByteOpcodeID(OP2_CMOVCC_GvEv +
std::underlying_type_t<Condition>(cond));
}
enum GroupOpcodeID {
GROUP1_OP_ADD =
0 ,
GROUP1_OP_OR =
1 ,
GROUP1_OP_ADC =
2 ,
GROUP1_OP_SBB =
3 ,
GROUP1_OP_AND =
4 ,
GROUP1_OP_SUB =
5 ,
GROUP1_OP_XOR =
6 ,
GROUP1_OP_CMP =
7 ,
GROUP1A_OP_POP =
0 ,
GROUP2_OP_ROL =
0 ,
GROUP2_OP_ROR =
1 ,
GROUP2_OP_SHL =
4 ,
GROUP2_OP_SHR =
5 ,
GROUP2_OP_SAR =
7 ,
GROUP3_OP_TEST =
0 ,
GROUP3_OP_NOT =
2 ,
GROUP3_OP_NEG =
3 ,
GROUP3_OP_MUL =
4 ,
GROUP3_OP_IMUL =
5 ,
GROUP3_OP_DIV =
6 ,
GROUP3_OP_IDIV =
7 ,
GROUP5_OP_INC =
0 ,
GROUP5_OP_DEC =
1 ,
GROUP5_OP_CALLN =
2 ,
GROUP5_OP_JMPN =
4 ,
GROUP5_OP_PUSH =
6 ,
FILD_OP_64 =
5 ,
FPU6_OP_FLD =
0 ,
FPU6_OP_FISTTP =
1 ,
FPU6_OP_FSTP =
3 ,
FPU6_OP_FLDCW =
5 ,
FPU6_OP_FISTP =
7 ,
GROUP11_MOV =
0
};
static const RegisterID noBase = rbp;
static const RegisterID hasSib = rsp;
static const RegisterID noIndex = rsp;
#ifdef JS_CODEGEN_X64
static const RegisterID noBase2 = r13;
static const RegisterID hasSib2 = r12;
#endif
enum ModRmMode {
ModRmMemoryNoDisp,
ModRmMemoryDisp8,
ModRmMemoryDisp32,
ModRmRegister
};
}
// namespace X86Encoding
}
// namespace jit
}
// namespace js
#endif /* jit_x86_shared_Encoding_x86_shared_h */
Messung V0.5 in Prozent C=91 H=100 G=95
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland