VirtualBox

Changeset 66160 in vbox


Ignore:
Timestamp:
Mar 17, 2017 10:42:52 PM (8 years ago)
Author:
vboxsync
Message:

IEM: Mark instructions allowing lock prefix use (incomplete).

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r66159 r66160  
    6767FNIEMOP_DEF(iemOp_add_Eb_Gb)
    6868{
    69     IEMOP_MNEMONIC2(MR, ADD, add, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     69    IEMOP_MNEMONIC2(MR, ADD, add, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    7070    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_add);
    7171}
     
    8383FNIEMOP_DEF(iemOp_add_Ev_Gv)
    8484{
    85     IEMOP_MNEMONIC2(MR, ADD, add, Ev, Gv, DISOPTYPE_HARMLESS, 0);
     85    IEMOP_MNEMONIC2(MR, ADD, add, Ev, Gv, DISOPTYPE_HARMLESS, IEMOPHINT_LOCK_ALLOWED);
    8686    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_add);
    8787}
     
    181181FNIEMOP_DEF(iemOp_or_Eb_Gb)
    182182{
    183     IEMOP_MNEMONIC2(MR, OR, or, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     183    IEMOP_MNEMONIC2(MR, OR, or, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    184184    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    185185    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_or);
     
    202202FNIEMOP_DEF(iemOp_or_Ev_Gv)
    203203{
    204     IEMOP_MNEMONIC2(MR, OR, or, Ev, Gv, DISOPTYPE_HARMLESS, 0);
     204    IEMOP_MNEMONIC2(MR, OR, or, Ev, Gv, DISOPTYPE_HARMLESS, IEMOPHINT_LOCK_ALLOWED);
    205205    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    206206    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_or);
     
    218218FNIEMOP_DEF(iemOp_or_Gb_Eb)
    219219{
    220     IEMOP_MNEMONIC2(RM, OR, or, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     220    IEMOP_MNEMONIC2(RM, OR, or, Gb, Eb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    221221    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    222222    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_r8_rm, &g_iemAImpl_or);
     
    345345FNIEMOP_DEF(iemOp_adc_Eb_Gb)
    346346{
    347     IEMOP_MNEMONIC2(MR, ADC, adc, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     347    IEMOP_MNEMONIC2(MR, ADC, adc, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    348348    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_adc);
    349349}
     
    363363FNIEMOP_DEF(iemOp_adc_Ev_Gv)
    364364{
    365     IEMOP_MNEMONIC2(MR, ADC, adc, Ev, Gv, DISOPTYPE_HARMLESS, 0);
     365    IEMOP_MNEMONIC2(MR, ADC, adc, Ev, Gv, DISOPTYPE_HARMLESS, IEMOPHINT_LOCK_ALLOWED);
    366366    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_adc);
    367367}
     
    458458FNIEMOP_DEF(iemOp_sbb_Eb_Gb)
    459459{
    460     IEMOP_MNEMONIC2(MR, SBB, sbb, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     460    IEMOP_MNEMONIC2(MR, SBB, sbb, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    461461    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_sbb);
    462462}
     
    471471FNIEMOP_DEF(iemOp_sbb_Ev_Gv)
    472472{
    473     IEMOP_MNEMONIC2(MR, SBB, sbb, Ev, Gv, DISOPTYPE_HARMLESS, 0);
     473    IEMOP_MNEMONIC2(MR, SBB, sbb, Ev, Gv, DISOPTYPE_HARMLESS, IEMOPHINT_LOCK_ALLOWED);
    474474    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_sbb);
    475475}
     
    562562FNIEMOP_DEF(iemOp_and_Eb_Gb)
    563563{
    564     IEMOP_MNEMONIC2(MR, AND, and, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     564    IEMOP_MNEMONIC2(MR, AND, and, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    565565    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    566566    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_and);
     
    577577FNIEMOP_DEF(iemOp_and_Ev_Gv)
    578578{
    579     IEMOP_MNEMONIC2(MR, AND, and, Ev, Gv, DISOPTYPE_HARMLESS, 0);
     579    IEMOP_MNEMONIC2(MR, AND, and, Ev, Gv, DISOPTYPE_HARMLESS, IEMOPHINT_LOCK_ALLOWED);
    580580    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    581581    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_and);
     
    686686FNIEMOP_DEF(iemOp_sub_Eb_Gb)
    687687{
    688     IEMOP_MNEMONIC2(MR, SUB, sub, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     688    IEMOP_MNEMONIC2(MR, SUB, sub, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    689689    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_sub);
    690690}
     
    698698FNIEMOP_DEF(iemOp_sub_Ev_Gv)
    699699{
    700     IEMOP_MNEMONIC2(MR, SUB, sub, Ev, Gv, DISOPTYPE_HARMLESS, 0);
     700    IEMOP_MNEMONIC2(MR, SUB, sub, Ev, Gv, DISOPTYPE_HARMLESS, IEMOPHINT_LOCK_ALLOWED);
    701701    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_sub);
    702702}
     
    796796FNIEMOP_DEF(iemOp_xor_Eb_Gb)
    797797{
    798     IEMOP_MNEMONIC2(MR, XOR, xor, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     798    IEMOP_MNEMONIC2(MR, XOR, xor, Eb, Gb, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE | IEMOPHINT_LOCK_ALLOWED);
    799799    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    800800    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_r8, &g_iemAImpl_xor);
     
    811811FNIEMOP_DEF(iemOp_xor_Ev_Gv)
    812812{
    813     IEMOP_MNEMONIC2(MR, XOR, xor, Ev, Gv, DISOPTYPE_HARMLESS, 0);
     813    IEMOP_MNEMONIC2(MR, XOR, xor, Ev, Gv, DISOPTYPE_HARMLESS, IEMOPHINT_LOCK_ALLOWED);
    814814    IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_AF);
    815815    return FNIEMOP_CALL_1(iemOpHlpBinaryOperator_rm_rv, &g_iemAImpl_xor);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py

    r66159 r66160  
    344344    'fpu':                   'DISOPTYPE_FPU',                   ##< FPU instruction. Not implemented yet!
    345345    'ignores_op_size':       '',                                ##< Ignores both operand size prefixes.
     346    'lock_allowed':          '',                                ##< Lock prefix allowed.
    346347};
    347348
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r65876 r66160  
    887887/** Both the operand size prefixes are ignored. */
    888888#define IEMOPHINT_IGNORES_OP_SIZE   RT_BIT_32(10)
     889/** Allowed with the lock prefix. */
     890#define IEMOPHINT_LOCK_ALLOWED      RT_BIT_32(11)
    889891/** Hint to IEMAllInstructionPython.py that this macro should be skipped.  */
    890892#define IEMOPHINT_SKIP_PYTHON       RT_BIT_32(31)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette