Changeset 65774 in vbox
- Timestamp:
- Feb 13, 2017 3:45:53 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r65773 r65774 2959 2959 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2960 2960 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 2961 {2962 2961 /* register, register */ 2963 return FNIEMOP_CALL_1(g_apfnGroup12RegReg[((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) * 4 + pVCpu->iem.s.idxPrefix], bRm); 2964 } 2965 2966 /** @todo decode SIB, disp? */ 2962 return FNIEMOP_CALL_1(g_apfnGroup12RegReg[ ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) * 4 2963 + pVCpu->iem.s.idxPrefix], bRm); 2964 /** @todo decode SIB, disp, Ib? */ 2967 2965 return IEMOP_RAISE_INVALID_OPCODE(); 2968 2966 } … … 2973 2971 2974 2972 /** Opcode 0x66 0x0f 0x72 11/2. */ 2975 FNIEMOP_STUB_1(iemOp_Grp13_ psrld_Udq_Ib, uint8_t, bRm);2973 FNIEMOP_STUB_1(iemOp_Grp13_vpsrld_Hx_Ux_Ib, uint8_t, bRm); 2976 2974 2977 2975 /** Opcode 0x0f 0x72 11/4. */ … … 2979 2977 2980 2978 /** Opcode 0x66 0x0f 0x72 11/4. */ 2981 FNIEMOP_STUB_1(iemOp_Grp13_ psrad_Udq_Ib, uint8_t, bRm);2979 FNIEMOP_STUB_1(iemOp_Grp13_vpsrad_Hx_Ux_Ib, uint8_t, bRm); 2982 2980 2983 2981 /** Opcode 0x0f 0x72 11/6. */ … … 2985 2983 2986 2984 /** Opcode 0x66 0x0f 0x72 11/6. */ 2987 FNIEMOP_STUB_1(iemOp_Grp13_pslld_Udq_Ib, uint8_t, bRm); 2988 2985 FNIEMOP_STUB_1(iemOp_Grp13_vpslld_Hx_Ux_Ib, uint8_t, bRm); 2986 2987 2988 /** 2989 * Group 13 jump table for register variant. 2990 */ 2991 IEM_STATIC const PFNIEMOPRM g_apfnGroup13RegReg[8*4] = 2992 { 2993 /** @todo decode imm8? */ 2994 /* /0 */ IEMOP_X4(iemOp_InvalidWithRM), 2995 /* /1 */ IEMOP_X4(iemOp_InvalidWithRM), 2996 /* /2 */ iemOp_Grp13_psrld_Nq_Ib, iemOp_Grp13_vpsrld_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM, 2997 /* /3 */ IEMOP_X4(iemOp_InvalidWithRM), 2998 /* /4 */ iemOp_Grp13_psrad_Nq_Ib, iemOp_Grp13_vpsrad_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM, 2999 /* /5 */ IEMOP_X4(iemOp_InvalidWithRM), 3000 /* /6 */ iemOp_Grp13_pslld_Nq_Ib, iemOp_Grp13_vpslld_Hx_Ux_Ib, iemOp_InvalidWithRM, iemOp_InvalidWithRM, 3001 /* /7 */ IEMOP_X4(iemOp_InvalidWithRM) 3002 }; 2989 3003 2990 3004 /** Opcode 0x0f 0x72. */ … … 2992 3006 { 2993 3007 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2994 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 2995 return IEMOP_RAISE_INVALID_OPCODE(); 2996 switch ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) 2997 { 2998 case 0: case 1: case 3: case 5: case 7: 2999 return IEMOP_RAISE_INVALID_OPCODE(); 3000 case 2: 3001 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3002 { 3003 case 0: return FNIEMOP_CALL_1(iemOp_Grp13_psrld_Nq_Ib, bRm); 3004 case IEM_OP_PRF_SIZE_OP: return FNIEMOP_CALL_1(iemOp_Grp13_psrld_Udq_Ib, bRm); 3005 default: return IEMOP_RAISE_INVALID_OPCODE(); 3006 } 3007 case 4: 3008 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3009 { 3010 case 0: return FNIEMOP_CALL_1(iemOp_Grp13_psrad_Nq_Ib, bRm); 3011 case IEM_OP_PRF_SIZE_OP: return FNIEMOP_CALL_1(iemOp_Grp13_psrad_Udq_Ib, bRm); 3012 default: return IEMOP_RAISE_INVALID_OPCODE(); 3013 } 3014 case 6: 3015 switch (pVCpu->iem.s.fPrefixes & (IEM_OP_PRF_SIZE_OP | IEM_OP_PRF_REPZ | IEM_OP_PRF_REPNZ)) 3016 { 3017 case 0: return FNIEMOP_CALL_1(iemOp_Grp13_pslld_Nq_Ib, bRm); 3018 case IEM_OP_PRF_SIZE_OP: return FNIEMOP_CALL_1(iemOp_Grp13_pslld_Udq_Ib, bRm); 3019 default: return IEMOP_RAISE_INVALID_OPCODE(); 3020 } 3021 IEM_NOT_REACHED_DEFAULT_CASE_RET(); 3022 } 3008 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 3009 /* register, register */ 3010 return FNIEMOP_CALL_1(g_apfnGroup13RegReg[ ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) * 4 3011 + pVCpu->iem.s.idxPrefix], bRm); 3012 /** @todo decode SIB, disp, Ib? */ 3013 return IEMOP_RAISE_INVALID_OPCODE(); 3023 3014 } 3024 3015
Note:
See TracChangeset
for help on using the changeset viewer.