Changeset 97607 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- Nov 18, 2022 10:58:11 AM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsThree0f3a.cpp.h
r97547 r97607 329 329 /* Opcode 0x66 0x0f 0x12 - invalid */ 330 330 /* Opcode 0x66 0x0f 0x13 - invalid */ 331 332 331 333 /** Opcode 0x66 0x0f 0x14. */ 332 FNIEMOP_STUB(iemOp_pextrb_RdMb_Vdq_Ib); 334 FNIEMOP_DEF(iemOp_pextrb_RdMb_Vdq_Ib) 335 { 336 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 337 IEMOP_MNEMONIC3(MRI, PEXTRB, pextrb, Ev, Vq, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES); 338 if (IEM_IS_MODRM_REG_MODE(bRm)) 339 { 340 /* 341 * greg32, XMM. 342 */ 343 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 344 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 345 IEM_MC_BEGIN(0, 1); 346 IEM_MC_LOCAL(uint8_t, uValue); 347 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 348 IEM_MC_PREPARE_SSE_USAGE(); 349 IEM_MC_AND_LOCAL_U8(bImm, 15); 350 IEM_MC_FETCH_XREG_U8(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iByte*/); 351 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uValue); 352 IEM_MC_ADVANCE_RIP_AND_FINISH(); 353 IEM_MC_END(); 354 } 355 else 356 { 357 /* 358 * [mem8], XMM. 359 */ 360 IEM_MC_BEGIN(0, 2); 361 IEM_MC_LOCAL(uint8_t, uValue); 362 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 363 364 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); 365 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 366 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 367 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 368 IEM_MC_PREPARE_SSE_USAGE(); 369 370 IEM_MC_AND_LOCAL_U8(bImm, 15); 371 IEM_MC_FETCH_XREG_U8(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iByte*/); 372 IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uValue); 373 IEM_MC_ADVANCE_RIP_AND_FINISH(); 374 IEM_MC_END(); 375 } 376 } 377 378 333 379 /** Opcode 0x66 0x0f 0x15. */ 334 FNIEMOP_STUB(iemOp_pextrw_RdMw_Vdq_Ib); 380 FNIEMOP_DEF(iemOp_pextrw_RdMw_Vdq_Ib) 381 { 382 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 383 IEMOP_MNEMONIC3(MRI, PEXTRW, pextrw, Ev, Vq, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES); 384 if (IEM_IS_MODRM_REG_MODE(bRm)) 385 { 386 /* 387 * greg32, XMM. 388 */ 389 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 390 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 391 IEM_MC_BEGIN(0, 1); 392 IEM_MC_LOCAL(uint16_t, uValue); 393 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 394 IEM_MC_PREPARE_SSE_USAGE(); 395 IEM_MC_AND_LOCAL_U8(bImm, 7); 396 IEM_MC_FETCH_XREG_U16(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iWord*/); 397 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uValue); 398 IEM_MC_ADVANCE_RIP_AND_FINISH(); 399 IEM_MC_END(); 400 } 401 else 402 { 403 /* 404 * [mem16], XMM. 405 */ 406 IEM_MC_BEGIN(0, 2); 407 IEM_MC_LOCAL(uint16_t, uValue); 408 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 409 410 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); 411 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 412 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 413 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 414 IEM_MC_PREPARE_SSE_USAGE(); 415 416 IEM_MC_AND_LOCAL_U8(bImm, 7); 417 IEM_MC_FETCH_XREG_U16(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iWord*/); 418 IEM_MC_STORE_MEM_U16(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uValue); 419 IEM_MC_ADVANCE_RIP_AND_FINISH(); 420 IEM_MC_END(); 421 } 422 } 335 423 336 424 … … 350 438 { 351 439 /* 352 * XMM, greg64.440 * greg64, XMM. 353 441 */ 354 442 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); … … 367 455 { 368 456 /* 369 * XMM, [mem64].457 * [mem64], XMM. 370 458 */ 371 459 IEM_MC_BEGIN(0, 2); … … 399 487 { 400 488 /* 401 * XMM, greg32.489 * greg32, XMM. 402 490 */ 403 491 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); … … 416 504 { 417 505 /* 418 * XMM, [mem32].506 * [mem32], XMM. 419 507 */ 420 508 IEM_MC_BEGIN(0, 2); … … 438 526 439 527 /** Opcode 0x66 0x0f 0x17. */ 440 FNIEMOP_STUB(iemOp_extractps_Ed_Vdq_Ib); 528 FNIEMOP_DEF(iemOp_extractps_Ed_Vdq_Ib) 529 { 530 IEMOP_MNEMONIC3(MRI, EXTRACTPS, extractps, Ed, Vdq, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES); 531 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 532 if (IEM_IS_MODRM_REG_MODE(bRm)) 533 { 534 /* 535 * greg32, XMM. 536 */ 537 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 538 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 539 IEM_MC_BEGIN(0, 1); 540 IEM_MC_LOCAL(uint32_t, uSrc); 541 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 542 IEM_MC_PREPARE_SSE_USAGE(); 543 IEM_MC_AND_LOCAL_U8(bImm, 3); 544 IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iDword*/); 545 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uSrc); 546 IEM_MC_ADVANCE_RIP_AND_FINISH(); 547 IEM_MC_END(); 548 } 549 else 550 { 551 /* 552 * [mem32], XMM. 553 */ 554 IEM_MC_BEGIN(0, 2); 555 IEM_MC_LOCAL(uint32_t, uSrc); 556 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 557 558 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); 559 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 560 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 561 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 562 IEM_MC_PREPARE_SSE_USAGE(); 563 IEM_MC_AND_LOCAL_U8(bImm, 3); 564 IEM_MC_FETCH_XREG_U32(uSrc, IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iDword*/); 565 IEM_MC_STORE_MEM_U32(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 566 IEM_MC_ADVANCE_RIP_AND_FINISH(); 567 IEM_MC_END(); 568 } 569 } 570 571 441 572 /* Opcode 0x66 0x0f 0x18 - invalid (vex only). */ 442 573 /* Opcode 0x66 0x0f 0x19 - invalid (vex only). */ … … 450 581 451 582 /** Opcode 0x66 0x0f 0x20. */ 452 FNIEMOP_STUB(iemOp_pinsrb_Vdq_RyMb_Ib); 583 FNIEMOP_DEF(iemOp_pinsrb_Vdq_RyMb_Ib) 584 { 585 IEMOP_MNEMONIC3(RMI, PINSRB, pinsrb, Vd, Ey, Ib, DISOPTYPE_HARMLESS | DISOPTYPE_SSE, IEMOPHINT_IGNORES_OP_SIZES); 586 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 587 if (IEM_IS_MODRM_REG_MODE(bRm)) 588 { 589 /* 590 * XMM, greg32. 591 */ 592 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 593 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 594 IEM_MC_BEGIN(0, 1); 595 IEM_MC_LOCAL(uint8_t, uSrc); 596 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 597 IEM_MC_PREPARE_SSE_USAGE(); 598 IEM_MC_FETCH_GREG_U8(uSrc, IEM_GET_MODRM_RM(pVCpu, bRm)); 599 IEM_MC_AND_LOCAL_U8(bImm, 15); 600 IEM_MC_STORE_XREG_U8(IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iByte*/, uSrc); 601 IEM_MC_ADVANCE_RIP_AND_FINISH(); 602 IEM_MC_END(); 603 } 604 else 605 { 606 /* 607 * XMM, [mem8]. 608 */ 609 IEM_MC_BEGIN(0, 2); 610 IEM_MC_LOCAL(uint8_t, uSrc); 611 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 612 613 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1); 614 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 615 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 616 IEM_MC_MAYBE_RAISE_SSE41_RELATED_XCPT(); 617 IEM_MC_PREPARE_SSE_USAGE(); 618 619 IEM_MC_FETCH_MEM_U8(uSrc, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 620 IEM_MC_AND_LOCAL_U8(bImm, 15); 621 IEM_MC_STORE_XREG_U8(IEM_GET_MODRM_REG(pVCpu, bRm), bImm /*a_iByte*/, uSrc); 622 IEM_MC_ADVANCE_RIP_AND_FINISH(); 623 IEM_MC_END(); 624 } 625 } 626 453 627 /** Opcode 0x66 0x0f 0x21, */ 454 628 FNIEMOP_STUB(iemOp_insertps_Vdq_UdqMd_Ib);
Note:
See TracChangeset
for help on using the changeset viewer.