Changeset 103931 in vbox
- Timestamp:
- Mar 19, 2024 11:47:19 PM (13 months ago)
- svn:sync-xref-src-repo-rev:
- 162305
- Location:
- trunk/src/VBox
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap3.cpp.h
r103926 r103931 542 542 FNIEMOP_DEF(iemOp_vpextrb_Eb_Vdq_Ib) 543 543 { 544 IEMOP_MNEMONIC3(VEX_MRI, VPEXTRB, vpextrb, Eb, Vdq, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_VEX_L_ZERO | IEMOPHINT_VEX_V_ZERO ); /** @todo */544 IEMOP_MNEMONIC3(VEX_MRI, VPEXTRB, vpextrb, Eb, Vdq, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_VEX_L_ZERO | IEMOPHINT_VEX_V_ZERO | IEMOPHINT_IGNORES_REXW); 545 545 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 546 546 if (IEM_IS_MODRM_REG_MODE(bRm)) … … 551 551 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 552 552 IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0); 553 IEM_MC_LOCAL(uint8_t, uValue);554 555 553 IEMOP_HLP_DONE_VEX_DECODING_L0_AND_NO_VVVV_EX(fAvx); 556 554 IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT(); 557 555 IEM_MC_PREPARE_AVX_USAGE(); 558 556 557 IEM_MC_LOCAL(uint8_t, uValue); 559 558 IEM_MC_FETCH_XREG_U8(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 15 /*a_iByte*/); 560 559 IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), uValue); … … 569 568 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); 570 569 IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER, 0); 571 IEM_MC_LOCAL(uint8_t, uValue);572 570 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 573 571 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); … … 577 575 IEM_MC_PREPARE_AVX_USAGE(); 578 576 577 IEM_MC_LOCAL(uint8_t, uValue); 579 578 IEM_MC_FETCH_XREG_U8(uValue, IEM_GET_MODRM_REG(pVCpu, bRm), bImm & 15 /*a_iByte*/); 580 579 IEM_MC_STORE_MEM_U8(pVCpu->iem.s.iEffSeg, GCPtrEffSrc, uValue); -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3-template.mac
r103910 r103931 2182 2182 EMIT_INSTR_PLUS_ICEBP_C64 vpextrb, FSxBX, XMM8, 0FFh 2183 2183 EMIT_INSTR_PLUS_ICEBP_C64 vpextrb, FSxBX, XMM8, 000h 2184 2185 %ifnmacro vpextrb_w1b_edx_xmm1 1 2186 ; special encoding to prove that VEX.W is effectively ignored everywhere and that VEX.B only matter in 64-bit code. 2187 %macro vpextrb_w1b_edx_xmm1 1 2188 db X86_OP_VEX3, 3 | X86_OP_VEX3_BYTE1_X | X86_OP_VEX3_BYTE1_R 2189 db X86_OP_VEX3_BYTE2_P_066H | (X86_OP_VEX3_BYTE2_VVVV_NONE << X86_OP_VEX3_BYTE2_VVVV_SHIFT) | X86_OP_VEX3_BYTE2_W 2190 db 14h, X86_MODRM_MAKE(X86_MOD_REG, 1, X86_GREG_xDX), %1 2191 %endmacro 2192 2193 ; invalid coding where VEX.L=1. 2194 %macro vpextrb_l1_edx_xmm1 1 2195 db X86_OP_VEX3, 3 | X86_OP_VEX3_BYTE1_X | X86_OP_VEX3_BYTE1_R | X86_OP_VEX3_BYTE1_B 2196 db X86_OP_VEX3_BYTE2_P_066H | (X86_OP_VEX3_BYTE2_VVVV_NONE << X86_OP_VEX3_BYTE2_VVVV_SHIFT) | X86_OP_VEX3_BYTE2_L 2197 db 14h, X86_MODRM_MAKE(X86_MOD_REG, 1, X86_GREG_xDX), %1 2198 %endmacro 2199 %endif 2200 EMIT_INSTR_PLUS_ICEBP vpextrb_w1b_edx_xmm1, 0FFh 2201 EMIT_INSTR_PLUS_ICEBP vpextrb_l1_edx_xmm1, 0FFh 2184 2202 2185 2203 ; -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-instr-3.c32
r103910 r103931 9763 9763 { bs3CpuInstr3_vpextrb_FSxBX_XMM1_0FFh_icebp_c16, X86_XCPT_DB, RM_MEM8, T_AVX_128, 1, 8, false, true, 255, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9764 9764 { bs3CpuInstr3_vpextrb_FSxBX_XMM1_000h_icebp_c16, X86_XCPT_DB, RM_MEM8, T_AVX_128, 1, 8, false, true, 255, 1, RT_ELEMENTS(s_aValues00_b), s_aValues00_b }, 9765 { bs3CpuInstr3_vpextrb_w1b_edx_xmm1_0FFh_icebp_c16, 255, RM_REG, T_AVX_128, 4, 32, false, true, 2, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9766 { bs3CpuInstr3_vpextrb_l1_edx_xmm1_0FFh_icebp_c16, 255, RM_REG, T_AVX_128, 4, 32, true, true, 2, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9765 9767 9766 9768 { bs3CpuInstr3_pextrw_EDX_MM1_000h_icebp_c16, 255, RM_REG, T_MMX_SSE, 4, 32, false, true, 2, 1, RT_ELEMENTS(s_aValues00_w), s_aValues00_w }, … … 9799 9801 { bs3CpuInstr3_vpextrb_FSxBX_XMM1_0FFh_icebp_c32, X86_XCPT_DB, RM_MEM8, T_AVX_128, 1, 8, false, true, 255, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9800 9802 { bs3CpuInstr3_vpextrb_FSxBX_XMM1_000h_icebp_c32, X86_XCPT_DB, RM_MEM8, T_AVX_128, 1, 8, false, true, 255, 1, RT_ELEMENTS(s_aValues00_b), s_aValues00_b }, 9803 { bs3CpuInstr3_vpextrb_w1b_edx_xmm1_0FFh_icebp_c32, 255, RM_REG, T_AVX_128, 4, 32, false, true, 2, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9804 { bs3CpuInstr3_vpextrb_l1_edx_xmm1_0FFh_icebp_c32, 255, RM_REG, T_AVX_128, 4, 32, true, true, 2, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9801 9805 9802 9806 { bs3CpuInstr3_pextrw_EDX_MM1_000h_icebp_c32, 255, RM_REG, T_MMX_SSE, 4, 32, false, true, 2, 1, RT_ELEMENTS(s_aValues00_w), s_aValues00_w }, … … 9843 9847 { bs3CpuInstr3_vpextrb_FSxBX_XMM8_0FFh_icebp_c64, X86_XCPT_DB, RM_MEM8, T_AVX_128, 1, 8, false, true, 255, 8, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9844 9848 { bs3CpuInstr3_vpextrb_FSxBX_XMM8_000h_icebp_c64, X86_XCPT_DB, RM_MEM8, T_AVX_128, 1, 8, false, true, 255, 8, RT_ELEMENTS(s_aValues00_b), s_aValues00_b }, 9849 { bs3CpuInstr3_vpextrb_w1b_edx_xmm1_0FFh_icebp_c64, 255, RM_REG, T_AVX_128, 4, 32, false, true, 10, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, /* manually setting VEX.B=1 */ 9850 { bs3CpuInstr3_vpextrb_l1_edx_xmm1_0FFh_icebp_c64, 255, RM_REG, T_AVX_128, 4, 32, true, true, 2, 1, RT_ELEMENTS(s_aValuesFF_b), s_aValuesFF_b }, 9845 9851 9846 9852 { bs3CpuInstr3_pextrw_EDX_MM1_000h_icebp_c64, 255, RM_REG, T_MMX_SSE, 4, 32, false, true, 2, 1, RT_ELEMENTS(s_aValues00_w), s_aValues00_w }, … … 9916 9922 static BS3CPUINSTR3_TEST2_MODE_T const s_aTests[3] = BS3CPUINSTR3_TEST2_MODES_INIT(s_aTests16, s_aTests32, s_aTests64); 9917 9923 unsigned const iTest = BS3CPUINSTR3_TEST_MODES_INDEX(bMode); 9918 return 9924 return bs3CpuInstr3_WorkerTestType2(bMode, s_aTests[iTest].paTests, s_aTests[iTest].cTests, 9919 9925 g_aXcptConfig5, RT_ELEMENTS(g_aXcptConfig5)); 9920 9926 }
Note:
See TracChangeset
for help on using the changeset viewer.