Changeset 97153 in vbox for trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h
- Timestamp:
- Oct 14, 2022 9:29:44 AM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h
r97123 r97153 141 141 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 142 142 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 143 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 144 145 IEM_MC_PREPARE_SSE_USAGE(); 146 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 147 IEM_MC_CALL_VOID_AIMPL_3(pfnU128, puDst, puSrc, bImmArg); 148 149 IEM_MC_ADVANCE_RIP(); 150 IEM_MC_END(); 151 } 152 return VINF_SUCCESS; 153 } 154 155 156 /** 157 * Common worker for SSE-style AES-NI instructions of the form: 158 * aesxxx xmm1, xmm2/mem128, imm8 159 * 160 * Proper alignment of the 128-bit operand is enforced. 161 * Exceptions type 4. AES-NI cpuid checks. 162 * 163 * @sa iemOpCommonSsse3_FullFullImm8_To_Full 164 * @sa iemOpCommonSse41_FullFullImm8_To_Full 165 */ 166 FNIEMOP_DEF_1(iemOpCommonAesNi_FullFullImm8_To_Full, PFNIEMAIMPLMEDIAOPTF2U128IMM8, pfnU128) 167 { 168 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 169 if (IEM_IS_MODRM_REG_MODE(bRm)) 170 { 171 /* 172 * Register, register. 173 */ 174 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 175 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 176 IEM_MC_BEGIN(3, 0); 177 IEM_MC_ARG(PRTUINT128U, puDst, 0); 178 IEM_MC_ARG(PCRTUINT128U, puSrc, 1); 179 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 180 IEM_MC_MAYBE_RAISE_AESNI_RELATED_XCPT(); 181 IEM_MC_PREPARE_SSE_USAGE(); 182 IEM_MC_REF_XREG_U128(puDst, IEM_GET_MODRM_REG(pVCpu, bRm)); 183 IEM_MC_REF_XREG_U128_CONST(puSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 184 IEM_MC_CALL_VOID_AIMPL_3(pfnU128, puDst, puSrc, bImmArg); 185 IEM_MC_ADVANCE_RIP(); 186 IEM_MC_END(); 187 } 188 else 189 { 190 /* 191 * Register, memory. 192 */ 193 IEM_MC_BEGIN(3, 2); 194 IEM_MC_ARG(PRTUINT128U, puDst, 0); 195 IEM_MC_LOCAL(RTUINT128U, uSrc); 196 IEM_MC_ARG_LOCAL_REF(PCRTUINT128U, puSrc, uSrc, 1); 197 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 198 199 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 200 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 201 IEM_MC_ARG_CONST(uint8_t, bImmArg, /*=*/ bImm, 2); 202 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 203 IEM_MC_MAYBE_RAISE_AESNI_RELATED_XCPT(); 143 204 IEM_MC_FETCH_MEM_U128_ALIGN_SSE(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 144 205 … … 553 614 /* Opcode 0x66 0x0f 0xdd - invalid */ 554 615 /* Opcode 0x66 0x0f 0xde - invalid */ 616 617 555 618 /* Opcode 0x66 0x0f 0xdf - (aeskeygenassist). */ 556 FNIEMOP_STUB(iemOp_aeskeygen_Vdq_Wdq_Ib); 619 FNIEMOP_DEF(iemOp_aeskeygen_Vdq_Wdq_Ib) 620 { 621 IEMOP_MNEMONIC3(RMI, AESKEYGEN, aeskeygen, Vdq, Wdq, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, 0); 622 return FNIEMOP_CALL_1(iemOpCommonAesNi_FullFullImm8_To_Full, 623 IEM_SELECT_HOST_OR_FALLBACK(fAesNi, iemAImpl_aeskeygenassist_u128, iemAImpl_aeskeygenassist_u128_fallback)); 624 } 557 625 558 626
Note:
See TracChangeset
for help on using the changeset viewer.