Changeset 100579 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Jul 14, 2023 2:04:07 PM (20 months ago)
- svn:sync-xref-src-repo-rev:
- 158409
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap3.cpp.h
r100575 r100579 347 347 /** Opcode VEX.66.0F3A 0x17. */ 348 348 FNIEMOP_STUB(iemOp_vextractps_Ed_Vdq_Ib); 349 350 349 351 /** Opcode VEX.66.0F3A 0x18 (vex only). */ 350 FNIEMOP_STUB(iemOp_vinsertf128_Vqq_Hqq_Wqq_Ib); 352 FNIEMOP_DEF(iemOp_vinsertf128_Vqq_Hqq_Wqq_Ib) 353 { 354 //IEMOP_MNEMONIC4(VEX_RMI, VINSERTF128, vinsertf128, Vx, Hx, Wx, Ib, DISOPTYPE_HARMLESS, 0); 355 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 356 if (IEM_IS_MODRM_REG_MODE(bRm)) 357 { 358 /* 359 * Register, register. 360 */ 361 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 362 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 363 364 IEM_MC_BEGIN(0, 1); 365 IEM_MC_LOCAL(RTUINT128U, uSrc); 366 367 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 368 IEM_MC_PREPARE_AVX_USAGE(); 369 370 IEM_MC_FETCH_XREG_U128(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 371 IEM_MC_COPY_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_EFFECTIVE_VVVV(pVCpu)); 372 IEM_MC_STORE_YREG_U128( IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 1, uSrc); 373 374 IEM_MC_ADVANCE_RIP_AND_FINISH(); 375 IEM_MC_END(); 376 } 377 else 378 { 379 /* 380 * Register, memory. 381 */ 382 IEM_MC_BEGIN(0, 2); 383 IEM_MC_LOCAL(RTUINT128U, uSrc); 384 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 385 386 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 387 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 388 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 389 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 390 IEM_MC_PREPARE_AVX_USAGE(); 391 392 IEM_MC_FETCH_MEM_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 393 IEM_MC_COPY_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_EFFECTIVE_VVVV(pVCpu)); 394 IEM_MC_STORE_YREG_U128( IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 1, uSrc); 395 396 IEM_MC_ADVANCE_RIP_AND_FINISH(); 397 IEM_MC_END(); 398 } 399 } 400 401 351 402 /** Opcode VEX.66.0F3A 0x19 (vex only). */ 352 403 FNIEMOP_STUB(iemOp_vextractf128_Wdq_Vqq_Ib); … … 389 440 /* Opcode VEX.66.0F3A 0x36 - invalid */ 390 441 /* Opcode VEX.66.0F3A 0x37 - invalid */ 442 443 391 444 /** Opcode VEX.66.0F3A 0x38 (vex only). */ 392 FNIEMOP_STUB(iemOp_vinserti128_Vqq_Hqq_Wqq_Ib); 445 FNIEMOP_DEF(iemOp_vinserti128_Vqq_Hqq_Wqq_Ib) 446 { 447 //IEMOP_MNEMONIC4(VEX_RMI, VINSERTI128, vinserti128, Vx, Hx, Wx, Ib, DISOPTYPE_HARMLESS, 0); 448 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 449 if (IEM_IS_MODRM_REG_MODE(bRm)) 450 { 451 /* 452 * Register, register. 453 */ 454 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 455 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 456 457 IEM_MC_BEGIN(0, 1); 458 IEM_MC_LOCAL(RTUINT128U, uSrc); 459 460 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 461 IEM_MC_PREPARE_AVX_USAGE(); 462 463 IEM_MC_FETCH_XREG_U128(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 464 IEM_MC_COPY_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_EFFECTIVE_VVVV(pVCpu)); 465 IEM_MC_STORE_YREG_U128( IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 1, uSrc); 466 467 IEM_MC_ADVANCE_RIP_AND_FINISH(); 468 IEM_MC_END(); 469 } 470 else 471 { 472 /* 473 * Register, memory. 474 */ 475 IEM_MC_BEGIN(0, 2); 476 IEM_MC_LOCAL(RTUINT128U, uSrc); 477 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 478 479 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 480 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 481 IEMOP_HLP_DONE_VEX_DECODING_L1_EX(fAvx2); 482 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 483 IEM_MC_PREPARE_AVX_USAGE(); 484 485 IEM_MC_FETCH_MEM_U128(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 486 IEM_MC_COPY_YREG_U256_ZX_VLMAX(IEM_GET_MODRM_REG(pVCpu, bRm), IEM_GET_EFFECTIVE_VVVV(pVCpu)); 487 IEM_MC_STORE_YREG_U128( IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 1, uSrc); 488 489 IEM_MC_ADVANCE_RIP_AND_FINISH(); 490 IEM_MC_END(); 491 } 492 } 493 494 393 495 /** Opcode VEX.66.0F3A 0x39 (vex only). */ 394 496 FNIEMOP_STUB(iemOp_vextracti128_Wdq_Vqq_Ib);
Note:
See TracChangeset
for help on using the changeset viewer.