VirtualBox

Changeset 66812 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
May 5, 2017 6:48:33 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115233
Message:

IEM: clearly mark operands that are written to.

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsPython.py

    r66811 r66812  
    210210g_kdOpTypes = {
    211211    # Fixed addresses
    212     'Ap':   ( 'IDX_ParseImmAddrF',  'imm',    '%Ap',  'Ap',      ),
     212    'Ap':           ( 'IDX_ParseImmAddrF',  'imm',    '%Ap',  'Ap',      ),
    213213
    214214    # ModR/M.rm
    215     'Eb':   ( 'IDX_UseModRM',       'rm',     '%Eb',  'Eb',      ),
    216     'Ew':   ( 'IDX_UseModRM',       'rm',     '%Ew',  'Ew',      ),
    217     'Ev':   ( 'IDX_UseModRM',       'rm',     '%Ev',  'Ev',      ),
    218     'Wss':  ( 'IDX_UseModRM',       'rm',     '%Wss', 'Wss',     ),
    219     'Wsd':  ( 'IDX_UseModRM',       'rm',     '%Wsd', 'Wsd',     ),
    220     'Wps':  ( 'IDX_UseModRM',       'rm',     '%Wps', 'Wps',     ),
    221     'Wpd':  ( 'IDX_UseModRM',       'rm',     '%Wpd', 'Wpd',     ),
    222     'Wdq':  ( 'IDX_UseModRM',       'rm',     '%Wdq', 'Wdq',     ),
    223     'Wq':   ( 'IDX_UseModRM',       'rm',     '%Wq',  'Wq',      ),
    224     'WqZxReg': ( 'IDX_UseModRM',    'rm',     '%Wq',  'Wq',      ),
     215    'Eb':           ( 'IDX_UseModRM',       'rm',     '%Eb',  'Eb',      ),
     216    'Ew':           ( 'IDX_UseModRM',       'rm',     '%Ew',  'Ew',      ),
     217    'Ev':           ( 'IDX_UseModRM',       'rm',     '%Ev',  'Ev',      ),
     218    'Wss':          ( 'IDX_UseModRM',       'rm',     '%Wss', 'Wss',     ),
     219    'Wss_WO':       ( 'IDX_UseModRM',       'rm',     '%Wss', 'Wss',     ),
     220    'Wsd':          ( 'IDX_UseModRM',       'rm',     '%Wsd', 'Wsd',     ),
     221    'Wsd_WO':       ( 'IDX_UseModRM',       'rm',     '%Wsd', 'Wsd',     ),
     222    'Wps':          ( 'IDX_UseModRM',       'rm',     '%Wps', 'Wps',     ),
     223    'Wps_WO':       ( 'IDX_UseModRM',       'rm',     '%Wps', 'Wps',     ),
     224    'Wpd':          ( 'IDX_UseModRM',       'rm',     '%Wpd', 'Wpd',     ),
     225    'Wpd_WO':       ( 'IDX_UseModRM',       'rm',     '%Wpd', 'Wpd',     ),
     226    'Wdq':          ( 'IDX_UseModRM',       'rm',     '%Wdq', 'Wdq',     ),
     227    'Wdq_WO':       ( 'IDX_UseModRM',       'rm',     '%Wdq', 'Wdq',     ),
     228    'Wq':           ( 'IDX_UseModRM',       'rm',     '%Wq',  'Wq',      ),
     229    'WqZxReg_WO':   ( 'IDX_UseModRM',       'rm',     '%Wq',  'Wq',      ),
    225230
    226231    # ModR/M.rm - register only.
    227     'Uq':   ( 'IDX_UseModRM',       'rm',     '%Uq',  'Uq',      ),
    228     'UqHi': ( 'IDX_UseModRM',       'rm',     '%Uq',  'UqHi',    ),
    229     'Nq':   ( 'IDX_UseModRM',       'rm',     '%Qq',  'Nq',      ),
     232    'Uq':           ( 'IDX_UseModRM',       'rm',     '%Uq',  'Uq',      ),
     233    'UqHi':         ( 'IDX_UseModRM',       'rm',     '%Uq',  'UqHi',    ),
     234    'Nq':           ( 'IDX_UseModRM',       'rm',     '%Qq',  'Nq',      ),
    230235
    231236    # ModR/M.rm - memory only.
    232     'Ma':   ( 'IDX_UseModRM',       'rm',     '%Ma',  'Ma',      ), ##< Only used by BOUND.
    233     'MbRO': ( 'IDX_UseModRM',       'rm',     '%Mb',  'Mb',      ),
    234     'MdRO': ( 'IDX_UseModRM',       'rm',     '%Md',  'Md',      ),
    235     'MdWO': ( 'IDX_UseModRM',       'rm',     '%Md',  'Md',      ),
    236     'Mq':   ( 'IDX_UseModRM',       'rm',     '%Mq',  'Mq',      ),
    237     'MqWO': ( 'IDX_UseModRM',       'rm',     '%Mq',  'Mq',      ),
    238     'MRO':  ( 'IDX_UseModRM',       'rm',     '%M',   'M',       ),
    239     'MRW':  ( 'IDX_UseModRM',       'rm',     '%M',   'M',       ),
     237    'Ma':           ( 'IDX_UseModRM',       'rm',     '%Ma',  'Ma',      ), ##< Only used by BOUND.
     238    'Mb_RO':        ( 'IDX_UseModRM',       'rm',     '%Mb',  'Mb',      ),
     239    'Md_RO':        ( 'IDX_UseModRM',       'rm',     '%Md',  'Md',      ),
     240    'Md_WO':        ( 'IDX_UseModRM',       'rm',     '%Md',  'Md',      ),
     241    'Mq':           ( 'IDX_UseModRM',       'rm',     '%Mq',  'Mq',      ),
     242    'Mq_WO':        ( 'IDX_UseModRM',       'rm',     '%Mq',  'Mq',      ),
     243    'M_RO':         ( 'IDX_UseModRM',       'rm',     '%M',   'M',       ),
     244    'M_RW':         ( 'IDX_UseModRM',       'rm',     '%M',   'M',       ),
    240245
    241246    # ModR/M.reg
    242     'Gb':   ( 'IDX_UseModRM',       'reg',    '%Gb',  'Gb',      ),
    243     'Gw':   ( 'IDX_UseModRM',       'reg',    '%Gw',  'Gw',      ),
    244     'Gv':   ( 'IDX_UseModRM',       'reg',    '%Gv',  'Gv',      ),
    245     'Pq':   ( 'IDX_UseModRM',       'reg',    '%Pq',  'Pq',      ),
    246     'Vss':  ( 'IDX_UseModRM',       'reg',    '%Vss', 'Vss',     ),
    247     'VssZxReg': ( 'IDX_UseModRM',   'reg',    '%Vss', 'Vss',     ),
    248     'Vsd':  ( 'IDX_UseModRM',       'reg',    '%Vsd', 'Vsd',     ),
    249     'VsdZxReg': ( 'IDX_UseModRM',   'reg',    '%Vsd', 'Vsd',     ),
    250     'Vps':  ( 'IDX_UseModRM',       'reg',    '%Vps', 'Vps',     ),
    251     'Vpd':  ( 'IDX_UseModRM',       'reg',    '%Vpd', 'Vpd',     ),
    252     'Vq':   ( 'IDX_UseModRM',       'reg',    '%Vq',  'Vq',      ),
    253     'Vdq':  ( 'IDX_UseModRM',       'reg',    '%Vdq', 'Vdq',     ),
    254     'VqHi': ( 'IDX_UseModRM',       'reg',    '%Vdq', 'VdqHi',   ),
    255     'VqZxReg': ( 'IDX_UseModRM',    'reg',    '%Vq',  'VqZx',   ),
     247    'Gb':           ( 'IDX_UseModRM',       'reg',    '%Gb',  'Gb',      ),
     248    'Gw':           ( 'IDX_UseModRM',       'reg',    '%Gw',  'Gw',      ),
     249    'Gv':           ( 'IDX_UseModRM',       'reg',    '%Gv',  'Gv',      ),
     250    'Pq_WO':        ( 'IDX_UseModRM',       'reg',    '%Pq',  'Pq',      ),
     251    'Vss':          ( 'IDX_UseModRM',       'reg',    '%Vss', 'Vss',     ),
     252    'VssZxReg_WO':  ( 'IDX_UseModRM',       'reg',    '%Vss', 'Vss',     ),
     253    'Vsd':          ( 'IDX_UseModRM',       'reg',    '%Vsd', 'Vsd',     ),
     254    'VsdZxReg_WO':  ( 'IDX_UseModRM',       'reg',    '%Vsd', 'Vsd',     ),
     255    'Vps':          ( 'IDX_UseModRM',       'reg',    '%Vps', 'Vps',     ),
     256    'Vps_WO':       ( 'IDX_UseModRM',       'reg',    '%Vps', 'Vps',     ),
     257    'Vpd':          ( 'IDX_UseModRM',       'reg',    '%Vpd', 'Vpd',     ),
     258    'Vpd_WO':       ( 'IDX_UseModRM',       'reg',    '%Vpd', 'Vpd',     ),
     259    'Vq':           ( 'IDX_UseModRM',       'reg',    '%Vq',  'Vq',      ),
     260    'Vq_WO':        ( 'IDX_UseModRM',       'reg',    '%Vq',  'Vq',      ),
     261    'Vdq_WO':       ( 'IDX_UseModRM',       'reg',    '%Vdq', 'Vdq',     ),
     262    'VqHi':         ( 'IDX_UseModRM',       'reg',    '%Vdq', 'VdqHi',   ),
     263    'VqHi_WO':      ( 'IDX_UseModRM',       'reg',    '%Vdq', 'VdqHi',   ),
     264    'VqZxReg_WO':   ( 'IDX_UseModRM',       'reg',    '%Vq',  'VqZx',    ),
    256265
    257266    # Immediate values.
    258     'Ib':   ( 'IDX_ParseImmByte',   'imm',    '%Ib',  'Ib',      ), ##< NB! Could be IDX_ParseImmByteSX for some instructions.
    259     'Iw':   ( 'IDX_ParseImmUshort', 'imm',    '%Iw',  'Iw',      ),
    260     'Id':   ( 'IDX_ParseImmUlong',  'imm',    '%Id',  'Id',      ),
    261     'Iq':   ( 'IDX_ParseImmQword',  'imm',    '%Iq',  'Iq',      ),
    262     'Iv':   ( 'IDX_ParseImmV',      'imm',    '%Iv',  'Iv',      ), ##< o16: word, o32: dword, o64: qword
    263     'Iz':   ( 'IDX_ParseImmZ',      'imm',    '%Iz',  'Iz',      ), ##< o16: word, o32|o64:dword
     267    'Ib':           ( 'IDX_ParseImmByte',   'imm',    '%Ib',  'Ib',      ), ##< NB! Could be IDX_ParseImmByteSX for some instrs.
     268    'Iw':           ( 'IDX_ParseImmUshort', 'imm',    '%Iw',  'Iw',      ),
     269    'Id':           ( 'IDX_ParseImmUlong',  'imm',    '%Id',  'Id',      ),
     270    'Iq':           ( 'IDX_ParseImmQword',  'imm',    '%Iq',  'Iq',      ),
     271    'Iv':           ( 'IDX_ParseImmV',      'imm',    '%Iv',  'Iv',      ), ##< o16: word, o32: dword, o64: qword
     272    'Iz':           ( 'IDX_ParseImmZ',      'imm',    '%Iz',  'Iz',      ), ##< o16: word, o32|o64:dword
    264273
    265274    # Address operands (no ModR/M).
    266     'Ob':   ( 'IDX_ParseImmAddr',   'imm',    '%Ob',  'Ob',      ),
    267     'Ov':   ( 'IDX_ParseImmAddr',   'imm',    '%Ov',  'Ov',      ),
     275    'Ob':           ( 'IDX_ParseImmAddr',   'imm',    '%Ob',  'Ob',      ),
     276    'Ov':           ( 'IDX_ParseImmAddr',   'imm',    '%Ov',  'Ov',      ),
    268277
    269278    # Relative jump targets
    270     'Jb':   ( 'IDX_ParseImmBRel',   'imm',    '%Jb',  'Jb',      ),
    271     'Jv':   ( 'IDX_ParseImmVRel',   'imm',    '%Jv',  'Jv',      ),
     279    'Jb':           ( 'IDX_ParseImmBRel',   'imm',    '%Jb',  'Jb',      ),
     280    'Jv':           ( 'IDX_ParseImmVRel',   'imm',    '%Jv',  'Jv',      ),
    272281
    273282    # DS:rSI
    274     'Xb':   ( 'IDX_ParseXb',        'rSI',    '%eSI', 'Xb',      ),
    275     'Xv':   ( 'IDX_ParseXv',        'rSI',    '%eSI', 'Xv',      ),
     283    'Xb':           ( 'IDX_ParseXb',        'rSI',    '%eSI', 'Xb',      ),
     284    'Xv':           ( 'IDX_ParseXv',        'rSI',    '%eSI', 'Xv',      ),
    276285    # ES:rDI
    277     'Yb':   ( 'IDX_ParseYb',        'rDI',    '%eDI', 'Yb',      ),
    278     'Yv':   ( 'IDX_ParseYv',        'rDI',    '%eDI', 'Yv',      ),
    279 
    280     'Fv':   ( 'IDX_ParseFixedReg',  'rFLAGS', '%Fv',  'Fv',      ),
     286    'Yb':           ( 'IDX_ParseYb',        'rDI',    '%eDI', 'Yb',      ),
     287    'Yv':           ( 'IDX_ParseYv',        'rDI',    '%eDI', 'Yv',      ),
     288
     289    'Fv':           ( 'IDX_ParseFixedReg',  'rFLAGS', '%Fv',  'Fv',      ),
    281290
    282291    # Fixed registers.
    283     'AL':   ( 'IDX_ParseFixedReg',  'AL',     'al',   'REG_AL',  ),
    284     'rAX':  ( 'IDX_ParseFixedReg',  'rAX',    '%eAX', 'REG_EAX', ),
    285     'CS':   ( 'IDX_ParseFixedReg',  'CS',     'cs',   'REG_CS',  ), # 8086: push CS
    286     'DS':   ( 'IDX_ParseFixedReg',  'DS',     'ds',   'REG_DS',  ),
    287     'ES':   ( 'IDX_ParseFixedReg',  'ES',     'es',   'REG_ES',  ),
    288     'FS':   ( 'IDX_ParseFixedReg',  'FS',     'fs',   'REG_FS',  ),
    289     'GS':   ( 'IDX_ParseFixedReg',  'GS',     'gs',   'REG_GS',  ),
    290     'SS':   ( 'IDX_ParseFixedReg',  'SS',     'ss',   'REG_SS',  ),
     292    'AL':           ( 'IDX_ParseFixedReg',  'AL',     'al',   'REG_AL',  ),
     293    'rAX':          ( 'IDX_ParseFixedReg',  'rAX',    '%eAX', 'REG_EAX', ),
     294    'CS':           ( 'IDX_ParseFixedReg',  'CS',     'cs',   'REG_CS',  ), # 8086: push CS
     295    'DS':           ( 'IDX_ParseFixedReg',  'DS',     'ds',   'REG_DS',  ),
     296    'ES':           ( 'IDX_ParseFixedReg',  'ES',     'es',   'REG_ES',  ),
     297    'FS':           ( 'IDX_ParseFixedReg',  'FS',     'fs',   'REG_FS',  ),
     298    'GS':           ( 'IDX_ParseFixedReg',  'GS',     'gs',   'REG_GS',  ),
     299    'SS':           ( 'IDX_ParseFixedReg',  'SS',     'ss',   'REG_SS',  ),
    291300};
    292301
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsTwoByte0f.cpp.h

    r66811 r66812  
    10011001FNIEMOP_DEF(iemOp_movups_Vps_Wps)
    10021002{
    1003     IEMOP_MNEMONIC2(RM, MOVUPS, movups, Vps, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1003    IEMOP_MNEMONIC2(RM, MOVUPS, movups, Vps_WO, Wps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    10041004    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10051005    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    10531053FNIEMOP_DEF(iemOp_movupd_Vpd_Wpd)
    10541054{
    1055     IEMOP_MNEMONIC2(RM, MOVUPD, movupd, Vpd, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1055    IEMOP_MNEMONIC2(RM, MOVUPD, movupd, Vpd_WO, Wpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    10561056    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    10571057    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    11041104FNIEMOP_DEF(iemOp_movss_Vss_Wss)
    11051105{
    1106     IEMOP_MNEMONIC2(RM, MOVSS, movss, VssZxReg, Wss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1106    IEMOP_MNEMONIC2(RM, MOVSS, movss, VssZxReg_WO, Wss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    11071107    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    11081108    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    11581158FNIEMOP_DEF(iemOp_movsd_Vsd_Wsd)
    11591159{
    1160     IEMOP_MNEMONIC2(RM, MOVSD, movsd, VsdZxReg, Wsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1160    IEMOP_MNEMONIC2(RM, MOVSD, movsd, VsdZxReg_WO, Wsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    11611161    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    11621162    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    12121212FNIEMOP_DEF(iemOp_movups_Wps_Vps)
    12131213{
    1214     IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1214    IEMOP_MNEMONIC2(MR, MOVUPS, movups, Wps_WO, Vps, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    12151215    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    12161216    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    12631263FNIEMOP_DEF(iemOp_movupd_Wpd_Vpd)
    12641264{
    1265     IEMOP_MNEMONIC2(MR, MOVUPD, movupd, Wpd, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1265    IEMOP_MNEMONIC2(MR, MOVUPD, movupd, Wpd_WO, Vpd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    12661266    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    12671267    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    13141314FNIEMOP_DEF(iemOp_movss_Wss_Vss)
    13151315{
    1316     IEMOP_MNEMONIC2(MR, MOVSS, movss, Wss, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1316    IEMOP_MNEMONIC2(MR, MOVSS, movss, Wss_WO, Vss, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    13171317    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    13181318    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    13681368FNIEMOP_DEF(iemOp_movsd_Wsd_Vsd)
    13691369{
    1370     IEMOP_MNEMONIC2(MR, MOVSD, movsd, Wsd, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1370    IEMOP_MNEMONIC2(MR, MOVSD, movsd, Wsd_WO, Vsd, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    13711371    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    13721372    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    14261426         * @optest      op1=0 op2=-42 -> op1=-42
    14271427         */
    1428         IEMOP_MNEMONIC2(RM_REG, MOVHLPS, movhlps, Vq, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1428        IEMOP_MNEMONIC2(RM_REG, MOVHLPS, movhlps, Vq_WO, UqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    14291429
    14301430        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     
    14541454         * @opfunction  iemOp_movlps_Vq_Mq__vmovhlps
    14551455         */
    1456         IEMOP_MNEMONIC2(RM_MEM, MOVLPS, movlps, Vq, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1456        IEMOP_MNEMONIC2(RM_MEM, MOVLPS, movlps, Vq_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    14571457
    14581458        IEM_MC_BEGIN(0, 2);
     
    14901490    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    14911491    {
    1492         IEMOP_MNEMONIC2(RM_MEM, MOVLPD, movlpd, Vq, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1492        IEMOP_MNEMONIC2(RM_MEM, MOVLPD, movlpd, Vq_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    14931493
    14941494        IEM_MC_BEGIN(0, 2);
     
    15341534FNIEMOP_DEF(iemOp_movsldup_Vdq_Wdq)
    15351535{
    1536     IEMOP_MNEMONIC2(RM, MOVSLDUP, movsldup, Vdq, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1536    IEMOP_MNEMONIC2(RM, MOVSLDUP, movsldup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    15371537    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    15381538    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    15941594FNIEMOP_DEF(iemOp_movddup_Vdq_Wdq)
    15951595{
    1596     IEMOP_MNEMONIC2(RM, MOVDDUP, movddup, Vdq, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1596    IEMOP_MNEMONIC2(RM, MOVDDUP, movddup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    15971597    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    15981598    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    16571657    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    16581658    {
    1659         IEMOP_MNEMONIC2(MR_MEM, MOVLPS, movlps, MqWO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1659        IEMOP_MNEMONIC2(MR_MEM, MOVLPS, movlps, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    16601660
    16611661        IEM_MC_BEGIN(0, 2);
     
    17051705    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    17061706    {
    1707         IEMOP_MNEMONIC2(MR_MEM, MOVLPD, movlpd, MqWO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1707        IEMOP_MNEMONIC2(MR_MEM, MOVLPD, movlpd, Mq_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    17081708        IEM_MC_BEGIN(0, 2);
    17091709        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    18261826         * @optest      op1=0 op2=-42 -> op1=-42
    18271827         */
    1828         IEMOP_MNEMONIC2(RM_REG, MOVLHPS, movlhps, VqHi, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1828        IEMOP_MNEMONIC2(RM_REG, MOVLHPS, movlhps, VqHi_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    18291829
    18301830        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     
    18541854         * @opfunction  iemOp_movhps_Vdq_Mq__movlhps_Vdq_Uq
    18551855         */
    1856         IEMOP_MNEMONIC2(RM_MEM, MOVHPS, movhps, VqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1856        IEMOP_MNEMONIC2(RM_MEM, MOVHPS, movhps, VqHi_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    18571857
    18581858        IEM_MC_BEGIN(0, 2);
     
    18901890    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    18911891    {
    1892         IEMOP_MNEMONIC2(RM_MEM, MOVHPD, movhpd, VqHi, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1892        IEMOP_MNEMONIC2(RM_MEM, MOVHPD, movhpd, VqHi_WO, Mq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    18931893        IEM_MC_BEGIN(0, 2);
    18941894        IEM_MC_LOCAL(uint64_t,                  uSrc);
     
    19331933FNIEMOP_DEF(iemOp_movshdup_Vdq_Wdq)
    19341934{
    1935     IEMOP_MNEMONIC2(RM, MOVSHDUP, movshdup, Vdq, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     1935    IEMOP_MNEMONIC2(RM, MOVSHDUP, movshdup, Vdq_WO, Wdq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    19361936    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    19371937    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    20082008    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    20092009    {
    2010         IEMOP_MNEMONIC2(MR_MEM, MOVHPS, movhps, MqWO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     2010        IEMOP_MNEMONIC2(MR_MEM, MOVHPS, movhps, Mq_WO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    20112011
    20122012        IEM_MC_BEGIN(0, 2);
     
    20562056    if ((bRm & X86_MODRM_MOD_MASK) != (3 << X86_MODRM_MOD_SHIFT))
    20572057    {
    2058         IEMOP_MNEMONIC2(MR_MEM, MOVHPD, movhpd, MqWO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     2058        IEMOP_MNEMONIC2(MR_MEM, MOVHPD, movhpd, Mq_WO, VqHi, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    20592059
    20602060        IEM_MC_BEGIN(0, 2);
     
    43254325FNIEMOP_DEF(iemOp_movq_Vq_Wq)
    43264326{
    4327     IEMOP_MNEMONIC2(RM, MOVQ, movq, VqZxReg, Wq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     4327    IEMOP_MNEMONIC2(RM, MOVQ, movq, VqZxReg_WO, Wq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    43284328    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    43294329    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    64536453FNIEMOP_DEF_1(iemOp_Grp15_ldmxcsr, uint8_t, bRm)
    64546454{
    6455     IEMOP_MNEMONIC1(M_MEM, LDMXCSR, ldmxcsr, MdRO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     6455    IEMOP_MNEMONIC1(M_MEM, LDMXCSR, ldmxcsr, Md_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    64566456    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse)
    64576457        return IEMOP_RAISE_INVALID_OPCODE();
     
    64906490FNIEMOP_DEF_1(iemOp_Grp15_stmxcsr,  uint8_t, bRm)
    64916491{
    6492     IEMOP_MNEMONIC1(M_MEM, STMXCSR, stmxcsr, MdWO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     6492    IEMOP_MNEMONIC1(M_MEM, STMXCSR, stmxcsr, Md_WO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    64936493    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fSse)
    64946494        return IEMOP_RAISE_INVALID_OPCODE();
     
    65176517FNIEMOP_DEF_1(iemOp_Grp15_xsave,    uint8_t, bRm)
    65186518{
    6519     IEMOP_MNEMONIC1(M_MEM, XSAVE, xsave, MRW, DISOPTYPE_HARMLESS, 0);
     6519    IEMOP_MNEMONIC1(M_MEM, XSAVE, xsave, M_RW, DISOPTYPE_HARMLESS, 0);
    65206520    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fXSaveRstor)
    65216521        return IEMOP_RAISE_INVALID_OPCODE();
     
    65456545FNIEMOP_DEF_1(iemOp_Grp15_xrstor,   uint8_t, bRm)
    65466546{
    6547     IEMOP_MNEMONIC1(M_MEM, XRSTOR, xrstor, MRO, DISOPTYPE_HARMLESS, 0);
     6547    IEMOP_MNEMONIC1(M_MEM, XRSTOR, xrstor, M_RO, DISOPTYPE_HARMLESS, 0);
    65486548    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fXSaveRstor)
    65496549        return IEMOP_RAISE_INVALID_OPCODE();
     
    65756575FNIEMOP_DEF_1(iemOp_Grp15_clflush,  uint8_t, bRm)
    65766576{
    6577     IEMOP_MNEMONIC1(M_MEM, CLFLUSH, clflush, MbRO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     6577    IEMOP_MNEMONIC1(M_MEM, CLFLUSH, clflush, Mb_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    65786578    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fClFlush)
    65796579        return FNIEMOP_CALL_1(iemOp_InvalidWithRMAllNeeded, bRm);
     
    66006600FNIEMOP_DEF_1(iemOp_Grp15_clflushopt,  uint8_t, bRm)
    66016601{
    6602     IEMOP_MNEMONIC1(M_MEM, CLFLUSHOPT, clflushopt, MbRO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     6602    IEMOP_MNEMONIC1(M_MEM, CLFLUSHOPT, clflushopt, Mb_RO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    66036603    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fClFlushOpt)
    66046604        return FNIEMOP_CALL_1(iemOp_InvalidWithRMAllNeeded, bRm);
     
    83418341FNIEMOP_DEF(iemOp_movq_Wq_Vq)
    83428342{
    8343     IEMOP_MNEMONIC2(MR, MOVQ, movq, WqZxReg, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     8343    IEMOP_MNEMONIC2(MR, MOVQ, movq, WqZxReg_WO, Vq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    83448344    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    83458345    if ((bRm & X86_MODRM_MOD_MASK) == (3 << X86_MODRM_MOD_SHIFT))
     
    84028402         * Register, register.
    84038403         */
    8404         IEMOP_MNEMONIC2(RM_REG, MOVQ2DQ, movq2dq, VqZxReg, Nq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     8404        IEMOP_MNEMONIC2(RM_REG, MOVQ2DQ, movq2dq, VqZxReg_WO, Nq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    84058405        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    84068406        IEM_MC_BEGIN(0, 1);
     
    84548454         * Register, register.
    84558455         */
    8456         IEMOP_MNEMONIC2(RM_REG, MOVDQ2Q, movdq2q, Pq, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     8456        IEMOP_MNEMONIC2(RM_REG, MOVDQ2Q, movdq2q, Pq_WO, Uq, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    84578457        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    84588458        IEM_MC_BEGIN(0, 1);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsVexMap1.cpp.h

    r66479 r66812  
    22272227FNIEMOP_DEF_1(iemOp_VGrp15_vstmxcsr,  uint8_t, bRm)
    22282228{
    2229     IEMOP_MNEMONIC1(VEX_M_MEM, VSTMXCSR, vstmxcsr, MdWO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
     2229    IEMOP_MNEMONIC1(VEX_M_MEM, VSTMXCSR, vstmxcsr, Md_WO, DISOPTYPE_HARMLESS, IEMOPHINT_IGNORES_OP_SIZE);
    22302230    if (!IEM_GET_GUEST_CPU_FEATURES(pVCpu)->fAvx)
    22312231        return IEMOP_RAISE_INVALID_OPCODE();
Note: See TracChangeset for help on using the changeset viewer.

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