Changeset 66323 in vbox
- Timestamp:
- Mar 29, 2017 8:03:19 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 114252
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/disopcode.h
r66310 r66323 1052 1052 #define OP_PARM_Lx (OP_PARM_L+OP_PARM_x) 1053 1053 1054 /* For making IEM happy: */1054 /* For making IEM / bs3-cpu-generated-1 happy: */ 1055 1055 #define OP_PARM_Uq (OP_PARM_U+OP_PARM_q) 1056 1056 #define OP_PARM_UqHi OP_PARM_Uq 1057 #define OP_PARM_WqZxReg OP_PARM_Wq /**< Annotates that register targets get their upper bits cleared. */ 1057 1058 1058 1059 /** @} */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66314 r66323 166 166 'Wpd': ( 'IDX_UseModRM', 'rm', '%Wpd', 'Wpd', ), 167 167 'Wdq': ( 'IDX_UseModRM', 'rm', '%Wdq', 'Wdq', ), 168 'WqZxReg': ( 'IDX_UseModRM', 'rm', '%Wq', 'Wq', ), 168 169 169 170 # ModR/M.rm - register only. -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66321 r66323 7548 7548 7549 7549 /* Opcode 0x0f 0xd6 - invalid */ 7550 /** Opcode 0x66 0x0f 0xd6 - vmovq Wq, Vq */ 7551 FNIEMOP_STUB(iemOp_vmovq_Wq_Vq); // NEXT! 7550 7551 /** 7552 * @opcode 0xd6 7553 * @oppfx 0x66 7554 * @opcpuid sse2 7555 * @opgroup og_sse2_pcksclr_datamove 7556 * @opxcpttype none 7557 * @optest op1=-1 op2=2 -> op1=2 7558 * @optest op1=0 op2=-42 -> op1=-42 7559 */ 7560 FNIEMOP_DEF(iemOp_vmovq_Wq_Vq) 7561 { 7562 IEMOP_MNEMONIC2(MR, MOVQ, movq, WqZxReg, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 7563 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 7564 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 7565 { 7566 /* 7567 * Register, register. 7568 */ 7569 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7570 IEM_MC_BEGIN(0, 2); 7571 IEM_MC_LOCAL(uint64_t, uSrc); 7572 7573 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 7574 IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE(); 7575 7576 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 7577 IEM_MC_STORE_XREG_U64_ZX_U128((bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB, uSrc); 7578 7579 IEM_MC_ADVANCE_RIP(); 7580 IEM_MC_END(); 7581 } 7582 else 7583 { 7584 /* 7585 * Register, memory. 7586 */ 7587 IEM_MC_BEGIN(0, 2); 7588 IEM_MC_LOCAL(uint64_t, uSrc); 7589 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 7590 7591 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 7592 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 7593 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 7594 IEM_MC_ACTUALIZE_SSE_STATE_FOR_READ(); 7595 7596 IEM_MC_FETCH_XREG_U64(uSrc, ((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg); 7597 IEM_MC_STORE_MEM_U64(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uSrc); 7598 7599 IEM_MC_ADVANCE_RIP(); 7600 IEM_MC_END(); 7601 } 7602 return VINF_SUCCESS; 7603 } 7604 7605 7552 7606 /** Opcode 0xf3 0x0f 0xd6 - movq2dq Vdq, Nq */ 7553 7607 FNIEMOP_STUB(iemOp_movq2dq_Vdq_Nq); … … 7563 7617 { 7564 7618 case IEM_OP_PRF_SIZE_OP: /* SSE */ 7565 I EMOP_MNEMONIC(movq_Wq_Vq, "movq Wq,Vq");7619 I E M O P _ M N E M O N I C(movq_Wq_Vq, "movq Wq,Vq"); 7566 7620 IEMOP_HLP_DECODED_NL_2(OP_PMOVMSKB, IEMOPFORM_RM_REG, OP_PARM_Gd, OP_PARM_Vdq, DISOPTYPE_SSE | DISOPTYPE_HARMLESS); 7567 7621 IEM_MC_BEGIN(2, 0); -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66317 r66323 470 470 /* [BS3CG1DST_XMM14_HI] = */ 8, 471 471 /* [BS3CG1DST_XMM15_HI] = */ 8, 472 /* [BS3CG1DST_XMM0_LO_ZX] = */ 8, 473 /* [BS3CG1DST_XMM1_LO_ZX] = */ 8, 474 /* [BS3CG1DST_XMM2_LO_ZX] = */ 8, 475 /* [BS3CG1DST_XMM3_LO_ZX] = */ 8, 476 /* [BS3CG1DST_XMM4_LO_ZX] = */ 8, 477 /* [BS3CG1DST_XMM5_LO_ZX] = */ 8, 478 /* [BS3CG1DST_XMM6_LO_ZX] = */ 8, 479 /* [BS3CG1DST_XMM7_LO_ZX] = */ 8, 480 /* [BS3CG1DST_XMM8_LO_ZX] = */ 8, 481 /* [BS3CG1DST_XMM9_LO_ZX] = */ 8, 482 /* [BS3CG1DST_XMM10_LO_ZX] = */ 8, 483 /* [BS3CG1DST_XMM11_LO_ZX] = */ 8, 484 /* [BS3CG1DST_XMM12_LO_ZX] = */ 8, 485 /* [BS3CG1DST_XMM13_LO_ZX] = */ 8, 486 /* [BS3CG1DST_XMM14_LO_ZX] = */ 8, 487 /* [BS3CG1DST_XMM15_LO_ZX] = */ 8, 472 488 /* [BS3CG1DST_XMM0_DW0] = */ 4, 473 489 /* [BS3CG1DST_XMM1_DW0] = */ 4, … … 683 699 /* [BS3CG1DST_XMM14_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[14]) + sizeof(uint64_t), 684 700 /* [BS3CG1DST_XMM15_HI] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[15]) + sizeof(uint64_t), 701 /* [BS3CG1DST_XMM0_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[0]), 702 /* [BS3CG1DST_XMM1_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[1]), 703 /* [BS3CG1DST_XMM2_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[2]), 704 /* [BS3CG1DST_XMM3_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[3]), 705 /* [BS3CG1DST_XMM4_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[4]), 706 /* [BS3CG1DST_XMM5_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[5]), 707 /* [BS3CG1DST_XMM6_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[6]), 708 /* [BS3CG1DST_XMM7_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[7]), 709 /* [BS3CG1DST_XMM8_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[8]), 710 /* [BS3CG1DST_XMM9_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[9]), 711 /* [BS3CG1DST_XMM10_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[10]), 712 /* [BS3CG1DST_XMM11_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[11]), 713 /* [BS3CG1DST_XMM12_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[12]), 714 /* [BS3CG1DST_XMM13_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[13]), 715 /* [BS3CG1DST_XMM14_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[14]), 716 /* [BS3CG1DST_XMM15_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[15]), 685 717 /* [BS3CG1DST_XMM0_DW0] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[0]), 686 718 /* [BS3CG1DST_XMM1_DW0] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[1]), … … 723 755 #ifdef BS3CG1_DEBUG_CTX_MOD 724 756 /** Destination field names. */ 725 static const struct { char sz[1 0]; } g_aszBs3Cg1DstFields[] =757 static const struct { char sz[12]; } g_aszBs3Cg1DstFields[] = 726 758 { 727 759 { "INVALID" }, … … 896 928 { "XMM14_HI" }, 897 929 { "XMM15_HI" }, 930 { "XMM0_LO_ZX" }, 931 { "XMM1_LO_ZX" }, 932 { "XMM2_LO_ZX" }, 933 { "XMM3_LO_ZX" }, 934 { "XMM4_LO_ZX" }, 935 { "XMM5_LO_ZX" }, 936 { "XMM6_LO_ZX" }, 937 { "XMM7_LO_ZX" }, 938 { "XMM8_LO_ZX" }, 939 { "XMM9_LO_ZX" }, 940 { "XMM10_LO_ZX" }, 941 { "XMM11_LO_ZX" }, 942 { "XMM12_LO_ZX" }, 943 { "XMM13_LO_ZX" }, 944 { "XMM14_LO_ZX" }, 945 { "XMM15_LO_ZX" }, 898 946 { "XMM0_DW0" }, 899 947 { "XMM1_DW0" }, … … 1362 1410 break; 1363 1411 1412 case BS3CG1ENC_MODRM_WqZxReg_Vq: 1413 if (iEncoding == 0) 1414 { 1415 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1416 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1417 pThis->aOperands[pThis->iRmOp ].idxField = BS3CG1DST_XMM0_LO_ZX; 1418 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM1_LO; 1419 } 1420 else if (iEncoding == 1) 1421 { 1422 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM2_LO; 1423 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1424 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 2 /*iReg*/, 8, 0, BS3CG1OPLOC_MEM_RW); 1425 } 1426 else if (iEncoding == 2) 1427 { 1428 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_LO; 1429 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1430 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMissalign*/, BS3CG1OPLOC_MEM_RW); 1431 } 1432 else 1433 break; 1434 pThis->cbCurInstr = off; 1435 iEncoding++; 1436 break; 1437 1364 1438 case BS3CG1ENC_MODRM_Vq_UqHi: 1365 1439 if (iEncoding == 0) … … 1687 1761 1688 1762 case BS3CG1ENC_MODRM_Wsd_Vsd: 1763 case BS3CG1ENC_MODRM_WqZxReg_Vq: 1689 1764 pThis->iRmOp = 0; 1690 1765 pThis->iRegOp = 1; … … 2308 2383 2309 2384 case 8: 2385 if ((unsigned)(idxField - BS3CG1DST_XMM0_LO_ZX) <= (unsigned)(BS3CG1DST_XMM15_LO_ZX - BS3CG1DST_XMM0_LO_ZX)) 2386 PtrField.pu64[1] = 0; 2310 2387 switch (bOpcode & BS3CG1_CTXOP_OPERATOR_MASK) 2311 2388 { -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r66315 r66323 49 49 BS3CG1OP_Wpd, 50 50 BS3CG1OP_Wdq, 51 BS3CG1OP_WqZxReg, 51 52 52 53 BS3CG1OP_Gb, … … 92 93 BS3CG1ENC_MODRM_Wps_Vps, 93 94 BS3CG1ENC_MODRM_Wpd_Vpd, 95 BS3CG1ENC_MODRM_WqZxReg_Vq, 94 96 95 97 BS3CG1ENC_MODRM_Gb_Eb, … … 478 480 BS3CG1DST_XMM14_HI, 479 481 BS3CG1DST_XMM15_HI, 482 BS3CG1DST_XMM0_LO_ZX, 483 BS3CG1DST_XMM1_LO_ZX, 484 BS3CG1DST_XMM2_LO_ZX, 485 BS3CG1DST_XMM3_LO_ZX, 486 BS3CG1DST_XMM4_LO_ZX, 487 BS3CG1DST_XMM5_LO_ZX, 488 BS3CG1DST_XMM6_LO_ZX, 489 BS3CG1DST_XMM7_LO_ZX, 490 BS3CG1DST_XMM8_LO_ZX, 491 BS3CG1DST_XMM9_LO_ZX, 492 BS3CG1DST_XMM10_LO_ZX, 493 BS3CG1DST_XMM11_LO_ZX, 494 BS3CG1DST_XMM12_LO_ZX, 495 BS3CG1DST_XMM13_LO_ZX, 496 BS3CG1DST_XMM14_LO_ZX, 497 BS3CG1DST_XMM15_LO_ZX, 480 498 BS3CG1DST_XMM0_DW0, 481 499 BS3CG1DST_XMM1_DW0, … … 518 536 BS3CG1DST_END 519 537 } BS3CG1DST; 538 AssertCompile(BS3CG1DST_END <= 256); 520 539 521 540 /** @name Selector opcode definitions.
Note:
See TracChangeset
for help on using the changeset viewer.