Changeset 67003 in vbox for trunk/src/VBox
- Timestamp:
- May 22, 2017 10:03:15 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 115561
- Location:
- trunk/src/VBox
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h
r66957 r67003 57 57 * @openc ModR/M 58 58 * @opflmodify cf,pf,af,zf,sf,of 59 * @ophints harmless ignores_op_size 59 * @ophints harmless ignores_op_sizes 60 60 * @opstats add_Eb_Gb 61 61 * @opgroup og_gen_arith_bin … … 67 67 FNIEMOP_DEF(iemOp_add_Eb_Gb) 68 68 { 69 IEMOP_MNEMONIC2(MR, ADD, add, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);69 IEMOP_MNEMONIC2(MR, ADD, add, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 70 70 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_add); 71 71 } … … 96 96 FNIEMOP_DEF(iemOp_add_Gb_Eb) 97 97 { 98 IEMOP_MNEMONIC2(RM, ADD, add, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );98 IEMOP_MNEMONIC2(RM, ADD, add, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 99 99 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_add); 100 100 } … … 122 122 FNIEMOP_DEF(iemOp_add_Al_Ib) 123 123 { 124 IEMOP_MNEMONIC2(FIXED, ADD, add, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );124 IEMOP_MNEMONIC2(FIXED, ADD, add, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 125 125 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_add); 126 126 } … … 181 181 FNIEMOP_DEF(iemOp_or_Eb_Gb) 182 182 { 183 IEMOP_MNEMONIC2(MR, OR, or, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);183 IEMOP_MNEMONIC2(MR, OR, or, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 184 184 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 185 185 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_or); … … 218 218 FNIEMOP_DEF(iemOp_or_Gb_Eb) 219 219 { 220 IEMOP_MNEMONIC2(RM, OR, or, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);220 IEMOP_MNEMONIC2(RM, OR, or, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 221 221 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 222 222 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_or); … … 250 250 FNIEMOP_DEF(iemOp_or_Al_Ib) 251 251 { 252 IEMOP_MNEMONIC2(FIXED, OR, or, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );252 IEMOP_MNEMONIC2(FIXED, OR, or, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 253 253 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 254 254 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_or); … … 345 345 FNIEMOP_DEF(iemOp_adc_Eb_Gb) 346 346 { 347 IEMOP_MNEMONIC2(MR, ADC, adc, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);347 IEMOP_MNEMONIC2(MR, ADC, adc, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 348 348 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_adc); 349 349 } … … 377 377 FNIEMOP_DEF(iemOp_adc_Gb_Eb) 378 378 { 379 IEMOP_MNEMONIC2(RM, ADC, adc, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );379 IEMOP_MNEMONIC2(RM, ADC, adc, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 380 380 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_adc); 381 381 } … … 405 405 FNIEMOP_DEF(iemOp_adc_Al_Ib) 406 406 { 407 IEMOP_MNEMONIC2(FIXED, ADC, adc, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );407 IEMOP_MNEMONIC2(FIXED, ADC, adc, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 408 408 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_adc); 409 409 } … … 458 458 FNIEMOP_DEF(iemOp_sbb_Eb_Gb) 459 459 { 460 IEMOP_MNEMONIC2(MR, SBB, sbb, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);460 IEMOP_MNEMONIC2(MR, SBB, sbb, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 461 461 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_sbb); 462 462 } … … 484 484 FNIEMOP_DEF(iemOp_sbb_Gb_Eb) 485 485 { 486 IEMOP_MNEMONIC2(RM, SBB, sbb, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );486 IEMOP_MNEMONIC2(RM, SBB, sbb, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 487 487 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_sbb); 488 488 } … … 510 510 FNIEMOP_DEF(iemOp_sbb_Al_Ib) 511 511 { 512 IEMOP_MNEMONIC2(FIXED, SBB, sbb, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );512 IEMOP_MNEMONIC2(FIXED, SBB, sbb, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 513 513 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_sbb); 514 514 } … … 562 562 FNIEMOP_DEF(iemOp_and_Eb_Gb) 563 563 { 564 IEMOP_MNEMONIC2(MR, AND, and, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);564 IEMOP_MNEMONIC2(MR, AND, and, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 565 565 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 566 566 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_and); … … 592 592 FNIEMOP_DEF(iemOp_and_Gb_Eb) 593 593 { 594 IEMOP_MNEMONIC2(RM, AND, and, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );594 IEMOP_MNEMONIC2(RM, AND, and, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 595 595 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 596 596 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_and); … … 686 686 FNIEMOP_DEF(iemOp_sub_Eb_Gb) 687 687 { 688 IEMOP_MNEMONIC2(MR, SUB, sub, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);688 IEMOP_MNEMONIC2(MR, SUB, sub, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 689 689 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_sub); 690 690 } … … 710 710 FNIEMOP_DEF(iemOp_sub_Gb_Eb) 711 711 { 712 IEMOP_MNEMONIC2(RM, SUB, sub, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );712 IEMOP_MNEMONIC2(RM, SUB, sub, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 713 713 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_sub); 714 714 } … … 734 734 FNIEMOP_DEF(iemOp_sub_Al_Ib) 735 735 { 736 IEMOP_MNEMONIC2(FIXED, SUB, sub, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );736 IEMOP_MNEMONIC2(FIXED, SUB, sub, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 737 737 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_sub); 738 738 } … … 796 796 FNIEMOP_DEF(iemOp_xor_Eb_Gb) 797 797 { 798 IEMOP_MNEMONIC2(MR, XOR, xor, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);798 IEMOP_MNEMONIC2(MR, XOR, xor, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_LOCK_ALLOWED); 799 799 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 800 800 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_xor); … … 826 826 FNIEMOP_DEF(iemOp_xor_Gb_Eb) 827 827 { 828 IEMOP_MNEMONIC2(RM, XOR, xor, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );828 IEMOP_MNEMONIC2(RM, XOR, xor, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 829 829 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 830 830 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_xor); … … 856 856 FNIEMOP_DEF(iemOp_xor_Al_Ib) 857 857 { 858 IEMOP_MNEMONIC2(FIXED, XOR, xor, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );858 IEMOP_MNEMONIC2(FIXED, XOR, xor, AL, Ib, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 859 859 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 860 860 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_AL_Ib, &g_iemAImpl_xor); … … 871 871 FNIEMOP_DEF(iemOp_xor_eAX_Iz) 872 872 { 873 IEMOP_MNEMONIC2(FIXED, XOR, xor, rAX, Iz, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );873 IEMOP_MNEMONIC2(FIXED, XOR, xor, rAX, Iz, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 874 874 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF); 875 875 return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rAX_Iz, &g_iemAImpl_xor); … … 1911 1911 if (pVCpu->iem.s.enmCpuMode != IEMMODE_64BIT) 1912 1912 { 1913 IEMOP_MNEMONIC2(RM_MEM, BOUND, bound, Gv_RO, Ma, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1913 IEMOP_MNEMONIC2(RM_MEM, BOUND, bound, Gv_RO, Ma, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1914 1914 IEMOP_HLP_MIN_186(); 1915 1915 IEM_OPCODE_GET_NEXT_U8(&bRm); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py
r66991 r67003 214 214 # ModR/M.rm 215 215 'Eb': ( 'IDX_UseModRM', 'rm', '%Eb', 'Eb', ), 216 'Ed': ( 'IDX_UseModRM', 'rm', '%Ed', 'Ed', ), 217 'Eq': ( 'IDX_UseModRM', 'rm', '%Eq', 'Eq', ), 216 218 'Ew': ( 'IDX_UseModRM', 'rm', '%Ew', 'Ew', ), 217 219 'Ev': ( 'IDX_UseModRM', 'rm', '%Ev', 'Ev', ), … … 257 259 'Gv': ( 'IDX_UseModRM', 'reg', '%Gv', 'Gv', ), 258 260 'Gv_RO': ( 'IDX_UseModRM', 'reg', '%Gv', 'Gv', ), 261 'Pd': ( 'IDX_UseModRM', 'reg', '%Pd', 'Pd', ), 262 'PdZx_WO': ( 'IDX_UseModRM', 'reg', '%Pd', 'PdZx', ), 263 'Pq': ( 'IDX_UseModRM', 'reg', '%Pq', 'Pq', ), 259 264 'Pq_WO': ( 'IDX_UseModRM', 'reg', '%Pq', 'Pq', ), 260 265 'Vss': ( 'IDX_UseModRM', 'reg', '%Vss', 'Vss', ), … … 380 385 '!11 mr/reg': [ '!11 mr/reg', ], 381 386 '!11': [ '!11 mr/reg', ], ##< alias 387 'rex.w=0': [ 'rex.w=0', ], 388 'w=0': [ 'rex.w=0', ], ##< alias 389 'rex.w=1': [ 'rex.w=1', ], 390 'w=1': [ 'rex.w=1', ], ##< alias 382 391 }; 383 392 … … 485 494 'mmx': 'DISOPTYPE_MMX', ##< MMX,MMXExt,3DNow,++ instruction. Not implemented yet! 486 495 'fpu': 'DISOPTYPE_FPU', ##< FPU instruction. Not implemented yet! 487 'ignores_op_size': '', ##< Ignores both operand size prefixes (66h + REX.W). 496 'ignores_oz_pfx': '', ##< Ignores operand size prefix 66h. 497 'ignores_rexw': '', ##< Ignores REX.W. 498 'ignores_op_sizes': '', ##< Shorthand for "ignores_oz_pfx | ignores_op_sizes". 488 499 'ignores_vex_l': '', ##< Ignores VEX.L. 489 500 'vex_l_zero': '', ##< VEX.L must be 0. … … 1208 1219 'user': 'ring==3', 1209 1220 'supervisor': 'ring==0..2', 1221 '16-bit': 'codebits==16', 1222 '32-bit': 'codebits==32', 1223 '64-bit': 'codebits==64', 1210 1224 'real': 'mode==real', 1211 1225 'prot': 'mode==prot', -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h
r66991 r67003 1001 1001 FNIEMOP_DEF(iemOp_movups_Vps_Wps) 1002 1002 { 1003 IEMOP_MNEMONIC2(RM, MOVUPS, movups, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1003 IEMOP_MNEMONIC2(RM, MOVUPS, movups, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1004 1004 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1005 1005 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1053 1053 FNIEMOP_DEF(iemOp_movupd_Vpd_Wpd) 1054 1054 { 1055 IEMOP_MNEMONIC2(RM, MOVUPD, movupd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1055 IEMOP_MNEMONIC2(RM, MOVUPD, movupd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1056 1056 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1057 1057 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1104 1104 FNIEMOP_DEF(iemOp_movss_Vss_Wss) 1105 1105 { 1106 IEMOP_MNEMONIC2(RM, MOVSS, movss, VssZx_WO, Wss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1106 IEMOP_MNEMONIC2(RM, MOVSS, movss, VssZx_WO, Wss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1107 1107 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1108 1108 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1158 1158 FNIEMOP_DEF(iemOp_movsd_Vsd_Wsd) 1159 1159 { 1160 IEMOP_MNEMONIC2(RM, MOVSD, movsd, VsdZx_WO, Wsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1160 IEMOP_MNEMONIC2(RM, MOVSD, movsd, VsdZx_WO, Wsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1161 1161 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1162 1162 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1212 1212 FNIEMOP_DEF(iemOp_movups_Wps_Vps) 1213 1213 { 1214 IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1214 IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1215 1215 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1216 1216 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1263 1263 FNIEMOP_DEF(iemOp_movupd_Wpd_Vpd) 1264 1264 { 1265 IEMOP_MNEMONIC2(MR, MOVUPD, movupd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1265 IEMOP_MNEMONIC2(MR, MOVUPD, movupd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1266 1266 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1267 1267 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1314 1314 FNIEMOP_DEF(iemOp_movss_Wss_Vss) 1315 1315 { 1316 IEMOP_MNEMONIC2(MR, MOVSS, movss, Wss_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1316 IEMOP_MNEMONIC2(MR, MOVSS, movss, Wss_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1317 1317 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1318 1318 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1368 1368 FNIEMOP_DEF(iemOp_movsd_Wsd_Vsd) 1369 1369 { 1370 IEMOP_MNEMONIC2(MR, MOVSD, movsd, Wsd_WO, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1370 IEMOP_MNEMONIC2(MR, MOVSD, movsd, Wsd_WO, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1371 1371 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1372 1372 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1426 1426 * @optest op1=0 op2=-42 -> op1=-42 1427 1427 */ 1428 IEMOP_MNEMONIC2(RM_REG, MOVHLPS, movhlps, Vq_WO, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1428 IEMOP_MNEMONIC2(RM_REG, MOVHLPS, movhlps, Vq_WO, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1429 1429 1430 1430 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); … … 1454 1454 * @opfunction iemOp_movlps_Vq_Mq__vmovhlps 1455 1455 */ 1456 IEMOP_MNEMONIC2(RM_MEM, MOVLPS, movlps, Vq_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1456 IEMOP_MNEMONIC2(RM_MEM, MOVLPS, movlps, Vq_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1457 1457 1458 1458 IEM_MC_BEGIN(0, 2); … … 1490 1490 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 1491 1491 { 1492 IEMOP_MNEMONIC2(RM_MEM, MOVLPD, movlpd, Vq_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1492 IEMOP_MNEMONIC2(RM_MEM, MOVLPD, movlpd, Vq_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1493 1493 1494 1494 IEM_MC_BEGIN(0, 2); … … 1534 1534 FNIEMOP_DEF(iemOp_movsldup_Vdq_Wdq) 1535 1535 { 1536 IEMOP_MNEMONIC2(RM, MOVSLDUP, movsldup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1536 IEMOP_MNEMONIC2(RM, MOVSLDUP, movsldup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1537 1537 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1538 1538 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1594 1594 FNIEMOP_DEF(iemOp_movddup_Vdq_Wdq) 1595 1595 { 1596 IEMOP_MNEMONIC2(RM, MOVDDUP, movddup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1596 IEMOP_MNEMONIC2(RM, MOVDDUP, movddup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1597 1597 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1598 1598 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 1657 1657 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 1658 1658 { 1659 IEMOP_MNEMONIC2(MR_MEM, MOVLPS, movlps, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1659 IEMOP_MNEMONIC2(MR_MEM, MOVLPS, movlps, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1660 1660 1661 1661 IEM_MC_BEGIN(0, 2); … … 1705 1705 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 1706 1706 { 1707 IEMOP_MNEMONIC2(MR_MEM, MOVLPD, movlpd, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1707 IEMOP_MNEMONIC2(MR_MEM, MOVLPD, movlpd, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1708 1708 IEM_MC_BEGIN(0, 2); 1709 1709 IEM_MC_LOCAL(uint64_t, uSrc); … … 1826 1826 * @optest op1=0 op2=-42 -> op1=-42 1827 1827 */ 1828 IEMOP_MNEMONIC2(RM_REG, MOVLHPS, movlhps, VqHi_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1828 IEMOP_MNEMONIC2(RM_REG, MOVLHPS, movlhps, VqHi_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1829 1829 1830 1830 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); … … 1854 1854 * @opfunction iemOp_movhps_Vdq_Mq__movlhps_Vdq_Uq 1855 1855 */ 1856 IEMOP_MNEMONIC2(RM_MEM, MOVHPS, movhps, VqHi_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1856 IEMOP_MNEMONIC2(RM_MEM, MOVHPS, movhps, VqHi_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1857 1857 1858 1858 IEM_MC_BEGIN(0, 2); … … 1890 1890 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 1891 1891 { 1892 IEMOP_MNEMONIC2(RM_MEM, MOVHPD, movhpd, VqHi_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1892 IEMOP_MNEMONIC2(RM_MEM, MOVHPD, movhpd, VqHi_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1893 1893 IEM_MC_BEGIN(0, 2); 1894 1894 IEM_MC_LOCAL(uint64_t, uSrc); … … 1933 1933 FNIEMOP_DEF(iemOp_movshdup_Vdq_Wdq) 1934 1934 { 1935 IEMOP_MNEMONIC2(RM, MOVSHDUP, movshdup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1935 IEMOP_MNEMONIC2(RM, MOVSHDUP, movshdup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1936 1936 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1937 1937 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 2008 2008 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 2009 2009 { 2010 IEMOP_MNEMONIC2(MR_MEM, MOVHPS, movhps, Mq_WO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2010 IEMOP_MNEMONIC2(MR_MEM, MOVHPS, movhps, Mq_WO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2011 2011 2012 2012 IEM_MC_BEGIN(0, 2); … … 2056 2056 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 2057 2057 { 2058 IEMOP_MNEMONIC2(MR_MEM, MOVHPD, movhpd, Mq_WO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2058 IEMOP_MNEMONIC2(MR_MEM, MOVHPD, movhpd, Mq_WO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2059 2059 2060 2060 IEM_MC_BEGIN(0, 2); … … 2299 2299 FNIEMOP_DEF(iemOp_movaps_Vps_Wps) 2300 2300 { 2301 IEMOP_MNEMONIC2(RM, MOVAPS, movaps, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2301 IEMOP_MNEMONIC2(RM, MOVAPS, movaps, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2302 2302 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2303 2303 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 2349 2349 FNIEMOP_DEF(iemOp_movapd_Vpd_Wpd) 2350 2350 { 2351 IEMOP_MNEMONIC2(RM, MOVAPD, movapd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2351 IEMOP_MNEMONIC2(RM, MOVAPD, movapd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2352 2352 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2353 2353 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 2402 2402 FNIEMOP_DEF(iemOp_movaps_Wps_Vps) 2403 2403 { 2404 IEMOP_MNEMONIC2(MR, MOVAPS, movaps, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2404 IEMOP_MNEMONIC2(MR, MOVAPS, movaps, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2405 2405 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2406 2406 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 2452 2452 FNIEMOP_DEF(iemOp_movapd_Wpd_Vpd) 2453 2453 { 2454 IEMOP_MNEMONIC2(MR, MOVAPD, movapd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2454 IEMOP_MNEMONIC2(MR, MOVAPD, movapd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2455 2455 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2456 2456 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 2517 2517 FNIEMOP_DEF(iemOp_movntps_Mps_Vps) 2518 2518 { 2519 IEMOP_MNEMONIC2(MR_MEM, MOVNTPS, movntps, Mps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2519 IEMOP_MNEMONIC2(MR_MEM, MOVNTPS, movntps, Mps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2520 2520 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2521 2521 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) … … 2557 2557 FNIEMOP_DEF(iemOp_movntpd_Mpd_Vpd) 2558 2558 { 2559 IEMOP_MNEMONIC2(MR_MEM, MOVNTPD, movntpd, Mpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2559 IEMOP_MNEMONIC2(MR_MEM, MOVNTPD, movntpd, Mpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2560 2560 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 2561 2561 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) … … 3450 3450 3451 3451 3452 /** Opcode 0x0f 0x6e - movd/q Pd, Ey */3453 3452 FNIEMOP_DEF(iemOp_movd_q_Pd_Ey) 3454 3453 { 3455 3454 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 3456 3455 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 3457 IEMOP_MNEMONIC(movq_Pq_Eq, "movq Pq,Eq"); 3458 else 3459 IEMOP_MNEMONIC(movd_Pd_Ed, "movd Pd,Ed"); 3460 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 3461 { 3462 /* MMX, greg */ 3463 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3464 IEM_MC_BEGIN(0, 1); 3465 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3466 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 3467 IEM_MC_LOCAL(uint64_t, u64Tmp); 3468 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W) 3456 { 3457 /** 3458 * @opcode 0x6e 3459 * @opcodesub rex.w=1 3460 * @oppfx none 3461 * @opcpuid mmx 3462 * @opgroup og_mmx_datamove 3463 * @opxcpttype 5 3464 * @optest 64-bit / op1=1 op2=2 -> op1=2 ftw=0xff 3465 * @optest 64-bit / op1=0 op2=-42 -> op1=-42 ftw=0xff 3466 */ 3467 IEMOP_MNEMONIC2(RM, MOVQ, movq, Pq_WO, Eq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3468 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 3469 { 3470 /* MMX, greg64 */ 3471 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3472 IEM_MC_BEGIN(0, 1); 3473 IEM_MC_LOCAL(uint64_t, u64Tmp); 3474 3475 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3476 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 3477 3469 3478 IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 3470 else3471 IEM_MC_FETCH_GREG_U32_ZX_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);3472 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp);3473 IEM_MC_ADVANCE_RIP();3474 IEM_MC_END();3475 }3476 else3477 {3478 /* MMX, [mem] */3479 IEM_MC_BEGIN(0, 2);3480 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);3481 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT();3482 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);3483 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();3484 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE();3485 if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)3486 {3487 IEM_MC_LOCAL(uint64_t, u64Tmp);3488 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);3489 3479 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 3480 IEM_MC_FPU_TO_MMX_MODE(); 3481 3482 IEM_MC_ADVANCE_RIP(); 3483 IEM_MC_END(); 3490 3484 } 3491 3485 else 3492 3486 { 3487 /* MMX, [mem64] */ 3488 IEM_MC_BEGIN(0, 2); 3489 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 3490 IEM_MC_LOCAL(uint64_t, u64Tmp); 3491 3492 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3493 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 3494 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3495 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 3496 3497 IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 3498 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 3499 IEM_MC_FPU_TO_MMX_MODE(); 3500 3501 IEM_MC_ADVANCE_RIP(); 3502 IEM_MC_END(); 3503 } 3504 } 3505 else 3506 { 3507 /** 3508 * @opdone 3509 * @opcode 0x6e 3510 * @opcodesub rex.w=0 3511 * @oppfx none 3512 * @opcpuid mmx 3513 * @opgroup og_mmx_datamove 3514 * @opxcpttype 5 3515 * @opfunction iemOp_movd_q_Pd_Ey 3516 * @optest op1=1 op2=2 -> op1=2 ftw=0xff 3517 * @optest op1=0 op2=-42 -> op1=-42 ftw=0xff 3518 */ 3519 IEMOP_MNEMONIC2(RM, MOVD, movd, PdZx_WO, Ed, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3520 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) 3521 { 3522 /* MMX, greg */ 3523 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3524 IEM_MC_BEGIN(0, 1); 3525 IEM_MC_LOCAL(uint64_t, u64Tmp); 3526 3527 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3528 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 3529 3530 IEM_MC_FETCH_GREG_U32_ZX_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB); 3531 IEM_MC_STORE_MREG_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u64Tmp); 3532 IEM_MC_FPU_TO_MMX_MODE(); 3533 3534 IEM_MC_ADVANCE_RIP(); 3535 IEM_MC_END(); 3536 } 3537 else 3538 { 3539 /* MMX, [mem] */ 3540 IEM_MC_BEGIN(0, 2); 3541 IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc); 3493 3542 IEM_MC_LOCAL(uint32_t, u32Tmp); 3543 3544 IEM_MC_MAYBE_RAISE_MMX_RELATED_XCPT(); 3545 IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0); 3546 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 3547 IEM_MC_ACTUALIZE_FPU_STATE_FOR_CHANGE(); 3548 3494 3549 IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc); 3495 3550 IEM_MC_STORE_MREG_U32_ZX_U64((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK, u32Tmp); 3551 IEM_MC_FPU_TO_MMX_MODE(); 3552 3553 IEM_MC_ADVANCE_RIP(); 3554 IEM_MC_END(); 3496 3555 } 3497 IEM_MC_ADVANCE_RIP();3498 IEM_MC_END();3499 3556 } 3500 3557 return VINF_SUCCESS; … … 4375 4432 FNIEMOP_DEF(iemOp_movq_Vq_Wq) 4376 4433 { 4377 IEMOP_MNEMONIC2(RM, MOVQ, movq, VqZx_WO, Wq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );4434 IEMOP_MNEMONIC2(RM, MOVQ, movq, VqZx_WO, Wq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 4378 4435 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 4379 4436 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 6503 6560 FNIEMOP_DEF_1(iemOp_Grp15_ldmxcsr, uint8_t, bRm) 6504 6561 { 6505 IEMOP_MNEMONIC1(M_MEM, LDMXCSR, ldmxcsr, Md_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );6562 IEMOP_MNEMONIC1(M_MEM, LDMXCSR, ldmxcsr, Md_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 6506 6563 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse) 6507 6564 return IEMOP_RAISE_INVALID_OPCODE(); … … 6540 6597 FNIEMOP_DEF_1(iemOp_Grp15_stmxcsr, uint8_t, bRm) 6541 6598 { 6542 IEMOP_MNEMONIC1(M_MEM, STMXCSR, stmxcsr, Md_WO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );6599 IEMOP_MNEMONIC1(M_MEM, STMXCSR, stmxcsr, Md_WO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 6543 6600 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse) 6544 6601 return IEMOP_RAISE_INVALID_OPCODE(); … … 6625 6682 FNIEMOP_DEF_1(iemOp_Grp15_clflush, uint8_t, bRm) 6626 6683 { 6627 IEMOP_MNEMONIC1(M_MEM, CLFLUSH, clflush, Mb_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );6684 IEMOP_MNEMONIC1(M_MEM, CLFLUSH, clflush, Mb_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 6628 6685 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fClFlush) 6629 6686 return FNIEMOP_CALL_1(iemOp_InvalidWithRMAllNeeded, bRm); … … 6650 6707 FNIEMOP_DEF_1(iemOp_Grp15_clflushopt, uint8_t, bRm) 6651 6708 { 6652 IEMOP_MNEMONIC1(M_MEM, CLFLUSHOPT, clflushopt, Mb_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );6709 IEMOP_MNEMONIC1(M_MEM, CLFLUSHOPT, clflushopt, Mb_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 6653 6710 if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fClFlushOpt) 6654 6711 return FNIEMOP_CALL_1(iemOp_InvalidWithRMAllNeeded, bRm); … … 7343 7400 */ 7344 7401 Log(("iemOp_Grp10 aka UD1 -> #UD\n")); 7345 IEMOP_MNEMONIC2EX(ud1, "ud1", RM, UD1, ud1, Gb, Eb, DISOPTYPE_INVALID, IEMOPHINT_IGNORES_OP_SIZE ); /* just picked Gb,Eb here. */7402 IEMOP_MNEMONIC2EX(ud1, "ud1", RM, UD1, ud1, Gb, Eb, DISOPTYPE_INVALID, IEMOPHINT_IGNORES_OP_SIZES); /* just picked Gb,Eb here. */ 7346 7403 return FNIEMOP_CALL(iemOp_InvalidNeedRM); 7347 7404 } … … 8391 8448 FNIEMOP_DEF(iemOp_movq_Wq_Vq) 8392 8449 { 8393 IEMOP_MNEMONIC2(MR, MOVQ, movq, WqZxReg_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );8450 IEMOP_MNEMONIC2(MR, MOVQ, movq, WqZxReg_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 8394 8451 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 8395 8452 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 8452 8509 * Register, register. 8453 8510 */ 8454 IEMOP_MNEMONIC2(RM_REG, MOVQ2DQ, movq2dq, VqZx_WO, Nq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );8511 IEMOP_MNEMONIC2(RM_REG, MOVQ2DQ, movq2dq, VqZx_WO, Nq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 8455 8512 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8456 8513 IEM_MC_BEGIN(0, 1); … … 8504 8561 * Register, register. 8505 8562 */ 8506 IEMOP_MNEMONIC2(RM_REG, MOVDQ2Q, movdq2q, Pq_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );8563 IEMOP_MNEMONIC2(RM_REG, MOVDQ2Q, movdq2q, Pq_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 8507 8564 IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX(); 8508 8565 IEM_MC_BEGIN(0, 1); -
trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h
r66992 r67003 61 61 FNIEMOP_DEF(iemOp_vmovups_Vps_Wps) 62 62 { 63 IEMOP_MNEMONIC2(VEX_RM, VMOVUPS, vmovups, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );63 IEMOP_MNEMONIC2(VEX_RM, VMOVUPS, vmovups, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 64 64 Assert(pVCpu->iem.s.uVexLength <= 1); 65 65 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 137 137 FNIEMOP_DEF(iemOp_vmovupd_Vpd_Wpd) 138 138 { 139 IEMOP_MNEMONIC2(VEX_RM, VMOVUPD, vmovupd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );139 IEMOP_MNEMONIC2(VEX_RM, VMOVUPD, vmovupd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 140 140 Assert(pVCpu->iem.s.uVexLength <= 1); 141 141 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 221 221 * @note HssHi refers to bits 127:32. 222 222 */ 223 IEMOP_MNEMONIC3(VEX_RVM, VMOVSS, vmovss, Vss_WO, HssHi, Uss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);223 IEMOP_MNEMONIC3(VEX_RVM, VMOVSS, vmovss, Vss_WO, HssHi, Uss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 224 224 IEMOP_HLP_DONE_VEX_DECODING(); 225 225 IEM_MC_BEGIN(0, 0); … … 247 247 * @optest op1=0 op2=-22 -> op1=-22 248 248 */ 249 IEMOP_MNEMONIC2(VEX_XM, VMOVSS, vmovss, VssZx_WO, Md, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);249 IEMOP_MNEMONIC2(VEX_XM, VMOVSS, vmovss, VssZx_WO, Md, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 250 250 IEM_MC_BEGIN(0, 2); 251 251 IEM_MC_LOCAL(uint32_t, uSrc); … … 287 287 * @optest op1=3 op2=0x42 op3=0x77 -> op1=0x420000000000000077 288 288 */ 289 IEMOP_MNEMONIC3(VEX_RVM, VMOVSD, vmovsd, Vsd_WO, HsdHi, Usd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);289 IEMOP_MNEMONIC3(VEX_RVM, VMOVSD, vmovsd, Vsd_WO, HsdHi, Usd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 290 290 IEMOP_HLP_DONE_VEX_DECODING(); 291 291 IEM_MC_BEGIN(0, 0); … … 313 313 * @optest op1=0 op2=-22 -> op1=-22 314 314 */ 315 IEMOP_MNEMONIC2(VEX_XM, VMOVSD, vmovsd, VsdZx_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);315 IEMOP_MNEMONIC2(VEX_XM, VMOVSD, vmovsd, VsdZx_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 316 316 IEM_MC_BEGIN(0, 2); 317 317 IEM_MC_LOCAL(uint64_t, uSrc); … … 345 345 FNIEMOP_DEF(iemOp_vmovups_Wps_Vps) 346 346 { 347 IEMOP_MNEMONIC2(VEX_MR, VMOVUPS, vmovups, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );347 IEMOP_MNEMONIC2(VEX_MR, VMOVUPS, vmovups, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 348 348 Assert(pVCpu->iem.s.uVexLength <= 1); 349 349 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 421 421 FNIEMOP_DEF(iemOp_vmovupd_Wpd_Vpd) 422 422 { 423 IEMOP_MNEMONIC2(VEX_MR, VMOVUPD, vmovupd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );423 IEMOP_MNEMONIC2(VEX_MR, VMOVUPD, vmovupd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 424 424 Assert(pVCpu->iem.s.uVexLength <= 1); 425 425 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 504 504 * @optest op1=3 op2=0x42 op3=0x77 -> op1=0x4200000077 505 505 */ 506 IEMOP_MNEMONIC3(VEX_MVR, VMOVSS, vmovss, Uss_WO, HssHi, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);506 IEMOP_MNEMONIC3(VEX_MVR, VMOVSS, vmovss, Uss_WO, HssHi, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 507 507 IEMOP_HLP_DONE_VEX_DECODING(); 508 508 IEM_MC_BEGIN(0, 0); … … 530 530 * @optest op1=0 op2=-22 -> op1=-22 531 531 */ 532 IEMOP_MNEMONIC2(VEX_MR, VMOVSS, vmovss, Md_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);532 IEMOP_MNEMONIC2(VEX_MR, VMOVSS, vmovss, Md_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 533 533 IEM_MC_BEGIN(0, 2); 534 534 IEM_MC_LOCAL(uint32_t, uSrc); … … 570 570 * @optest op2=0x42 op3=0x77 -> op1=0x420000000000000077 571 571 */ 572 IEMOP_MNEMONIC3(VEX_MVR, VMOVSD, vmovsd, Usd_WO, HsdHi, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);572 IEMOP_MNEMONIC3(VEX_MVR, VMOVSD, vmovsd, Usd_WO, HsdHi, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 573 573 IEMOP_HLP_DONE_VEX_DECODING(); 574 574 IEM_MC_BEGIN(0, 0); … … 596 596 * @optest op1=0 op2=-22 -> op1=-22 597 597 */ 598 IEMOP_MNEMONIC2(VEX_MR, VMOVSD, vmovsd, Mq_WO, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_IGNORES_VEX_L);598 IEMOP_MNEMONIC2(VEX_MR, VMOVSD, vmovsd, Mq_WO, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_IGNORES_VEX_L); 599 599 IEM_MC_BEGIN(0, 2); 600 600 IEM_MC_LOCAL(uint64_t, uSrc); … … 635 635 * @note op3 and op2 are only the 8-byte high XMM register halfs. 636 636 */ 637 IEMOP_MNEMONIC3(VEX_RVM, VMOVHLPS, vmovhlps, Vq_WO, HqHi, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_VEX_L_ZERO);637 IEMOP_MNEMONIC3(VEX_RVM, VMOVHLPS, vmovhlps, Vq_WO, HqHi, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); 638 638 639 639 IEMOP_HLP_DONE_VEX_DECODING_L0(); … … 665 665 * @optest op2=-1 op3=0x42 -> op1=0xffffffffffffffff0000000000000042 666 666 */ 667 IEMOP_MNEMONIC3(VEX_RVM_MEM, VMOVLPS, vmovlps, Vq_WO, HqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_VEX_L_ZERO);667 IEMOP_MNEMONIC3(VEX_RVM_MEM, VMOVLPS, vmovlps, Vq_WO, HqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); 668 668 669 669 IEM_MC_BEGIN(0, 2); … … 705 705 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 706 706 { 707 IEMOP_MNEMONIC3(VEX_RVM_MEM, VMOVLPD, vmovlpd, Vq_WO, HqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_VEX_L_ZERO);707 IEMOP_MNEMONIC3(VEX_RVM_MEM, VMOVLPD, vmovlpd, Vq_WO, HqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); 708 708 709 709 IEM_MC_BEGIN(0, 2); … … 754 754 FNIEMOP_DEF(iemOp_vmovsldup_Vx_Wx) 755 755 { 756 IEMOP_MNEMONIC2(VEX_RM, VMOVSLDUP, vmovsldup, Vx_WO, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );756 IEMOP_MNEMONIC2(VEX_RM, VMOVSLDUP, vmovsldup, Vx_WO, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 757 757 Assert(pVCpu->iem.s.uVexLength <= 1); 758 758 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 859 859 FNIEMOP_DEF(iemOp_vmovddup_Vx_Wx) 860 860 { 861 IEMOP_MNEMONIC2(VEX_RM, VMOVDDUP, vmovddup, Vx_WO, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );861 IEMOP_MNEMONIC2(VEX_RM, VMOVDDUP, vmovddup, Vx_WO, Wx, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 862 862 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 863 863 if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) … … 964 964 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 965 965 { 966 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVLPS, vmovlps, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_VEX_L_ZERO);966 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVLPS, vmovlps, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); 967 967 968 968 IEM_MC_BEGIN(0, 2); … … 1012 1012 if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT)) 1013 1013 { 1014 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVLPD, vmovlpd, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_VEX_L_ZERO);1014 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVLPD, vmovlpd, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES | IEMOPHINT_VEX_L_ZERO); 1015 1015 IEM_MC_BEGIN(0, 2); 1016 1016 IEM_MC_LOCAL(uint64_t, uSrc); … … 1103 1103 FNIEMOP_DEF(iemOp_vmovaps_Vps_Wps) 1104 1104 { 1105 IEMOP_MNEMONIC2(VEX_RM, VMOVAPS, vmovaps, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1105 IEMOP_MNEMONIC2(VEX_RM, VMOVAPS, vmovaps, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1106 1106 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1107 1107 Assert(pVCpu->iem.s.uVexLength <= 1); … … 1181 1181 FNIEMOP_DEF(iemOp_vmovapd_Vpd_Wpd) 1182 1182 { 1183 IEMOP_MNEMONIC2(VEX_RM, VMOVAPD, vmovapd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1183 IEMOP_MNEMONIC2(VEX_RM, VMOVAPD, vmovapd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1184 1184 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1185 1185 Assert(pVCpu->iem.s.uVexLength <= 1); … … 1278 1278 FNIEMOP_DEF(iemOp_vmovaps_Wps_Vps) 1279 1279 { 1280 IEMOP_MNEMONIC2(VEX_MR, VMOVAPS, vmovaps, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1280 IEMOP_MNEMONIC2(VEX_MR, VMOVAPS, vmovaps, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1281 1281 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 1282 1282 Assert(pVCpu->iem.s.uVexLength <= 1); … … 1355 1355 FNIEMOP_DEF(iemOp_vmovapd_Wpd_Vpd) 1356 1356 { 1357 IEMOP_MNEMONIC2(VEX_MR, VMOVAPD, vmovapd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1357 IEMOP_MNEMONIC2(VEX_MR, VMOVAPD, vmovapd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1358 1358 Assert(pVCpu->iem.s.uVexLength <= 1); 1359 1359 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 1459 1459 * @optest op1=1 op2=2 -> op1=2 1460 1460 * @optest op1=0 op2=-42 -> op1=-42 1461 * @oponly1462 1461 * @note Identical implementation to vmovntpd 1463 1462 */ 1464 1463 FNIEMOP_DEF(iemOp_vmovntps_Mps_Vps) 1465 1464 { 1466 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVNTPS, vmovntps, Mps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1465 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVNTPS, vmovntps, Mps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1467 1466 Assert(pVCpu->iem.s.uVexLength <= 1); 1468 1467 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 1522 1521 * @optest op1=1 op2=2 -> op1=2 1523 1522 * @optest op1=0 op2=-42 -> op1=-42 1524 * @oponly1525 1523 * @note Identical implementation to vmovntps 1526 1524 */ 1527 1525 FNIEMOP_DEF(iemOp_vmovntpd_Mpd_Vpd) 1528 1526 { 1529 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVNTPD, vmovntpd, Mpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );1527 IEMOP_MNEMONIC2(VEX_MR_MEM, VMOVNTPD, vmovntpd, Mpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 1530 1528 Assert(pVCpu->iem.s.uVexLength <= 1); 1531 1529 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); … … 1583 1581 * @opcpuid avx 1584 1582 * @optest -> 1585 * @oponly1586 1583 * @opdone 1587 1584 */ … … 1594 1591 * @opcpuid avx 1595 1592 * @optest -> 1596 * @oponly1597 1593 * @opdone 1598 1594 */ … … 2048 2044 /** Opcode VEX.66.0F 0x6e - vmovd/q Vy, Ey */ 2049 2045 FNIEMOP_STUB(iemOp_vmovd_q_Vy_Ey); 2050 //FNIEMOP_DEF(iemOp_vmovd_q_Vy_Ey)2051 //{2052 // uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);2053 // if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)2054 // IEMOP_MNEMONIC(vmovdq_Wq_Eq, "vmovq Wq,Eq");2055 // else2056 // IEMOP_MNEMONIC(vmovdq_Wd_Ed, "vmovd Wd,Ed");2057 // if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))2058 // {2059 // /* XMM, greg*/2060 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();2061 // IEM_MC_BEGIN(0, 1);2062 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT();2063 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();2064 // if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)2065 // {2066 // IEM_MC_LOCAL(uint64_t, u64Tmp);2067 // IEM_MC_FETCH_GREG_U64(u64Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);2068 // IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp);2069 // }2070 // else2071 // {2072 // IEM_MC_LOCAL(uint32_t, u32Tmp);2073 // IEM_MC_FETCH_GREG_U32(u32Tmp, (bRm & X86_MODRM_RM_MASK) | pVCpu->iem.s.uRexB);2074 // IEM_MC_STORE_XREG_U32_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp);2075 // }2076 // IEM_MC_ADVANCE_RIP();2077 // IEM_MC_END();2078 // }2079 // else2080 // {2081 // /* XMM, [mem] */2082 // IEM_MC_BEGIN(0, 2);2083 // IEM_MC_LOCAL(RTGCPTR, GCPtrEffSrc);2084 // IEM_MC_MAYBE_RAISE_SSE2_RELATED_XCPT(); /** @todo order */2085 // IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 1);2086 // IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();2087 // IEM_MC_ACTUALIZE_SSE_STATE_FOR_CHANGE();2088 // if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)2089 // {2090 // IEM_MC_LOCAL(uint64_t, u64Tmp);2091 // IEM_MC_FETCH_MEM_U64(u64Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);2092 // IEM_MC_STORE_XREG_U64_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u64Tmp);2093 // }2094 // else2095 // {2096 // IEM_MC_LOCAL(uint32_t, u32Tmp);2097 // IEM_MC_FETCH_MEM_U32(u32Tmp, pVCpu->iem.s.iEffSeg, GCPtrEffSrc);2098 // IEM_MC_STORE_XREG_U32_ZX_U128(((bRm >> X86_MODRM_REG_SHIFT) & X86_MODRM_REG_SMASK) | pVCpu->iem.s.uRexReg, u32Tmp);2099 // }2100 // IEM_MC_ADVANCE_RIP();2101 // IEM_MC_END();2102 // }2103 // return VINF_SUCCESS;2104 //}2105 2046 2106 2047 /* Opcode VEX.F3.0F 0x6e - invalid */ … … 2851 2792 //FNIEMOP_DEF_1(iemOp_VGrp15_vldmxcsr, uint8_t, bRm) 2852 2793 //{ 2853 // IEMOP_MNEMONIC1(M_MEM, VLDMXCSR, vldmxcsr, MdRO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2794 // IEMOP_MNEMONIC1(M_MEM, VLDMXCSR, vldmxcsr, MdRO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2854 2795 // if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse) 2855 2796 // return IEMOP_RAISE_INVALID_OPCODE(); … … 2908 2849 FNIEMOP_DEF_1(iemOp_VGrp15_vstmxcsr, uint8_t, bRm) 2909 2850 { 2910 IEMOP_MNEMONIC1(VEX_M_MEM, VSTMXCSR, vstmxcsr, Md_WO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );2851 IEMOP_MNEMONIC1(VEX_M_MEM, VSTMXCSR, vstmxcsr, Md_WO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 2911 2852 IEM_MC_BEGIN(2, 0); 2912 2853 IEM_MC_ARG(uint8_t, iEffSeg, 0); … … 3095 3036 //FNIEMOP_DEF(iemOp_vmovq_Wq_Vq) 3096 3037 //{ 3097 // IEMOP_MNEMONIC2(MR, VMOVQ, vmovq, WqZxReg, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE );3038 // IEMOP_MNEMONIC2(MR, VMOVQ, vmovq, WqZxReg, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZES); 3098 3039 // uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); 3099 3040 // if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT)) -
trunk/src/VBox/VMM/include/IEMInternal.h
r66966 r67003 954 954 * @note These are ORed together with IEMOPFORM_XXX. 955 955 * @{ */ 956 /** Both the operand size prefixes are ignored. */ 957 #define IEMOPHINT_IGNORES_OP_SIZE RT_BIT_32(10) 956 /** Ignores the operand size prefix (66h). */ 957 #define IEMOPHINT_IGNORES_OZ_PFX RT_BIT_32(10) 958 /** Ignores REX.W. */ 959 #define IEMOPHINT_IGNORES_REXW RT_BIT_32(11) 960 /** Both the operand size prefixes (66h + REX.W) are ignored. */ 961 #define IEMOPHINT_IGNORES_OP_SIZES (IEMOPHINT_IGNORES_OZ_PFX | IEMOPHINT_IGNORES_REXW) 958 962 /** Allowed with the lock prefix. */ 959 963 #define IEMOPHINT_LOCK_ALLOWED RT_BIT_32(11) -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-data.py
r66976 r67003 305 305 for oOp in oInstr.aoOperands: 306 306 self.sEncoding += '_' + oOp.sType; 307 if oInstr.sSubOpcode == 'rex.w=1': self.sEncoding += '_WNZ'; 308 elif oInstr.sSubOpcode == 'rex.w=0': self.sEncoding += '_WZ'; 309 307 310 if oInstr.fUnused: 308 311 if oInstr.sInvalidStyle == 'immediate' and oInstr.sSubOpcode: -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1-template.c
r66992 r67003 471 471 /* [BS3CG1DST_MM6] = */ 8, 472 472 /* [BS3CG1DST_MM7] = */ 8, 473 /* [BS3CG1DST_MM0_LO_ZX] = */ 4, 474 /* [BS3CG1DST_MM1_LO_ZX] = */ 4, 475 /* [BS3CG1DST_MM2_LO_ZX] = */ 4, 476 /* [BS3CG1DST_MM3_LO_ZX] = */ 4, 477 /* [BS3CG1DST_MM4_LO_ZX] = */ 4, 478 /* [BS3CG1DST_MM5_LO_ZX] = */ 4, 479 /* [BS3CG1DST_MM6_LO_ZX] = */ 4, 480 /* [BS3CG1DST_MM7_LO_ZX] = */ 4, 473 481 /* [BS3CG1DST_XMM0] = */ 16, 474 482 /* [BS3CG1DST_XMM1] = */ 16, … … 734 742 /* [BS3CG1DST_MM6] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[6]), 735 743 /* [BS3CG1DST_MM7] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[7]), 744 /* [BS3CG1DST_MM0_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[0]), 745 /* [BS3CG1DST_MM1_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[1]), 746 /* [BS3CG1DST_MM2_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[2]), 747 /* [BS3CG1DST_MM3_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[3]), 748 /* [BS3CG1DST_MM4_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[4]), 749 /* [BS3CG1DST_MM5_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[5]), 750 /* [BS3CG1DST_MM6_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[6]), 751 /* [BS3CG1DST_MM7_LO_ZX] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aRegs[7]), 736 752 737 753 /* [BS3CG1DST_XMM0] = */ sizeof(BS3REGCTX) + RT_OFFSETOF(BS3EXTCTX, Ctx.x87.aXMM[0]), … … 999 1015 { "MM6" }, 1000 1016 { "MM7" }, 1017 { "MM0_LO_ZX" }, 1018 { "MM1_LO_ZX" }, 1019 { "MM2_LO_ZX" }, 1020 { "MM3_LO_ZX" }, 1021 { "MM4_LO_ZX" }, 1022 { "MM5_LO_ZX" }, 1023 { "MM6_LO_ZX" }, 1024 { "MM7_LO_ZX" }, 1001 1025 { "XMM0" }, 1002 1026 { "XMM1" }, … … 1293 1317 1294 1318 static unsigned BS3_NEAR_CODE Bs3Cfg1EncodeMemMod0Disp(PBS3CG1STATE pThis, bool fAddrOverride, unsigned off, uint8_t iReg, 1295 uint8_t cbOp, uint8_t cbMis salign, BS3CG1OPLOC enmLocation)1319 uint8_t cbOp, uint8_t cbMisalign, BS3CG1OPLOC enmLocation) 1296 1320 { 1297 1321 pThis->aOperands[pThis->iRmOp].idxField = BS3CG1DST_INVALID; 1298 1322 pThis->aOperands[pThis->iRmOp].enmLocation = enmLocation; 1299 1323 pThis->aOperands[pThis->iRmOp].cbOp = cbOp; 1300 pThis->aOperands[pThis->iRmOp].off = cbOp + cbMis salign;1324 pThis->aOperands[pThis->iRmOp].off = cbOp + cbMisalign; 1301 1325 1302 1326 if ( BS3_MODE_IS_16BIT_CODE(pThis->bMode) … … 1317 1341 { 1318 1342 pThis->abCurInstr[off++] = X86_MODRM_MAKE(0, iReg, 6 /*disp16*/); 1319 *(uint16_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp - cbMis salign;1343 *(uint16_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp - cbMisalign; 1320 1344 off += 2; 1321 1345 } … … 1323 1347 { 1324 1348 pThis->abCurInstr[off++] = X86_MODRM_MAKE(0, iReg, 5 /*disp32*/); 1325 *(uint32_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp - cbMis salign;1349 *(uint32_t *)&pThis->abCurInstr[off] = pThis->DataPgFar.off + X86_PAGE_SIZE - cbOp - cbMisalign; 1326 1350 off += 4; 1327 1351 } … … 1334 1358 */ 1335 1359 pThis->abCurInstr[off++] = X86_MODRM_MAKE(0, iReg, 5 /*disp32*/); 1336 *(uint32_t *)&pThis->abCurInstr[off] = BS3_FP_OFF(pThis->pbDataPg) + X86_PAGE_SIZE - cbOp - cbMis salign;1360 *(uint32_t *)&pThis->abCurInstr[off] = BS3_FP_OFF(pThis->pbDataPg) + X86_PAGE_SIZE - cbOp - cbMisalign; 1337 1361 1338 1362 #if ARCH_BITS == 64 … … 1347 1371 * Fill the memory with 0xcc. 1348 1372 */ 1349 switch (cbOp + cbMis salign)1373 switch (cbOp + cbMisalign) 1350 1374 { 1351 1375 case 8: pThis->pbDataPg[X86_PAGE_SIZE - 8] = 0xcc; /* fall thru */ … … 1360 1384 default: 1361 1385 { 1362 BS3CG1_DPRINTF(("Bs3MemSet(%p,%#x,%#x)\n", &pThis->pbDataPg[X86_PAGE_SIZE - cbOp - cbMis salign], 0xcc, cbOp - cbMissalign));1363 Bs3MemSet(&pThis->pbDataPg[X86_PAGE_SIZE - cbOp - cbMis salign], 0xcc, cbOp - cbMissalign);1386 BS3CG1_DPRINTF(("Bs3MemSet(%p,%#x,%#x)\n", &pThis->pbDataPg[X86_PAGE_SIZE - cbOp - cbMisalign], 0xcc, cbOp - cbMisalign)); 1387 Bs3MemSet(&pThis->pbDataPg[X86_PAGE_SIZE - cbOp - cbMisalign], 0xcc, cbOp - cbMisalign); 1364 1388 break; 1365 1389 } … … 1374 1398 static unsigned BS3_NEAR_CODE 1375 1399 Bs3Cfg1EncodeMemMod0DispWithRegField(PBS3CG1STATE pThis, bool fAddrOverride, unsigned off, uint8_t iReg, 1376 uint8_t cbOp, uint8_t cbMis salign, BS3CG1OPLOC enmLocation)1400 uint8_t cbOp, uint8_t cbMisalign, BS3CG1OPLOC enmLocation) 1377 1401 { 1378 1402 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + iReg; 1379 return Bs3Cfg1EncodeMemMod0Disp(pThis, fAddrOverride, off, iReg & 7, cbOp, cbMis salign, enmLocation);1403 return Bs3Cfg1EncodeMemMod0Disp(pThis, fAddrOverride, off, iReg & 7, cbOp, cbMisalign, enmLocation); 1380 1404 } 1381 1405 #endif … … 1384 1408 static unsigned BS3_NEAR_CODE 1385 1409 Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(PBS3CG1STATE pThis, bool fAddrOverride, unsigned off, 1386 uint8_t iReg, uint8_t cbMis salign)1410 uint8_t iReg, uint8_t cbMisalign) 1387 1411 { 1388 1412 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + iReg; 1389 return Bs3Cfg1EncodeMemMod0Disp(pThis, fAddrOverride, off, iReg & 7, pThis->aOperands[pThis->iRmOp].cbOp, cbMis salign,1413 return Bs3Cfg1EncodeMemMod0Disp(pThis, fAddrOverride, off, iReg & 7, pThis->aOperands[pThis->iRmOp].cbOp, cbMisalign, 1390 1414 pThis->aOperands[pThis->iRmOp].enmLocation); 1391 1415 } … … 1555 1579 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_DW0; 1556 1580 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1557 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 4, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM_WO);1581 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 4, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM_WO); 1558 1582 } 1559 1583 else … … 1584 1608 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_LO; 1585 1609 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1586 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM_WO);1610 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM_WO); 1587 1611 } 1588 1612 else … … 1613 1637 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3; 1614 1638 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1615 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM_WO);1639 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM_WO); 1616 1640 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 1617 1641 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 1644 1668 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_LO; 1645 1669 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1646 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM_WO);1670 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM_WO); 1647 1671 } 1648 1672 else … … 1677 1701 1678 1702 1703 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_PdZx_WO_Ed_WZ(PBS3CG1STATE pThis, unsigned iEncoding) 1704 { 1705 unsigned off; 1706 switch (iEncoding) 1707 { 1708 case 0: 1709 pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationReg; 1710 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1711 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1712 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 0; 1713 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 1; 1714 break; 1715 case 1: 1716 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1717 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 6, 2); 1718 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 2; 1719 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 6; 1720 break; 1721 case 2: 1722 pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationMem; 1723 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1724 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 4 /*iReg*/, 0 /*cbMisalign*/); 1725 break; 1726 case 3: 1727 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1728 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 7 /*iReg*/, 1 /*cbMisalign*/); 1729 break; 1730 1731 default: 1732 return 0; 1733 } 1734 pThis->cbCurInstr = off; 1735 return iEncoding + 1; 1736 } 1737 1738 1739 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Pq_WO_Eq_WNZ(PBS3CG1STATE pThis, unsigned iEncoding) 1740 { 1741 #if ARCH_BITS == 64 1742 if (BS3CG1_IS_64BIT_TARGET(pThis)) 1743 { 1744 unsigned off; 1745 switch (iEncoding) 1746 { 1747 case 0: 1748 pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationReg; 1749 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1750 pThis->abCurInstr[off++] = REX_W___; 1751 off = Bs3Cg1InsertOpcodes(pThis, off); 1752 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 1, 0); 1753 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 0; 1754 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 1; 1755 break; 1756 case 1: 1757 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1758 pThis->abCurInstr[off++] = REX_W___; 1759 off = Bs3Cg1InsertOpcodes(pThis, off); 1760 pThis->abCurInstr[off++] = X86_MODRM_MAKE(3, 6, 2); 1761 pThis->aOperands[pThis->iRmOp ].idxField = pThis->aOperands[pThis->iRmOp ].idxFieldBase + 2; 1762 pThis->aOperands[pThis->iRegOp].idxField = pThis->aOperands[pThis->iRegOp].idxFieldBase + 6; 1763 break; 1764 case 2: 1765 pThis->aOperands[pThis->iRmOp ].enmLocation = pThis->aOperands[pThis->iRmOp].enmLocationMem; 1766 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1767 pThis->abCurInstr[off++] = REX_W___; 1768 off = Bs3Cg1InsertOpcodes(pThis, off); 1769 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 4 /*iReg*/, 0 /*cbMisalign*/); 1770 break; 1771 case 3: 1772 off = Bs3Cg1InsertReqPrefix(pThis, 0); 1773 pThis->abCurInstr[off++] = REX_W___; 1774 off = Bs3Cg1InsertOpcodes(pThis, off); 1775 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 7 /*iReg*/, 1 /*cbMisalign*/); 1776 break; 1777 1778 default: 1779 return 0; 1780 } 1781 pThis->cbCurInstr = off; 1782 return iEncoding + 1; 1783 } 1784 #endif 1785 return 0; 1786 } 1787 1788 1679 1789 static unsigned BS3_NEAR_CODE Bs3Cg1EncodeNext_MODRM_Vq_WO_UqHi(PBS3CG1STATE pThis, unsigned iEncoding) 1680 1790 { … … 1714 1824 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_LO; 1715 1825 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1716 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);1826 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 1717 1827 } 1718 1828 else … … 1760 1870 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_HI; 1761 1871 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1762 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);1872 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 1763 1873 } 1764 1874 else … … 1789 1899 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3; 1790 1900 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1791 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);1901 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 1792 1902 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 1793 1903 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 1821 1931 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3; 1822 1932 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1823 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);1933 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 1824 1934 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 1825 1935 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 1852 1962 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_DW0_ZX; 1853 1963 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1854 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 4, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);1964 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 4, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 1855 1965 } 1856 1966 else … … 1882 1992 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_LO_ZX; 1883 1993 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 1884 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);1994 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 1885 1995 } 1886 1996 else … … 2022 2132 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_LO; 2023 2133 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 2024 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM_WO);2134 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM_WO); 2025 2135 } 2026 2136 else … … 2044 2154 pThis->aOperands[pThis->iRegOp].idxField = BS3CG1DST_XMM3_HI; 2045 2155 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 2046 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM_WO);2156 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 8, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM_WO); 2047 2157 } 2048 2158 else … … 2064 2174 case 1: 2065 2175 off = Bs3Cg1InsertOpcodes(pThis, Bs3Cg1InsertReqPrefix(pThis, 0)); 2066 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 2 /*iReg*/, 1 /*cbMis salign*/ );2176 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 2 /*iReg*/, 1 /*cbMisalign*/ ); 2067 2177 if (!Bs3Cg1XcptTypeIsUnaligned(pThis->enmXcptType)) 2068 2178 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 2368 2478 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/); 2369 2479 off = Bs3Cg1InsertOpcodes(pThis, off); 2370 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);2480 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 2371 2481 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 2372 2482 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 2377 2487 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2378 2488 off = Bs3Cg1InsertOpcodes(pThis, off); 2379 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);2489 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 16, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 2380 2490 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 2381 2491 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 2453 2563 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/); 2454 2564 off = Bs3Cg1InsertOpcodes(pThis, off); 2455 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);2565 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 2456 2566 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 2457 2567 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 2462 2572 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 2463 2573 off = Bs3Cg1InsertOpcodes(pThis, off); 2464 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMis salign*/, BS3CG1OPLOC_MEM);2574 off = Bs3Cfg1EncodeMemMod0Disp(pThis, false, off, 3 /*iReg*/, 32, 1 /*cbMisalign*/, BS3CG1OPLOC_MEM); 2465 2575 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 2466 2576 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 3248 3358 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/); 3249 3359 off = Bs3Cg1InsertOpcodes(pThis, off); 3250 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMis salign*/);3360 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMisalign*/); 3251 3361 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 3252 3362 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 3255 3365 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 0 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 3256 3366 off = Bs3Cg1InsertOpcodes(pThis, off); 3257 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMis salign*/);3367 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMisalign*/); 3258 3368 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 3259 3369 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 3330 3440 off = Bs3Cg1InsertVex2bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/); 3331 3441 off = Bs3Cg1InsertOpcodes(pThis, off); 3332 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMis salign*/);3442 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMisalign*/); 3333 3443 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 3334 3444 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 3337 3447 off = Bs3Cg1InsertVex3bPrefix(pThis, 0 /*offDst*/, 0xf /*~V*/, 1 /*L*/, 1 /*~R*/, 1 /*~X*/, 1 /*~B*/, 0 /*W*/); 3338 3448 off = Bs3Cg1InsertOpcodes(pThis, off); 3339 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMis salign*/);3449 off = Bs3Cfg1EncodeMemMod0DispWithRegFieldAndDefaults(pThis, false, off, 3 /*iReg*/, 1 /*cbMisalign*/); 3340 3450 if (!Bs3Cg1XcptTypeIsVexUnaligned(pThis->enmXcptType)) 3341 3451 pThis->bAlignmentXcpt = X86_XCPT_GP; … … 3568 3678 case BS3CG1ENC_MODRM_WqZxReg_WO_Vq: 3569 3679 return Bs3Cg1EncodeNext_MODRM_WqZxReg_WO_Vq(pThis, iEncoding); 3570 3571 case BS3CG1ENC_MODRM_Pq_WO_Uq:3572 return Bs3Cg1EncodeNext_MODRM_Pq_WO_Uq(pThis, iEncoding);3573 3680 3574 3681 case BS3CG1ENC_MODRM_Vq_WO_UqHi: … … 3764 3871 3765 3872 case BS3CG1ENC_MODRM_Pq_WO_Uq: 3873 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_Pq_WO_Uq; 3874 pThis->iRmOp = 1; 3875 pThis->iRegOp = 0; 3876 pThis->aOperands[0].cbOp = 8; 3877 pThis->aOperands[1].cbOp = 8; 3878 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 3879 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 3880 break; 3881 3882 case BS3CG1ENC_MODRM_PdZx_WO_Ed_WZ: 3883 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_PdZx_WO_Ed_WZ; 3884 pThis->iRegOp = 0; 3885 pThis->iRmOp = 1; 3886 pThis->aOperands[0].cbOp = 4; 3887 pThis->aOperands[1].cbOp = 4; 3888 pThis->aOperands[0].idxFieldBase = BS3CG1DST_MM0_LO_ZX; 3889 pThis->aOperands[1].idxFieldBase = BS3CG1DST_EAX; 3890 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 3891 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 3892 pThis->aOperands[1].enmLocationReg = BS3CG1OPLOC_CTX; 3893 pThis->aOperands[1].enmLocationMem = BS3CG1OPLOC_MEM; 3894 break; 3895 3896 case BS3CG1ENC_MODRM_Pq_WO_Eq_WNZ: 3897 pThis->pfnEncoder = Bs3Cg1EncodeNext_MODRM_Pq_WO_Eq_WNZ; 3898 pThis->iRegOp = 0; 3899 pThis->iRmOp = 1; 3900 pThis->aOperands[0].cbOp = 8; 3901 pThis->aOperands[1].cbOp = 8; 3902 pThis->aOperands[0].idxFieldBase = BS3CG1DST_MM0; 3903 pThis->aOperands[1].idxFieldBase = BS3CG1DST_RAX; 3904 pThis->aOperands[0].enmLocation = BS3CG1OPLOC_CTX; 3905 pThis->aOperands[1].enmLocation = BS3CG1OPLOC_CTX; 3906 pThis->aOperands[1].enmLocationReg = BS3CG1OPLOC_CTX; 3907 pThis->aOperands[1].enmLocationMem = BS3CG1OPLOC_MEM; 3908 break; 3909 3766 3910 case BS3CG1ENC_MODRM_Vq_WO_UqHi: 3767 3911 case BS3CG1ENC_MODRM_VqHi_WO_Uq: … … 4209 4353 return false; 4210 4354 4355 case BS3CG1CPU_MMX: 4356 return false; 4357 4211 4358 case BS3CG1CPU_SSE: 4212 4359 case BS3CG1CPU_SSE2: … … 4277 4424 if ((g_uBs3CpuDetected & BS3CPU_TYPE_MASK) >= BS3CPU_Pentium) 4278 4425 return true; 4426 return false; 4427 4428 case BS3CG1CPU_MMX: 4429 if (g_uBs3CpuDetected & BS3CPU_F_CPUID) 4430 { 4431 ASMCpuIdExSlow(1, 0, 0, 0, NULL, NULL, NULL, &fEdx); 4432 if (fEdx & X86_CPUID_FEATURE_EDX_MMX) 4433 return Bs3Cg3SetupSseAndAvx(pThis); /** @todo only do FNSAVE/FXSAVE here? */ 4434 } 4279 4435 return false; 4280 4436 … … 4710 4866 PtrField.pu64[1] = 0; 4711 4867 } 4712 else if (offField <= RT_OFFSETOF(BS3REGCTX, r15) ) /* Clear the top dword. */4868 else if (offField <= RT_OFFSETOF(BS3REGCTX, r15) /* Clear the top dword. */) 4713 4869 PtrField.pu32[1] = 0; 4870 else if ((unsigned)(idxField - BS3CG1DST_MM0_LO_ZX) <= (unsigned)(BS3CG1DST_MM7_LO_ZX - BS3CG1DST_MM0_LO_ZX)) 4871 { 4872 PtrField.pu32[1] = 0; 4873 PtrField.pu32[2] = 0xffff; /* observed on skylake */ 4874 } 4714 4875 switch (bOpcode & BS3CG1_CTXOP_OPERATOR_MASK) 4715 4876 { -
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-generated-1.h
r66992 r67003 43 43 44 44 BS3CG1OP_Eb, 45 BS3CG1OP_Ed, 46 BS3CG1OP_Eq, 45 47 BS3CG1OP_Ev, 46 48 BS3CG1OP_Wss, … … 66 68 BS3CG1OP_HqHi, 67 69 BS3CG1OP_Nq, 70 BS3CG1OP_Pd, 71 BS3CG1OP_PdZx_WO, 72 BS3CG1OP_Pq, 68 73 BS3CG1OP_Pq_WO, 69 74 BS3CG1OP_Uq, … … 136 141 BS3CG1ENC_MODRM_Gv_RO_Ma, /**< bound instruction */ 137 142 BS3CG1ENC_MODRM_Pq_WO_Uq, 143 BS3CG1ENC_MODRM_PdZx_WO_Ed_WZ, 144 BS3CG1ENC_MODRM_Pq_WO_Eq_WNZ, 138 145 BS3CG1ENC_MODRM_Vq_WO_UqHi, 139 146 BS3CG1ENC_MODRM_Vq_WO_Mq, … … 223 230 BS3CG1CPU_GE_Pentium, 224 231 232 BS3CG1CPU_MMX, 225 233 BS3CG1CPU_SSE, 226 234 BS3CG1CPU_SSE2, … … 525 533 BS3CG1DST_MM6, 526 534 BS3CG1DST_MM7, 535 BS3CG1DST_MM0_LO_ZX, 536 BS3CG1DST_MM1_LO_ZX, 537 BS3CG1DST_MM2_LO_ZX, 538 BS3CG1DST_MM3_LO_ZX, 539 BS3CG1DST_MM4_LO_ZX, 540 BS3CG1DST_MM5_LO_ZX, 541 BS3CG1DST_MM6_LO_ZX, 542 BS3CG1DST_MM7_LO_ZX, 527 543 /* SSE registers. */ 528 544 BS3CG1DST_XMM0,
Note:
See TracChangeset
for help on using the changeset viewer.