Changeset 66810 in vbox for trunk/src/VBox/VMM/VMMAll
- Timestamp:
- May 5, 2017 2:36:10 PM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115231
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r66785 r66810 11138 11138 #define IEM_MC_CLEAR_FSW_EX() do { (pVCpu)->iem.s.CTX_SUFF(pCtx)->CTX_SUFF(pXState)->x87.FSW &= X86_FSW_C_MASK | X86_FSW_TOP_MASK; } while (0) 11139 11139 11140 /** Switches the FPU state to MMX mode (FSW.TOS=0, FTW=0) if necessary. */ 11141 #define IEM_MC_FPU_TO_MMX_MODE() do { \ 11142 IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.FSW &= ~X86_FSW_TOP_MASK; \ 11143 IEM_GET_CTX(pVCpu)->CTX_SUFF(pXState)->x87.FTW = 0xff; \ 11144 } while (0) 11140 11145 11141 11146 #define IEM_MC_FETCH_MREG_U64(a_u64Value, a_iMReg) \ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructions.cpp.h
r66479 r66810 549 549 550 550 551 /** Invalid with RM byte where intel decodes any additional address encoding 552 * bytes. */ 553 FNIEMOPRM_DEF(iemOp_InvalidWithRMNeedDecode) 554 { 555 IEMOP_MNEMONIC(InvalidWithRMNeedDecode, "InvalidWithRMNeedDecode"); 556 if (pVCpu->iem.s.enmCpuVendor == CPUMCPUVENDOR_INTEL) 557 { 558 #ifndef TST_IEM_CHECK_MC 559 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 560 { 561 RTGCPTR GCPtrEff; 562 VBOXSTRICTRC rcStrict = iemOpHlpCalcRmEffAddr(pVCpu, bRm, 0, &GCPtrEff); 563 if (rcStrict != VINF_SUCCESS) 564 return rcStrict; 565 } 566 #endif 567 } 568 IEMOP_HLP_DONE_DECODING(); 569 return IEMOP_RAISE_INVALID_OPCODE(); 570 } 571 572 551 573 /** Invalid with RM byte where both AMD and Intel decodes any additional 552 574 * address encoding bytes. */ -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66808 r66810 227 227 'Uq': ( 'IDX_UseModRM', 'rm', '%Uq', 'Uq', ), 228 228 'UqHi': ( 'IDX_UseModRM', 'rm', '%Uq', 'UqHi', ), 229 'Nq': ( 'IDX_UseModRM', 'rm', '%Qq', 'Nq', ), 229 230 230 231 # ModR/M.rm - memory only. … … 235 236 'Mq': ( 'IDX_UseModRM', 'rm', '%Mq', 'Mq', ), 236 237 'MqWO': ( 'IDX_UseModRM', 'rm', '%Mq', 'Mq', ), 237 'MRO': ( 'IDX_UseModRM', 'rm', '%M', 'M', ),238 'MRW': ( 'IDX_UseModRM', 'rm', '%M', 'M', ),238 'MRO': ( 'IDX_UseModRM', 'rm', '%M', 'M', ), 239 'MRW': ( 'IDX_UseModRM', 'rm', '%M', 'M', ), 239 240 240 241 # ModR/M.reg -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66808 r66810 4322 4322 * @optest op1=1 op2=2 -> op1=2 4323 4323 * @optest op1=0 op2=-42 -> op1=-42 4324 * @oponly4325 4324 */ 4326 4325 FNIEMOP_DEF(iemOp_movq_Vq_Wq) … … 8386 8385 8387 8386 8388 /** Opcode 0xf3 0x0f 0xd6 - movq2dq Vdq, Nq */ 8389 FNIEMOP_STUB(iemOp_movq2dq_Vdq_Nq); 8387 /** 8388 * @opcode 0xd6 8389 * @opcodesub 11 mr/reg 8390 * @oppfx f3 8391 * @opcpuid sse2 8392 * @opgroup og_sse2_simdint_datamove 8393 * @optest op1=1 op2=2 -> op1=2 ftw=0xff 8394 * @optest op1=0 op2=-42 -> op1=-42 ftw=0xff 8395 */ 8396 FNIEMOP_DEF(iemOp_movq2dq_Vdq_Nq) 8397 { 8398 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 8399 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 8400 { 8401 /* 8402 * Register, register. 8403 */ 8404 IEMOP_MNEMONIC2(RM_REG, MOVQ2DQ, movq2dq, VqZxReg, Nq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE); 8405 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8406 IEM_MC_BEGIN(0, 2); 8407 IEM_MC_LOCAL(uint64_t, uSrc); 8408 8409 IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); 8410 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 8411 8412 IEM_MC_FETCH_MREG_U64(uSrc, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 8413 IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, uSrc); 8414 IEM_MC_FPU_TO_MMX_MODE(); 8415 8416 IEM_MC_ADVANCE_RIP(); 8417 IEM_MC_END(); 8418 return VINF_SUCCESS; 8419 } 8420 8421 /** 8422 * @opdone 8423 * @opmnemonic udf30fd6mem 8424 * @opcode 0xd6 8425 * @opcodesub !11 mr/reg 8426 * @oppfx f3 8427 * @opunused intel-modrm 8428 * @opcpuid sse 8429 * @optest -> 8430 */ 8431 return FNIEMOP_CALL_1(iemOp_InvalidWithRMNeedDecode, bRm); 8432 } 8433 8390 8434 /** Opcode 0xf2 0x0f 0xd6 - movdq2q Pq, Uq */ 8391 8435 FNIEMOP_STUB(iemOp_movdq2q_Pq_Uq);
Note:
See TracChangeset
for help on using the changeset viewer.