儲存庫 vbox 的更動 66906
- 時間撮記:
- 2017-5-16 上午09:58:00 (8 年 以前)
- 位置:
- trunk
- 檔案:
-
- 修改 7 筆資料
圖例:
- 未更動
- 新增
- 刪除
-
trunk/include/VBox/disopcode.h
r66901 r66906 740 740 OP_UD1, 741 741 OP_UD2, 742 /** @name AVX instructions743 * @{ */744 OP_VLDMXCSR,745 OP_VSTMXCSR,746 OP_VMOVUPS,747 OP_VMOVUPD,748 OP_VMOVSS,749 /** @} */750 742 /** @name VT-x instructions 751 743 * @{ */ … … 778 770 /** @name 64 bits instruction 779 771 * @{ */ 780 OP_MOVSXD 772 OP_MOVSXD, 781 773 /** @} */ 774 /** @name AVX instructions 775 * @{ */ 776 OP_VLDMXCSR, 777 OP_VSTMXCSR, 778 OP_VMOVUPS, 779 OP_VMOVUPD, 780 OP_VMOVSS, 781 OP_VMOVSD, 782 /** @} */ 783 OP_END_OF_OPCODES 782 784 }; 783 785 AssertCompile(OP_LOCK == 7); … … 1080 1082 #define OP_PARM_Uq (OP_PARM_U+OP_PARM_q) 1081 1083 #define OP_PARM_UqHi (OP_PARM_U+OP_PARM_dq) 1084 #define OP_PARM_Uss (OP_PARM_U+OP_PARM_ss) 1085 #define OP_PARM_Usd (OP_PARM_U+OP_PARM_sd) 1082 1086 #define OP_PARM_Vdq_WO OP_PARM_Vdq /**< Annotates that only YMM/XMM[127:64] are accessed. */ 1083 1087 #define OP_PARM_Vpd_WO OP_PARM_Vpd /**< Annotates write only operand. */ … … 1090 1094 #define OP_PARM_VssZx_WO OP_PARM_Vss /**< Annotates that the registers get their upper bits cleared. */ 1091 1095 #define OP_PARM_Vss_WO OP_PARM_Vss /**< Annotates write only operand. */ 1096 #define OP_PARM_Vsd_WO OP_PARM_Vsd /**< Annotates write only operand. */ 1092 1097 #define OP_PARM_Wpd_WO OP_PARM_Wpd /**< Annotates write only operand. */ 1093 1098 #define OP_PARM_Wps_WO OP_PARM_Wps /**< Annotates write only operand. */ … … 1096 1101 #define OP_PARM_Wsd_WO OP_PARM_Wsd /**< Annotates write only operand. */ 1097 1102 1098 1099 1103 /** @} */ 1100 1104 -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r66901 r66906 11439 11439 IEM_MC_INT_CLEAR_ZMM_256_UP(pXStateTmp, a_iYRegDst); \ 11440 11440 } while (0) 11441 #define IEM_MC_ COPY2_YREG_U32_U96_ZX_VLMAX(a_iYRegDst, a_iYRegSrc32, a_iYRegSrcHx) \11441 #define IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX(a_iYRegDst, a_iYRegSrc32, a_iYRegSrcHx) \ 11442 11442 do { PX86XSAVEAREA pXStateTmp = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState); \ 11443 11443 uintptr_t const iYRegDstTmp = (a_iYRegDst); \ … … 11446 11446 pXStateTmp->x87.aXMM[iYRegDstTmp].au32[0] = pXStateTmp->x87.aXMM[iYRegSrc32Tmp].au32[0]; \ 11447 11447 pXStateTmp->x87.aXMM[iYRegDstTmp].au32[1] = pXStateTmp->x87.aXMM[iYRegSrcHxTmp].au32[1]; \ 11448 pXStateTmp->x87.aXMM[iYRegDstTmp].au64[1] = pXStateTmp->x87.aXMM[iYRegSrcHxTmp].au64[1]; \ 11449 pXStateTmp->u.YmmHi.aYmmHi[iYRegDstTmp].au64[0] = 0; \ 11450 pXStateTmp->u.YmmHi.aYmmHi[iYRegDstTmp].au64[1] = 0; \ 11451 IEM_MC_INT_CLEAR_ZMM_256_UP(pXStateTmp, a_iYRegDst); \ 11452 } while (0) 11453 #define IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX(a_iYRegDst, a_iYRegSrc64, a_iYRegSrcHx) \ 11454 do { PX86XSAVEAREA pXStateTmp = IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState); \ 11455 uintptr_t const iYRegDstTmp = (a_iYRegDst); \ 11456 uintptr_t const iYRegSrc64Tmp = (a_iYRegSrc64); \ 11457 uintptr_t const iYRegSrcHxTmp = (a_iYRegSrcHx); \ 11458 pXStateTmp->x87.aXMM[iYRegDstTmp].au64[0] = pXStateTmp->x87.aXMM[iYRegSrc64Tmp].au64[0]; \ 11448 11459 pXStateTmp->x87.aXMM[iYRegDstTmp].au64[1] = pXStateTmp->x87.aXMM[iYRegSrcHxTmp].au64[1]; \ 11449 11460 pXStateTmp->u.YmmHi.aYmmHi[iYRegDstTmp].au64[0] = 0; \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66901 r66906 232 232 'Uq': ( 'IDX_UseModRM', 'rm', '%Uq', 'Uq', ), 233 233 'UqHi': ( 'IDX_UseModRM', 'rm', '%Uq', 'UqHi', ), 234 'Uss': ( 'IDX_UseModRM', 'rm', '%Uss', 'Uss', ), 235 'Usd': ( 'IDX_UseModRM', 'rm', '%Usd', 'Usd', ), 234 236 'Nq': ( 'IDX_UseModRM', 'rm', '%Qq', 'Nq', ), 235 237 -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66901 r66906 214 214 * @opcodesub 11 mr/reg 215 215 * @opcpuid avx 216 * @opgroup og_avx_simdfp_datam ove216 * @opgroup og_avx_simdfp_datamerge 217 217 * @opxcpttype 5 218 218 * @optest op1=1 op2=0 op3=2 -> op1=2 219 219 * @optest op1=0 op2=0 op3=-22 -> op1=0xffffffea 220 220 * @optest op1=3 op2=-1 op3=0x77 -> op1=-4294967177 221 221 * @oponly 222 222 */ 223 IEMOP_MNEMONIC3(VEX_RVM, VMOVSS, vmovss, Vss_WO, HdqCss, Wss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);223 IEMOP_MNEMONIC3(VEX_RVM, VMOVSS, vmovss, Vss_WO, HdqCss, Uss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 224 224 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX(); 225 225 IEM_MC_BEGIN(0, 0); … … 227 227 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 228 228 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 229 IEM_MC_ COPY2_YREG_U32_U96_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg,229 IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 230 230 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB /*U32*/, 231 231 pVCpu->iem.s.uVex3rdReg /*Hss*/); … … 246 246 * @optest op1=1 op2=2 -> op1=2 247 247 * @optest op1=0 op2=-22 -> op1=-22 248 248 * @oponly 249 249 */ 250 250 IEMOP_MNEMONIC2(VEX_XM, VMOVSS, vmovss, VssZx_WO, Wss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); … … 268 268 } 269 269 270 /** Opcode VEX.F2.0F 0x10 - vmovsd Vx, Hx, Wsd */ 271 FNIEMOP_STUB(iemOp_vmovsd_Vx_Hx_Wsd); 272 270 271 FNIEMOP_DEF(iemOp_vmovsd_Vsd_Hsd_Wsd) 272 { 273 Assert(pVCpu->iem.s.uVexLength <= 1); 274 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 275 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 276 { 277 /** 278 * @opcode 0x10 279 * @oppfx 0xf2 280 * @opcodesub 11 mr/reg 281 * @opcpuid avx 282 * @opgroup og_avx_simdfp_datamerge 283 * @opxcpttype 5 284 * @optest op1=1 op2=0 op3=2 -> op1=2 285 * @optest op1=0 op2=0 op3=-22 -> op1=0xffffffffffffffea 286 * @optest op1=3 op2=-1 op3=0x77 -> 287 * op1=0xffffffffffffffff0000000000000077 288 * @oponly 289 */ 290 IEMOP_MNEMONIC3(VEX_RVM, VMOVSD, vmovsd, Vsd_WO, HdqCsd, Usd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 291 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX(); 292 IEM_MC_BEGIN(0, 0); 293 294 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 295 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 296 IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, 297 (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB /*U32*/, 298 pVCpu->iem.s.uVex3rdReg /*Hss*/); 299 IEM_MC_ADVANCE_RIP(); 300 IEM_MC_END(); 301 } 302 else 303 { 304 /** 305 * @opdone 306 * @opcode 0x10 307 * @oppfx 0xf2 308 * @opcodesub 11 mr/reg 309 * @opcpuid avx 310 * @opgroup og_avx_simdfp_datamove 311 * @opxcpttype 5 312 * @opfunction iemOp_vmovss_Vss_Hss_Wss 313 * @optest op1=1 op2=2 -> op1=2 314 * @optest op1=0 op2=-22 -> op1=-22 315 * @oponly 316 */ 317 IEMOP_MNEMONIC2(VEX_XM, VMOVSD, vmovsd, VsdZx_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 318 IEM_MC_BEGIN(0, 2); 319 IEM_MC_LOCAL(uint64_t, uSrc); 320 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 321 322 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 323 IEMOP_HLP_DONE_DECODING_NO_AVX_PREFIX_AND_NO_VVVV(); 324 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 325 IEM_MC_ACTUALIZE_AVX_STATE_FOR_CHANGE(); 326 327 IEM_MC_FETCH_MEM_U64(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 328 IEM_MC_STORE_YREG_U64_ZX_VLMAX(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 329 330 IEM_MC_ADVANCE_RIP(); 331 IEM_MC_END(); 332 } 333 334 return VINF_SUCCESS; 335 } 273 336 274 337 /** … … 2961 3024 /* 0x0f */ IEMOP_X4(iemOp_InvalidNeedRM), 2962 3025 2963 /* 0x10 */ iemOp_vmovups_Vps_Wps, iemOp_vmovupd_Vpd_Wpd, iemOp_vmovss_Vss_Hss_Wss, iemOp_vmovsd_Vx_Hx_Wsd,3026 /* 0x10 */ iemOp_vmovups_Vps_Wps, iemOp_vmovupd_Vpd_Wpd, iemOp_vmovss_Vss_Hss_Wss, iemOp_vmovsd_Vsd_Hsd_Wsd, 2964 3027 /* 0x11 */ iemOp_vmovups_Wps_Vps, iemOp_vmovupd_Wpd_Vpd, iemOp_vmovss_Wss_Hx_Vss, iemOp_vmovsd_Wsd_Hx_Vsd, 2965 3028 /* 0x12 */ iemOp_vmovlps_Vq_Hq_Mq__vmovhlps, iemOp_vmovlpd_Vq_Hq_Mq, iemOp_vmovsldup_Vx_Wx, iemOp_vmovddup_Vx_Wx, -
trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp
r66901 r66906 528 528 #define IEM_MC_COPY_YREG_U256_ZX_VLMAX(a_iYRegDst, a_iYRegSrc) do { (void)fAvxWrite; } while (0) 529 529 #define IEM_MC_COPY_YREG_U128_ZX_VLMAX(a_iYRegDst, a_iYRegSrc) do { (void)fAvxWrite; } while (0) 530 #define IEM_MC_COPY2_YREG_U32_U96_ZX_VLMAX(a_iYRegDst, a_iYRegSrc32, a_iYRegSrcHx) do { (void)fAvxWrite; } while (0) 530 #define IEM_MC_MERGE_YREG_U32_U96_ZX_VLMAX(a_iYRegDst, a_iYRegSrc32, a_iYRegSrcHx) do { (void)fAvxWrite; } while (0) 531 #define IEM_MC_MERGE_YREG_U64_U64_ZX_VLMAX(a_iYRegDst, a_iYRegSrc64, a_iYRegSrcHx) do { (void)fAvxWrite; } while (0) 531 532 532 533 #define IEM_MC_FETCH_MEM_U8(a_u8Dst, a_iSeg, a_GCPtrMem) do { CHK_GCPTR(a_GCPtrMem); } while (0) -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66901 r66906 197 197 * Set to BS3CG1DST_INVALID if memory or immediate. */ 198 198 uint8_t idxField; 199 /** The base BS3CG1DST value for this field. 200 * Used only by some generalized encoders when dealing with 201 * registers. */ 202 uint8_t idxFieldBase; 199 203 /** Depends on enmLocation. 200 204 * - BS3CG1OPLOC_IMM: offset relative to start of the instruction. … … 2386 2390 2387 2391 2388 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_Vs s_WO_HdqCss_Wss(PBS3CG1STATE pThis, unsigned iEncoding)2392 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_HdqCsomething_Usomething(PBS3CG1STATE pThis, unsigned iEncoding) 2389 2393 { 2390 2394 unsigned off; … … 2395 2399 off = Bs3Cg1InsertOpcodes(pThis, off); 2396 2400 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1); 2397 pThis->aOperands[0].idxField = BS3CG1DST_XMM2;2398 pThis->aOperands[1].idxField = BS3CG1DST_XMM0;2399 pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;2401 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2; 2402 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 0; 2403 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1; 2400 2404 break; 2401 2405 case 1: … … 2403 2407 off = Bs3Cg1InsertOpcodes(pThis, off); 2404 2408 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 3, 1); 2405 pThis->aOperands[0].idxField = BS3CG1DST_XMM3;2406 pThis->aOperands[1].idxField = BS3CG1DST_XMM7;2407 pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;2409 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 3; 2410 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 7; 2411 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1; 2408 2412 break; 2409 2413 case 2: … … 2414 2418 off = Bs3Cg1InsertOpcodes(pThis, off); 2415 2419 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 3, 2); 2416 pThis->aOperands[0].idxField = BS3CG1DST_XMM11;2417 pThis->aOperands[1].idxField = BS3CG1DST_XMM15;2418 pThis->aOperands[2].idxField = BS3CG1DST_XMM2_DW0;2420 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 11; 2421 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 15; 2422 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 2; 2419 2423 break; 2420 2424 } … … 2425 2429 off = Bs3Cg1InsertOpcodes(pThis, off); 2426 2430 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1); 2427 pThis->aOperands[0].idxField = BS3CG1DST_XMM2;2428 pThis->aOperands[1].idxField = BS3CG1DST_XMM0;2429 pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;2431 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2; 2432 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 0; 2433 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1; 2430 2434 break; 2431 2435 case 4: … … 2433 2437 off = Bs3Cg1InsertOpcodes(pThis, off); 2434 2438 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1); 2435 pThis->aOperands[0].idxField = BS3CG1DST_XMM2;2436 pThis->aOperands[1].idxField = BS3CG1DST_XMM0;2437 pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;2439 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2; 2440 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 0; 2441 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1; 2438 2442 break; 2439 2443 case 5: … … 2441 2445 off = Bs3Cg1InsertOpcodes(pThis, off); 2442 2446 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1); 2443 pThis->aOperands[0].idxField = BS3CG1DST_XMM2;2444 pThis->aOperands[1].idxField = BS3CG1DST_XMM3;2445 pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0;2447 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2; 2448 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + 3; 2449 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1; 2446 2450 break; 2447 2451 case 6: … … 2449 2453 off = Bs3Cg1InsertOpcodes(pThis, off); 2450 2454 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1); 2451 pThis->aOperands[0].idxField = BS3CG1DST_XMM2; 2452 pThis->aOperands[1].idxField = BS3_MODE_IS_64BIT_CODE(pThis->bMode) ? BS3CG1DST_XMM15 : BS3CG1DST_XMM7; 2453 pThis->aOperands[2].idxField = BS3CG1DST_XMM1_DW0; 2455 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2; 2456 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + (BS3_MODE_IS_64BIT_CODE(pThis->bMode) ? 15 : 7); 2457 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1; 2458 break; 2459 case 7: 2460 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0 /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2461 off = Bs3Cg1InsertOpcodes(pThis, off); 2462 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 2, 1); 2463 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2; 2464 pThis->aOperands[1].idxField = pThis->aOperands[1].idxFieldBase + (BS3_MODE_IS_64BIT_CODE(pThis->bMode) ? 15 : 7); 2465 pThis->aOperands[2].idxField = pThis->aOperands[2].idxFieldBase + 1; 2454 2466 break; 2455 2467 default: … … 2461 2473 2462 2474 2463 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_Vs sZx_WO_Wss(PBS3CG1STATE pThis, unsigned iEncoding)2475 static unsigned Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_Msomething_Wip_Lig(PBS3CG1STATE pThis, unsigned iEncoding) 2464 2476 { 2465 2477 unsigned off; … … 2469 2481 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/); 2470 2482 off = Bs3Cg1InsertOpcodes(pThis, off); 2471 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, 4, 0, BS3CG1OPLOC_MEM);2472 pThis->aOperands[0].idxField = BS3CG1DST_XMM0_DW0;2483 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2484 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 0; 2473 2485 break; 2474 2486 case 1: 2475 2487 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L - ignored*/, 1 /*~R*/); 2476 2488 off = Bs3Cg1InsertOpcodes(pThis, off); 2477 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, 4, 0, BS3CG1OPLOC_MEM);2478 pThis->aOperands[0].idxField = BS3CG1DST_XMM7_DW0;2489 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2490 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 7; 2479 2491 break; 2480 2492 case 2: … … 2484 2496 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L - ignored*/, 0 /*~R*/); 2485 2497 off = Bs3Cg1InsertOpcodes(pThis, off); 2486 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, 4, 0, BS3CG1OPLOC_MEM);2487 pThis->aOperands[0].idxField = BS3CG1DST_XMM15_DW0;2498 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 7, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2499 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 15; 2488 2500 break; 2489 2501 } … … 2494 2506 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xe /*~V*/, 0 /*L*/, 1 /*~R*/); 2495 2507 off = Bs3Cg1InsertOpcodes(pThis, off); 2496 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, 4, 0, BS3CG1OPLOC_MEM);2497 pThis->aOperands[0].idxField = BS3CG1DST_XMM0_DW0;2508 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 0, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2509 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 0; 2498 2510 pThis->fInvalidEncoding = true; 2499 2511 break; … … 2501 2513 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2502 2514 off = Bs3Cg1InsertOpcodes(pThis, off); 2503 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, 4, 0, BS3CG1OPLOC_MEM);2504 pThis->aOperands[0].idxField = BS3CG1DST_XMM1_DW0;2515 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2516 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 1; 2505 2517 break; 2506 2518 case 5: 2507 2519 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L-ignored*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2508 2520 off = Bs3Cg1InsertOpcodes(pThis, off); 2509 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, 4, 0, BS3CG1OPLOC_MEM);2510 pThis->aOperands[0].idxField = BS3CG1DST_XMM1_DW0;2521 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2522 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 1; 2511 2523 break; 2512 2524 case 6: 2513 2525 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 1 /*W-ignored*/); 2514 2526 off = Bs3Cg1InsertOpcodes(pThis, off); 2515 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, 4, 0, BS3CG1OPLOC_MEM);2516 pThis->aOperands[0].idxField = BS3CG1DST_XMM5_DW0;2527 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2528 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 5; 2517 2529 break; 2518 2530 case 7: … … 2522 2534 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 0 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2523 2535 off = Bs3Cg1InsertOpcodes(pThis, off); 2524 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, 4, 0, BS3CG1OPLOC_MEM);2525 pThis->aOperands[0].idxField = BS3CG1DST_XMM13_DW0;2536 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2537 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 13; 2526 2538 break; 2527 2539 } … … 2534 2546 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 0 /*~B-ignored*/, 0 /*W*/); 2535 2547 off = Bs3Cg1InsertOpcodes(pThis, off); 2536 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, 4, 0, BS3CG1OPLOC_MEM);2537 pThis->aOperands[0].idxField = BS3CG1DST_XMM1_DW0;2548 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 1, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2549 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 1; 2538 2550 break; 2539 2551 } … … 2546 2558 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 0 /*~X-ignored*/, 1 /*~B*/, 0 /*W*/); 2547 2559 off = Bs3Cg1InsertOpcodes(pThis, off); 2548 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2, 4, 0, BS3CG1OPLOC_MEM);2549 pThis->aOperands[0].idxField = BS3CG1DST_XMM2_DW0;2560 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2561 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 2; 2550 2562 break; 2551 2563 } … … 2556 2568 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0 /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2557 2569 off = Bs3Cg1InsertOpcodes(pThis, off); 2558 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, 4, 0, BS3CG1OPLOC_MEM);2559 pThis->aOperands[0].idxField = BS3CG1DST_XMM5_DW0;2570 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 5, pThis->aOperands[1].cbOp, 0, BS3CG1OPLOC_MEM); 2571 pThis->aOperands[0].idxField = pThis->aOperands[0].idxFieldBase + 5; 2560 2572 pThis->fInvalidEncoding = true; 2561 2573 break; … … 2763 2775 return Bs3Cg1EncodeNext_VEX_MODRM_Vps_WO_Wps__OR__VEX_MODRM_Vpd_WO_Wpd(pThis, iEncoding); 2764 2776 2765 case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Wss: 2766 return Bs3Cg1EncodeNext_VEX_MODRM_Vss_WO_HdqCss_Wss(pThis, iEncoding); 2767 2777 case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Uss: 2778 case BS3CG1ENC_VEX_MODRM_Vsd_WO_HdqCsd_Usd: 2779 return Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_HdqCsomething_Usomething(pThis, iEncoding); 2780 2781 case BS3CG1ENC_VEX_MODRM_VsdZx_WO_Mq: 2768 2782 case BS3CG1ENC_VEX_MODRM_VssZx_WO_Wss: 2769 return Bs3Cg1EncodeNext_VEX_MODRM_Vs sZx_WO_Wss(pThis, iEncoding);2783 return Bs3Cg1EncodeNext_VEX_MODRM_VsomethingWO_Msomething_Wip_Lig(pThis, iEncoding); 2770 2784 2771 2785 case BS3CG1ENC_VEX_MODRM_Md_WO: … … 3019 3033 pThis->aOperands[0].cbOp = 4; 3020 3034 pThis->aOperands[1].cbOp = 4; 3021 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX; 3022 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_MEM; 3035 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX; 3036 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_MEM; 3037 pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0_DW0; 3038 pThis->aOperands[1].idxFieldBase = BS3CG1DST_INVALID; 3023 3039 break; 3024 3040 3025 case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_ Wss:3041 case BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Uss: 3026 3042 pThis->iRegOp = 0; 3027 3043 pThis->iRmOp = 2; … … 3029 3045 pThis->aOperands[1].cbOp = 16; 3030 3046 pThis->aOperands[2].cbOp = 4; 3031 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX; 3032 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 3033 pThis->aOperands[2].enmLocation = BS3CG1OPLOC_CTX; 3047 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX; 3048 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 3049 pThis->aOperands[2].enmLocation = BS3CG1OPLOC_CTX; 3050 pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0; 3051 pThis->aOperands[1].idxFieldBase = BS3CG1DST_XMM0; 3052 pThis->aOperands[2].idxFieldBase = BS3CG1DST_XMM0_DW0; 3053 break; 3054 3055 case BS3CG1ENC_VEX_MODRM_VsdZx_WO_Mq: 3056 pThis->iRmOp = 1; 3057 pThis->iRegOp = 0; 3058 pThis->aOperands[0].cbOp = 8; 3059 pThis->aOperands[1].cbOp = 8; 3060 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX; 3061 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_MEM; 3062 pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0_LO; 3063 pThis->aOperands[1].idxFieldBase = BS3CG1DST_INVALID; 3064 break; 3065 3066 case BS3CG1ENC_VEX_MODRM_Vsd_WO_HdqCsd_Usd: 3067 pThis->iRegOp = 0; 3068 pThis->iRmOp = 2; 3069 pThis->aOperands[0].cbOp = 16; 3070 pThis->aOperands[1].cbOp = 16; 3071 pThis->aOperands[2].cbOp = 8; 3072 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX_ZX_VLMAX; 3073 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 3074 pThis->aOperands[2].enmLocation = BS3CG1OPLOC_CTX; 3075 pThis->aOperands[0].idxFieldBase = BS3CG1DST_XMM0; 3076 pThis->aOperands[1].idxFieldBase = BS3CG1DST_XMM0; 3077 pThis->aOperands[2].idxFieldBase = BS3CG1DST_XMM0_LO; 3034 3078 break; 3035 3079 -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r66901 r66906 62 62 BS3CG1OP_Gv_RO, 63 63 BS3CG1OP_HdqCss, 64 BS3CG1OP_HdqCsd, 64 65 BS3CG1OP_Nq, 65 66 BS3CG1OP_Pq_WO, 66 67 BS3CG1OP_Uq, 67 68 BS3CG1OP_UqHi, 69 BS3CG1OP_Uss, 70 BS3CG1OP_Usd, 68 71 BS3CG1OP_Vss, 69 72 BS3CG1OP_Vss_WO, … … 144 147 BS3CG1ENC_VEX_MODRM_Vps_WO_Wps, 145 148 BS3CG1ENC_VEX_MODRM_Vpd_WO_Wpd, 146 BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_ Wss,149 BS3CG1ENC_VEX_MODRM_Vss_WO_HdqCss_Uss, 147 150 BS3CG1ENC_VEX_MODRM_VssZx_WO_Wss, 151 BS3CG1ENC_VEX_MODRM_Vsd_WO_HdqCsd_Usd, 152 BS3CG1ENC_VEX_MODRM_VsdZx_WO_Mq, 148 153 BS3CG1ENC_VEX_MODRM_Md_WO, 149 154
注意:
瀏覽 TracChangeset
來幫助您使用更動檢視器