169e0a03cSPaolo Bonzini /* 269e0a03cSPaolo Bonzini * Copyright (C) 2016 Veertu Inc, 369e0a03cSPaolo Bonzini * 469e0a03cSPaolo Bonzini * This program is free software; you can redistribute it and/or 569e0a03cSPaolo Bonzini * modify it under the terms of the GNU Lesser General Public 669e0a03cSPaolo Bonzini * License as published by the Free Software Foundation; either 7*8af82b8eSChetan Pant * version 2.1 of the License, or (at your option) any later version. 869e0a03cSPaolo Bonzini * 969e0a03cSPaolo Bonzini * This program is distributed in the hope that it will be useful, 1069e0a03cSPaolo Bonzini * but WITHOUT ANY WARRANTY; without even the implied warranty of 1169e0a03cSPaolo Bonzini * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1269e0a03cSPaolo Bonzini * Lesser General Public License for more details. 1369e0a03cSPaolo Bonzini * 1469e0a03cSPaolo Bonzini * You should have received a copy of the GNU Lesser General Public 1569e0a03cSPaolo Bonzini * License along with this program; if not, see <http://www.gnu.org/licenses/>. 1669e0a03cSPaolo Bonzini */ 1769e0a03cSPaolo Bonzini 18f9fea777SPaolo Bonzini #ifndef HVF_X86_DECODE_H 19177d9e0dSMarkus Armbruster #define HVF_X86_DECODE_H 2069e0a03cSPaolo Bonzini 2169e0a03cSPaolo Bonzini #include "cpu.h" 22f9fea777SPaolo Bonzini #include "x86.h" 2369e0a03cSPaolo Bonzini 2469e0a03cSPaolo Bonzini typedef enum x86_prefix { 2569e0a03cSPaolo Bonzini /* group 1 */ 2669e0a03cSPaolo Bonzini PREFIX_LOCK = 0xf0, 2769e0a03cSPaolo Bonzini PREFIX_REPN = 0xf2, 2869e0a03cSPaolo Bonzini PREFIX_REP = 0xf3, 2969e0a03cSPaolo Bonzini /* group 2 */ 308c3b0e9eSCameron Esfahani PREFIX_CS_SEG_OVERRIDE = 0x2e, 318c3b0e9eSCameron Esfahani PREFIX_SS_SEG_OVERRIDE = 0x36, 328c3b0e9eSCameron Esfahani PREFIX_DS_SEG_OVERRIDE = 0x3e, 338c3b0e9eSCameron Esfahani PREFIX_ES_SEG_OVERRIDE = 0x26, 348c3b0e9eSCameron Esfahani PREFIX_FS_SEG_OVERRIDE = 0x64, 358c3b0e9eSCameron Esfahani PREFIX_GS_SEG_OVERRIDE = 0x65, 3669e0a03cSPaolo Bonzini /* group 3 */ 3769e0a03cSPaolo Bonzini PREFIX_OP_SIZE_OVERRIDE = 0x66, 3869e0a03cSPaolo Bonzini /* group 4 */ 3969e0a03cSPaolo Bonzini PREFIX_ADDR_SIZE_OVERRIDE = 0x67, 4069e0a03cSPaolo Bonzini 4169e0a03cSPaolo Bonzini PREFIX_REX = 0x40, 4269e0a03cSPaolo Bonzini } x86_prefix; 4369e0a03cSPaolo Bonzini 4469e0a03cSPaolo Bonzini enum x86_decode_cmd { 4569e0a03cSPaolo Bonzini X86_DECODE_CMD_INVL = 0, 4669e0a03cSPaolo Bonzini 4769e0a03cSPaolo Bonzini X86_DECODE_CMD_PUSH, 4869e0a03cSPaolo Bonzini X86_DECODE_CMD_PUSH_SEG, 4969e0a03cSPaolo Bonzini X86_DECODE_CMD_POP, 5069e0a03cSPaolo Bonzini X86_DECODE_CMD_POP_SEG, 5169e0a03cSPaolo Bonzini X86_DECODE_CMD_MOV, 5269e0a03cSPaolo Bonzini X86_DECODE_CMD_MOVSX, 5369e0a03cSPaolo Bonzini X86_DECODE_CMD_MOVZX, 5469e0a03cSPaolo Bonzini X86_DECODE_CMD_CALL_NEAR, 5569e0a03cSPaolo Bonzini X86_DECODE_CMD_CALL_NEAR_ABS_INDIRECT, 5669e0a03cSPaolo Bonzini X86_DECODE_CMD_CALL_FAR_ABS_INDIRECT, 5769e0a03cSPaolo Bonzini X86_DECODE_CMD_CALL_FAR, 5869e0a03cSPaolo Bonzini X86_DECODE_RET_NEAR, 5969e0a03cSPaolo Bonzini X86_DECODE_RET_FAR, 6069e0a03cSPaolo Bonzini X86_DECODE_CMD_ADD, 6169e0a03cSPaolo Bonzini X86_DECODE_CMD_OR, 6269e0a03cSPaolo Bonzini X86_DECODE_CMD_ADC, 6369e0a03cSPaolo Bonzini X86_DECODE_CMD_SBB, 6469e0a03cSPaolo Bonzini X86_DECODE_CMD_AND, 6569e0a03cSPaolo Bonzini X86_DECODE_CMD_SUB, 6669e0a03cSPaolo Bonzini X86_DECODE_CMD_XOR, 6769e0a03cSPaolo Bonzini X86_DECODE_CMD_CMP, 6869e0a03cSPaolo Bonzini X86_DECODE_CMD_INC, 6969e0a03cSPaolo Bonzini X86_DECODE_CMD_DEC, 7069e0a03cSPaolo Bonzini X86_DECODE_CMD_TST, 7169e0a03cSPaolo Bonzini X86_DECODE_CMD_NOT, 7269e0a03cSPaolo Bonzini X86_DECODE_CMD_NEG, 7369e0a03cSPaolo Bonzini X86_DECODE_CMD_JMP_NEAR, 7469e0a03cSPaolo Bonzini X86_DECODE_CMD_JMP_NEAR_ABS_INDIRECT, 7569e0a03cSPaolo Bonzini X86_DECODE_CMD_JMP_FAR, 7669e0a03cSPaolo Bonzini X86_DECODE_CMD_JMP_FAR_ABS_INDIRECT, 7769e0a03cSPaolo Bonzini X86_DECODE_CMD_LEA, 7869e0a03cSPaolo Bonzini X86_DECODE_CMD_JXX, 7969e0a03cSPaolo Bonzini X86_DECODE_CMD_JCXZ, 8069e0a03cSPaolo Bonzini X86_DECODE_CMD_SETXX, 8169e0a03cSPaolo Bonzini X86_DECODE_CMD_MOV_TO_SEG, 8269e0a03cSPaolo Bonzini X86_DECODE_CMD_MOV_FROM_SEG, 8369e0a03cSPaolo Bonzini X86_DECODE_CMD_CLI, 8469e0a03cSPaolo Bonzini X86_DECODE_CMD_STI, 8569e0a03cSPaolo Bonzini X86_DECODE_CMD_CLD, 8669e0a03cSPaolo Bonzini X86_DECODE_CMD_STD, 8769e0a03cSPaolo Bonzini X86_DECODE_CMD_STC, 8869e0a03cSPaolo Bonzini X86_DECODE_CMD_CLC, 8969e0a03cSPaolo Bonzini X86_DECODE_CMD_OUT, 9069e0a03cSPaolo Bonzini X86_DECODE_CMD_IN, 9169e0a03cSPaolo Bonzini X86_DECODE_CMD_INS, 9269e0a03cSPaolo Bonzini X86_DECODE_CMD_OUTS, 9369e0a03cSPaolo Bonzini X86_DECODE_CMD_LIDT, 9469e0a03cSPaolo Bonzini X86_DECODE_CMD_SIDT, 9569e0a03cSPaolo Bonzini X86_DECODE_CMD_LGDT, 9669e0a03cSPaolo Bonzini X86_DECODE_CMD_SGDT, 9769e0a03cSPaolo Bonzini X86_DECODE_CMD_SMSW, 9869e0a03cSPaolo Bonzini X86_DECODE_CMD_LMSW, 9969e0a03cSPaolo Bonzini X86_DECODE_CMD_RDTSCP, 10069e0a03cSPaolo Bonzini X86_DECODE_CMD_INVLPG, 10169e0a03cSPaolo Bonzini X86_DECODE_CMD_MOV_TO_CR, 10269e0a03cSPaolo Bonzini X86_DECODE_CMD_MOV_FROM_CR, 10369e0a03cSPaolo Bonzini X86_DECODE_CMD_MOV_TO_DR, 10469e0a03cSPaolo Bonzini X86_DECODE_CMD_MOV_FROM_DR, 10569e0a03cSPaolo Bonzini X86_DECODE_CMD_PUSHF, 10669e0a03cSPaolo Bonzini X86_DECODE_CMD_POPF, 10769e0a03cSPaolo Bonzini X86_DECODE_CMD_CPUID, 10869e0a03cSPaolo Bonzini X86_DECODE_CMD_ROL, 10969e0a03cSPaolo Bonzini X86_DECODE_CMD_ROR, 11069e0a03cSPaolo Bonzini X86_DECODE_CMD_RCL, 11169e0a03cSPaolo Bonzini X86_DECODE_CMD_RCR, 11269e0a03cSPaolo Bonzini X86_DECODE_CMD_SHL, 11369e0a03cSPaolo Bonzini X86_DECODE_CMD_SAL, 11469e0a03cSPaolo Bonzini X86_DECODE_CMD_SHR, 11569e0a03cSPaolo Bonzini X86_DECODE_CMD_SHRD, 11669e0a03cSPaolo Bonzini X86_DECODE_CMD_SHLD, 11769e0a03cSPaolo Bonzini X86_DECODE_CMD_SAR, 11869e0a03cSPaolo Bonzini X86_DECODE_CMD_DIV, 11969e0a03cSPaolo Bonzini X86_DECODE_CMD_IDIV, 12069e0a03cSPaolo Bonzini X86_DECODE_CMD_MUL, 12169e0a03cSPaolo Bonzini X86_DECODE_CMD_IMUL_3, 12269e0a03cSPaolo Bonzini X86_DECODE_CMD_IMUL_2, 12369e0a03cSPaolo Bonzini X86_DECODE_CMD_IMUL_1, 12469e0a03cSPaolo Bonzini X86_DECODE_CMD_MOVS, 12569e0a03cSPaolo Bonzini X86_DECODE_CMD_CMPS, 12669e0a03cSPaolo Bonzini X86_DECODE_CMD_SCAS, 12769e0a03cSPaolo Bonzini X86_DECODE_CMD_LODS, 12869e0a03cSPaolo Bonzini X86_DECODE_CMD_STOS, 12969e0a03cSPaolo Bonzini X86_DECODE_CMD_BSWAP, 13069e0a03cSPaolo Bonzini X86_DECODE_CMD_XCHG, 13169e0a03cSPaolo Bonzini X86_DECODE_CMD_RDTSC, 13269e0a03cSPaolo Bonzini X86_DECODE_CMD_RDMSR, 13369e0a03cSPaolo Bonzini X86_DECODE_CMD_WRMSR, 13469e0a03cSPaolo Bonzini X86_DECODE_CMD_ENTER, 13569e0a03cSPaolo Bonzini X86_DECODE_CMD_LEAVE, 13669e0a03cSPaolo Bonzini X86_DECODE_CMD_BT, 13769e0a03cSPaolo Bonzini X86_DECODE_CMD_BTS, 13869e0a03cSPaolo Bonzini X86_DECODE_CMD_BTC, 13969e0a03cSPaolo Bonzini X86_DECODE_CMD_BTR, 14069e0a03cSPaolo Bonzini X86_DECODE_CMD_BSF, 14169e0a03cSPaolo Bonzini X86_DECODE_CMD_BSR, 14269e0a03cSPaolo Bonzini X86_DECODE_CMD_IRET, 14369e0a03cSPaolo Bonzini X86_DECODE_CMD_INT, 14469e0a03cSPaolo Bonzini X86_DECODE_CMD_POPA, 14569e0a03cSPaolo Bonzini X86_DECODE_CMD_PUSHA, 14669e0a03cSPaolo Bonzini X86_DECODE_CMD_CWD, 14769e0a03cSPaolo Bonzini X86_DECODE_CMD_CBW, 14869e0a03cSPaolo Bonzini X86_DECODE_CMD_DAS, 14969e0a03cSPaolo Bonzini X86_DECODE_CMD_AAD, 15069e0a03cSPaolo Bonzini X86_DECODE_CMD_AAM, 15169e0a03cSPaolo Bonzini X86_DECODE_CMD_AAS, 15269e0a03cSPaolo Bonzini X86_DECODE_CMD_LOOP, 15369e0a03cSPaolo Bonzini X86_DECODE_CMD_SLDT, 15469e0a03cSPaolo Bonzini X86_DECODE_CMD_STR, 15569e0a03cSPaolo Bonzini X86_DECODE_CMD_LLDT, 15669e0a03cSPaolo Bonzini X86_DECODE_CMD_LTR, 15769e0a03cSPaolo Bonzini X86_DECODE_CMD_VERR, 15869e0a03cSPaolo Bonzini X86_DECODE_CMD_VERW, 15969e0a03cSPaolo Bonzini X86_DECODE_CMD_SAHF, 16069e0a03cSPaolo Bonzini X86_DECODE_CMD_LAHF, 16169e0a03cSPaolo Bonzini X86_DECODE_CMD_WBINVD, 16269e0a03cSPaolo Bonzini X86_DECODE_CMD_LDS, 16369e0a03cSPaolo Bonzini X86_DECODE_CMD_LSS, 16469e0a03cSPaolo Bonzini X86_DECODE_CMD_LES, 16569e0a03cSPaolo Bonzini X86_DECODE_XMD_LGS, 16669e0a03cSPaolo Bonzini X86_DECODE_CMD_LFS, 16769e0a03cSPaolo Bonzini X86_DECODE_CMD_CMC, 16869e0a03cSPaolo Bonzini X86_DECODE_CMD_XLAT, 16969e0a03cSPaolo Bonzini X86_DECODE_CMD_NOP, 17069e0a03cSPaolo Bonzini X86_DECODE_CMD_CMOV, 17169e0a03cSPaolo Bonzini X86_DECODE_CMD_CLTS, 17269e0a03cSPaolo Bonzini X86_DECODE_CMD_XADD, 17369e0a03cSPaolo Bonzini X86_DECODE_CMD_HLT, 17469e0a03cSPaolo Bonzini X86_DECODE_CMD_CMPXCHG8B, 17569e0a03cSPaolo Bonzini X86_DECODE_CMD_CMPXCHG, 17669e0a03cSPaolo Bonzini X86_DECODE_CMD_POPCNT, 17769e0a03cSPaolo Bonzini 17869e0a03cSPaolo Bonzini X86_DECODE_CMD_FNINIT, 17969e0a03cSPaolo Bonzini X86_DECODE_CMD_FLD, 18069e0a03cSPaolo Bonzini X86_DECODE_CMD_FLDxx, 18169e0a03cSPaolo Bonzini X86_DECODE_CMD_FNSTCW, 18269e0a03cSPaolo Bonzini X86_DECODE_CMD_FNSTSW, 18369e0a03cSPaolo Bonzini X86_DECODE_CMD_FNSETPM, 18469e0a03cSPaolo Bonzini X86_DECODE_CMD_FSAVE, 18569e0a03cSPaolo Bonzini X86_DECODE_CMD_FRSTOR, 18669e0a03cSPaolo Bonzini X86_DECODE_CMD_FXSAVE, 18769e0a03cSPaolo Bonzini X86_DECODE_CMD_FXRSTOR, 18869e0a03cSPaolo Bonzini X86_DECODE_CMD_FDIV, 18969e0a03cSPaolo Bonzini X86_DECODE_CMD_FMUL, 19069e0a03cSPaolo Bonzini X86_DECODE_CMD_FSUB, 19169e0a03cSPaolo Bonzini X86_DECODE_CMD_FADD, 19269e0a03cSPaolo Bonzini X86_DECODE_CMD_EMMS, 19369e0a03cSPaolo Bonzini X86_DECODE_CMD_MFENCE, 19469e0a03cSPaolo Bonzini X86_DECODE_CMD_SFENCE, 19569e0a03cSPaolo Bonzini X86_DECODE_CMD_LFENCE, 19669e0a03cSPaolo Bonzini X86_DECODE_CMD_PREFETCH, 19769e0a03cSPaolo Bonzini X86_DECODE_CMD_CLFLUSH, 19869e0a03cSPaolo Bonzini X86_DECODE_CMD_FST, 19969e0a03cSPaolo Bonzini X86_DECODE_CMD_FABS, 20069e0a03cSPaolo Bonzini X86_DECODE_CMD_FUCOM, 20169e0a03cSPaolo Bonzini X86_DECODE_CMD_FUCOMI, 20269e0a03cSPaolo Bonzini X86_DECODE_CMD_FLDCW, 20369e0a03cSPaolo Bonzini X86_DECODE_CMD_FXCH, 20469e0a03cSPaolo Bonzini X86_DECODE_CMD_FCHS, 20569e0a03cSPaolo Bonzini X86_DECODE_CMD_FCMOV, 20669e0a03cSPaolo Bonzini X86_DECODE_CMD_FRNDINT, 20769e0a03cSPaolo Bonzini X86_DECODE_CMD_FXAM, 20869e0a03cSPaolo Bonzini 20969e0a03cSPaolo Bonzini X86_DECODE_CMD_LAST, 21069e0a03cSPaolo Bonzini }; 21169e0a03cSPaolo Bonzini 21269e0a03cSPaolo Bonzini const char *decode_cmd_to_string(enum x86_decode_cmd cmd); 21369e0a03cSPaolo Bonzini 21469e0a03cSPaolo Bonzini typedef struct x86_modrm { 21569e0a03cSPaolo Bonzini union { 21669e0a03cSPaolo Bonzini uint8_t modrm; 21769e0a03cSPaolo Bonzini struct { 21869e0a03cSPaolo Bonzini uint8_t rm:3; 21969e0a03cSPaolo Bonzini uint8_t reg:3; 22069e0a03cSPaolo Bonzini uint8_t mod:2; 22169e0a03cSPaolo Bonzini }; 22269e0a03cSPaolo Bonzini }; 22369e0a03cSPaolo Bonzini } __attribute__ ((__packed__)) x86_modrm; 22469e0a03cSPaolo Bonzini 22569e0a03cSPaolo Bonzini typedef struct x86_sib { 22669e0a03cSPaolo Bonzini union { 22769e0a03cSPaolo Bonzini uint8_t sib; 22869e0a03cSPaolo Bonzini struct { 22969e0a03cSPaolo Bonzini uint8_t base:3; 23069e0a03cSPaolo Bonzini uint8_t index:3; 23169e0a03cSPaolo Bonzini uint8_t scale:2; 23269e0a03cSPaolo Bonzini }; 23369e0a03cSPaolo Bonzini }; 23469e0a03cSPaolo Bonzini } __attribute__ ((__packed__)) x86_sib; 23569e0a03cSPaolo Bonzini 23669e0a03cSPaolo Bonzini typedef struct x86_rex { 23769e0a03cSPaolo Bonzini union { 23869e0a03cSPaolo Bonzini uint8_t rex; 23969e0a03cSPaolo Bonzini struct { 24069e0a03cSPaolo Bonzini uint8_t b:1; 24169e0a03cSPaolo Bonzini uint8_t x:1; 24269e0a03cSPaolo Bonzini uint8_t r:1; 24369e0a03cSPaolo Bonzini uint8_t w:1; 24469e0a03cSPaolo Bonzini uint8_t unused:4; 24569e0a03cSPaolo Bonzini }; 24669e0a03cSPaolo Bonzini }; 24769e0a03cSPaolo Bonzini } __attribute__ ((__packed__)) x86_rex; 24869e0a03cSPaolo Bonzini 24969e0a03cSPaolo Bonzini typedef enum x86_var_type { 25069e0a03cSPaolo Bonzini X86_VAR_IMMEDIATE, 25169e0a03cSPaolo Bonzini X86_VAR_OFFSET, 25269e0a03cSPaolo Bonzini X86_VAR_REG, 25369e0a03cSPaolo Bonzini X86_VAR_RM, 25469e0a03cSPaolo Bonzini 25569e0a03cSPaolo Bonzini /* for floating point computations */ 25669e0a03cSPaolo Bonzini X87_VAR_REG, 25769e0a03cSPaolo Bonzini X87_VAR_FLOATP, 25869e0a03cSPaolo Bonzini X87_VAR_INTP, 25969e0a03cSPaolo Bonzini X87_VAR_BYTEP, 26069e0a03cSPaolo Bonzini } x86_var_type; 26169e0a03cSPaolo Bonzini 26269e0a03cSPaolo Bonzini typedef struct x86_decode_op { 26369e0a03cSPaolo Bonzini enum x86_var_type type; 26469e0a03cSPaolo Bonzini int size; 26569e0a03cSPaolo Bonzini 26669e0a03cSPaolo Bonzini int reg; 267ff2de166SPaolo Bonzini target_ulong val; 26869e0a03cSPaolo Bonzini 269ff2de166SPaolo Bonzini target_ulong ptr; 27069e0a03cSPaolo Bonzini } x86_decode_op; 27169e0a03cSPaolo Bonzini 27269e0a03cSPaolo Bonzini typedef struct x86_decode { 27369e0a03cSPaolo Bonzini int len; 27469e0a03cSPaolo Bonzini uint8_t opcode[4]; 27569e0a03cSPaolo Bonzini uint8_t opcode_len; 27669e0a03cSPaolo Bonzini enum x86_decode_cmd cmd; 27769e0a03cSPaolo Bonzini int addressing_size; 27869e0a03cSPaolo Bonzini int operand_size; 27969e0a03cSPaolo Bonzini int lock; 28069e0a03cSPaolo Bonzini int rep; 28169e0a03cSPaolo Bonzini int op_size_override; 28269e0a03cSPaolo Bonzini int addr_size_override; 28369e0a03cSPaolo Bonzini int segment_override; 28469e0a03cSPaolo Bonzini int control_change_inst; 28569e0a03cSPaolo Bonzini bool fwait; 28669e0a03cSPaolo Bonzini bool fpop_stack; 28769e0a03cSPaolo Bonzini bool frev; 28869e0a03cSPaolo Bonzini 28969e0a03cSPaolo Bonzini uint32_t displacement; 29069e0a03cSPaolo Bonzini uint8_t displacement_size; 29169e0a03cSPaolo Bonzini struct x86_rex rex; 29269e0a03cSPaolo Bonzini bool is_modrm; 29369e0a03cSPaolo Bonzini bool sib_present; 29469e0a03cSPaolo Bonzini struct x86_sib sib; 29569e0a03cSPaolo Bonzini struct x86_modrm modrm; 29669e0a03cSPaolo Bonzini struct x86_decode_op op[4]; 29769e0a03cSPaolo Bonzini bool is_fpu; 298ff2de166SPaolo Bonzini uint32_t flags_mask; 29969e0a03cSPaolo Bonzini 30069e0a03cSPaolo Bonzini } x86_decode; 30169e0a03cSPaolo Bonzini 30269e0a03cSPaolo Bonzini uint64_t sign(uint64_t val, int size); 30369e0a03cSPaolo Bonzini 30469e0a03cSPaolo Bonzini uint32_t decode_instruction(CPUX86State *env, struct x86_decode *decode); 30569e0a03cSPaolo Bonzini 3068c3b0e9eSCameron Esfahani target_ulong get_reg_ref(CPUX86State *env, int reg, int rex_present, 3078c3b0e9eSCameron Esfahani int is_extended, int size); 3088c3b0e9eSCameron Esfahani target_ulong get_reg_val(CPUX86State *env, int reg, int rex_present, 3098c3b0e9eSCameron Esfahani int is_extended, int size); 31069e0a03cSPaolo Bonzini void calc_modrm_operand(CPUX86State *env, struct x86_decode *decode, 31169e0a03cSPaolo Bonzini struct x86_decode_op *op); 312ff2de166SPaolo Bonzini target_ulong decode_linear_addr(CPUX86State *env, struct x86_decode *decode, 313ff2de166SPaolo Bonzini target_ulong addr, enum X86Seg seg); 31469e0a03cSPaolo Bonzini 31569e0a03cSPaolo Bonzini void init_decoder(void); 31669e0a03cSPaolo Bonzini void calc_modrm_operand16(CPUX86State *env, struct x86_decode *decode, 31769e0a03cSPaolo Bonzini struct x86_decode_op *op); 31869e0a03cSPaolo Bonzini void calc_modrm_operand32(CPUX86State *env, struct x86_decode *decode, 31969e0a03cSPaolo Bonzini struct x86_decode_op *op); 32069e0a03cSPaolo Bonzini void calc_modrm_operand64(CPUX86State *env, struct x86_decode *decode, 32169e0a03cSPaolo Bonzini struct x86_decode_op *op); 32269e0a03cSPaolo Bonzini void set_addressing_size(CPUX86State *env, struct x86_decode *decode); 32369e0a03cSPaolo Bonzini void set_operand_size(CPUX86State *env, struct x86_decode *decode); 324f9fea777SPaolo Bonzini 325f9fea777SPaolo Bonzini #endif 326