VirtualBox

Changeset 103185 in vbox for trunk/src


Ignore:
Timestamp:
Feb 4, 2024 3:42:48 PM (16 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
161450
Message:

VMM/IEMAllInst*: Liveness analysis, part 2: Flag input & modification annotations. bugref:10372

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

Legend:

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

    r102977 r103185  
    715715 * @opmaps      one
    716716 * @openc       ModR/M
    717  * @opflmodify  cf,pf,af,zf,sf,of
     717 * @opflclass   arithmetic
    718718 * @ophints     harmless ignores_op_sizes
    719719 * @opstats     add_Eb_Gb
     
    734734 * @opcode      0x01
    735735 * @opgroup     og_gen_arith_bin
    736  * @opflmodify  cf,pf,af,zf,sf,of
     736 * @opflclass   arithmetic
    737737 * @optest               op1=1  op2=1  -> op1=2  efl&|=nc,pe,na,nz,pl,nv
    738738 * @optest      efl|=cf  op1=2  op2=2  -> op1=4  efl&|=nc,pe,na,nz,pl,nv
     
    751751 * @opcode      0x02
    752752 * @opgroup     og_gen_arith_bin
    753  * @opflmodify  cf,pf,af,zf,sf,of
     753 * @opflclass   arithmetic
    754754 * @opcopytests iemOp_add_Eb_Gb
    755755 */
     
    764764 * @opcode      0x03
    765765 * @opgroup     og_gen_arith_bin
    766  * @opflmodify  cf,pf,af,zf,sf,of
     766 * @opflclass   arithmetic
    767767 * @opcopytests iemOp_add_Ev_Gv
    768768 */
     
    777777 * @opcode      0x04
    778778 * @opgroup     og_gen_arith_bin
    779  * @opflmodify  cf,pf,af,zf,sf,of
     779 * @opflclass   arithmetic
    780780 * @opcopytests iemOp_add_Eb_Gb
    781781 */
     
    790790 * @opcode      0x05
    791791 * @opgroup     og_gen_arith_bin
    792  * @opflmodify  cf,pf,af,zf,sf,of
     792 * @opflclass   arithmetic
    793793 * @optest      op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe
    794794 * @optest      efl|=cf  op1=2  op2=2  -> op1=4  efl&|=nc,pe,na,nz,pl,nv
     
    837837 * @opcode      0x08
    838838 * @opgroup     og_gen_arith_bin
    839  * @opflmodify  cf,pf,af,zf,sf,of
    840  * @opflundef   af
    841  * @opflclear   of,cf
     839 * @opflclass   logical
    842840 * @optest                  op1=7 op2=12 -> op1=15   efl&|=nc,po,na,nz,pl,nv
    843841 * @optest      efl|=of,cf  op1=0 op2=0  -> op1=0    efl&|=nc,po,na,zf,pl,nv
     
    856854 * @opcode      0x09
    857855 * @opgroup     og_gen_arith_bin
    858  * @opflmodify  cf,pf,af,zf,sf,of
    859  * @opflundef   af
    860  * @opflclear   of,cf
     856 * @opflclass   logical
    861857 * @optest      efl|=of,cf  op1=12 op2=7 -> op1=15   efl&|=nc,po,na,nz,pl,nv
    862858 * @optest      efl|=of,cf  op1=0 op2=0  -> op1=0    efl&|=nc,po,na,zf,pl,nv
     
    865861 * @optest      o32 / op1=0x5a5a5a5a         op2=0xa5a5a5a5         -> op1=-1 efl&|=nc,po,na,nz,ng,nv
    866862 * @optest      o64 / op1=0x5a5a5a5a5a5a5a5a op2=0xa5a5a5a5a5a5a5a5 -> op1=-1 efl&|=nc,po,na,nz,ng,nv
     863 * @note        AF is documented as undefined, but both modern AMD and Intel CPUs clears it.
    867864 */
    868865FNIEMOP_DEF(iemOp_or_Ev_Gv)
     
    878875 * @opcode      0x0a
    879876 * @opgroup     og_gen_arith_bin
    880  * @opflmodify  cf,pf,af,zf,sf,of
    881  * @opflundef   af
    882  * @opflclear   of,cf
     877 * @opflclass   logical
    883878 * @opcopytests iemOp_or_Eb_Gb
    884879 */
     
    894889 * @opcode      0x0b
    895890 * @opgroup     og_gen_arith_bin
    896  * @opflmodify  cf,pf,af,zf,sf,of
    897  * @opflundef   af
    898  * @opflclear   of,cf
     891 * @opflclass   logical
    899892 * @opcopytests iemOp_or_Ev_Gv
    900893 */
     
    910903 * @opcode      0x0c
    911904 * @opgroup     og_gen_arith_bin
    912  * @opflmodify  cf,pf,af,zf,sf,of
    913  * @opflundef   af
    914  * @opflclear   of,cf
     905 * @opflclass   logical
    915906 * @opcopytests iemOp_or_Eb_Gb
    916907 */
     
    926917 * @opcode      0x0d
    927918 * @opgroup     og_gen_arith_bin
    928  * @opflmodify  cf,pf,af,zf,sf,of
    929  * @opflundef   af
    930  * @opflclear   of,cf
     919 * @opflclass   logical
    931920 * @optest      efl|=of,cf  op1=12 op2=7 -> op1=15   efl&|=nc,po,na,nz,pl,nv
    932921 * @optest      efl|=of,cf  op1=0 op2=0  -> op1=0    efl&|=nc,po,na,zf,pl,nv
     
    1006995 * @opcode      0x10
    1007996 * @opgroup     og_gen_arith_bin
    1008  * @opfltest    cf
    1009  * @opflmodify  cf,pf,af,zf,sf,of
     997 * @opflclass   arithmetic_carry
    1010998 * @optest      op1=1 op2=1 efl&~=cf -> op1=2 efl&|=nc,pe,na,nz,pl,nv
    1011999 * @optest      op1=1 op2=1 efl|=cf  -> op1=3 efl&|=nc,po,na,nz,pl,nv
     
    10241012 * @opcode      0x11
    10251013 * @opgroup     og_gen_arith_bin
    1026  * @opfltest    cf
    1027  * @opflmodify  cf,pf,af,zf,sf,of
     1014 * @opflclass   arithmetic_carry
    10281015 * @optest      op1=1 op2=1 efl&~=cf -> op1=2 efl&|=nc,pe,na,nz,pl,nv
    10291016 * @optest      op1=1 op2=1 efl|=cf  -> op1=3 efl&|=nc,po,na,nz,pl,nv
     
    10431030 * @opcode      0x12
    10441031 * @opgroup     og_gen_arith_bin
    1045  * @opfltest    cf
    1046  * @opflmodify  cf,pf,af,zf,sf,of
     1032 * @opflclass   arithmetic_carry
    10471033 * @opcopytests iemOp_adc_Eb_Gb
    10481034 */
     
    10571043 * @opcode      0x13
    10581044 * @opgroup     og_gen_arith_bin
    1059  * @opfltest    cf
    1060  * @opflmodify  cf,pf,af,zf,sf,of
     1045 * @opflclass   arithmetic_carry
    10611046 * @opcopytests iemOp_adc_Ev_Gv
    10621047 */
     
    10711056 * @opcode      0x14
    10721057 * @opgroup     og_gen_arith_bin
    1073  * @opfltest    cf
    1074  * @opflmodify  cf,pf,af,zf,sf,of
     1058 * @opflclass   arithmetic_carry
    10751059 * @opcopytests iemOp_adc_Eb_Gb
    10761060 */
     
    10851069 * @opcode      0x15
    10861070 * @opgroup     og_gen_arith_bin
    1087  * @opfltest    cf
    1088  * @opflmodify  cf,pf,af,zf,sf,of
     1071 * @opflclass   arithmetic_carry
    10891072 * @opcopytests iemOp_adc_Ev_Gv
    10901073 */
     
    11091092/**
    11101093 * @opcode      0x17
    1111  * @opgroup     og_gen_arith_bin
    1112  * @opfltest    cf
    1113  * @opflmodify  cf,pf,af,zf,sf,of
    11141094 */
    11151095FNIEMOP_DEF(iemOp_pop_SS)
     
    11311111 * @opcode      0x18
    11321112 * @opgroup     og_gen_arith_bin
    1133  * @opfltest    cf
    1134  * @opflmodify  cf,pf,af,zf,sf,of
     1113 * @opflclass   arithmetic_carry
    11351114 */
    11361115FNIEMOP_DEF(iemOp_sbb_Eb_Gb)
     
    11441123 * @opcode      0x19
    11451124 * @opgroup     og_gen_arith_bin
    1146  * @opfltest    cf
    1147  * @opflmodify  cf,pf,af,zf,sf,of
     1125 * @opflclass   arithmetic_carry
    11481126 */
    11491127FNIEMOP_DEF(iemOp_sbb_Ev_Gv)
     
    11581136 * @opcode      0x1a
    11591137 * @opgroup     og_gen_arith_bin
    1160  * @opfltest    cf
    1161  * @opflmodify  cf,pf,af,zf,sf,of
     1138 * @opflclass   arithmetic_carry
    11621139 */
    11631140FNIEMOP_DEF(iemOp_sbb_Gb_Eb)
     
    11711148 * @opcode      0x1b
    11721149 * @opgroup     og_gen_arith_bin
    1173  * @opfltest    cf
    1174  * @opflmodify  cf,pf,af,zf,sf,of
     1150 * @opflclass   arithmetic_carry
    11751151 */
    11761152FNIEMOP_DEF(iemOp_sbb_Gv_Ev)
     
    11841160 * @opcode      0x1c
    11851161 * @opgroup     og_gen_arith_bin
    1186  * @opfltest    cf
    1187  * @opflmodify  cf,pf,af,zf,sf,of
     1162 * @opflclass   arithmetic_carry
    11881163 */
    11891164FNIEMOP_DEF(iemOp_sbb_Al_Ib)
     
    11971172 * @opcode      0x1d
    11981173 * @opgroup     og_gen_arith_bin
    1199  * @opfltest    cf
    1200  * @opflmodify  cf,pf,af,zf,sf,of
     1174 * @opflclass   arithmetic_carry
    12011175 */
    12021176FNIEMOP_DEF(iemOp_sbb_eAX_Iz)
     
    12411215 * @opcode      0x20
    12421216 * @opgroup     og_gen_arith_bin
    1243  * @opflmodify  cf,pf,af,zf,sf,of
    1244  * @opflundef   af
    1245  * @opflclear   of,cf
     1217 * @opflclass   logical
    12461218 */
    12471219FNIEMOP_DEF(iemOp_and_Eb_Gb)
     
    12561228 * @opcode      0x21
    12571229 * @opgroup     og_gen_arith_bin
    1258  * @opflmodify  cf,pf,af,zf,sf,of
    1259  * @opflundef   af
    1260  * @opflclear   of,cf
     1230 * @opflclass   logical
    12611231 */
    12621232FNIEMOP_DEF(iemOp_and_Ev_Gv)
     
    12721242 * @opcode      0x22
    12731243 * @opgroup     og_gen_arith_bin
    1274  * @opflmodify  cf,pf,af,zf,sf,of
    1275  * @opflundef   af
    1276  * @opflclear   of,cf
     1244 * @opflclass   logical
    12771245 */
    12781246FNIEMOP_DEF(iemOp_and_Gb_Eb)
     
    12871255 * @opcode      0x23
    12881256 * @opgroup     og_gen_arith_bin
    1289  * @opflmodify  cf,pf,af,zf,sf,of
    1290  * @opflundef   af
    1291  * @opflclear   of,cf
     1257 * @opflclass   logical
    12921258 */
    12931259FNIEMOP_DEF(iemOp_and_Gv_Ev)
     
    13021268 * @opcode      0x24
    13031269 * @opgroup     og_gen_arith_bin
    1304  * @opflmodify  cf,pf,af,zf,sf,of
    1305  * @opflundef   af
    1306  * @opflclear   of,cf
     1270 * @opflclass   logical
    13071271 */
    13081272FNIEMOP_DEF(iemOp_and_Al_Ib)
     
    13171281 * @opcode      0x25
    13181282 * @opgroup     og_gen_arith_bin
    1319  * @opflmodify  cf,pf,af,zf,sf,of
    1320  * @opflundef   af
    1321  * @opflclear   of,cf
     1283 * @opflclass   logical
    13221284 */
    13231285FNIEMOP_DEF(iemOp_and_eAX_Iz)
     
    13681330 * @opcode      0x28
    13691331 * @opgroup     og_gen_arith_bin
    1370  * @opflmodify  cf,pf,af,zf,sf,of
     1332 * @opflclass   arithmetic
    13711333 */
    13721334FNIEMOP_DEF(iemOp_sub_Eb_Gb)
     
    13801342 * @opcode      0x29
    13811343 * @opgroup     og_gen_arith_bin
    1382  * @opflmodify  cf,pf,af,zf,sf,of
     1344 * @opflclass   arithmetic
    13831345 */
    13841346FNIEMOP_DEF(iemOp_sub_Ev_Gv)
     
    13931355 * @opcode      0x2a
    13941356 * @opgroup     og_gen_arith_bin
    1395  * @opflmodify  cf,pf,af,zf,sf,of
     1357 * @opflclass   arithmetic
    13961358 */
    13971359FNIEMOP_DEF(iemOp_sub_Gb_Eb)
     
    14051367 * @opcode      0x2b
    14061368 * @opgroup     og_gen_arith_bin
    1407  * @opflmodify  cf,pf,af,zf,sf,of
     1369 * @opflclass   arithmetic
    14081370 */
    14091371FNIEMOP_DEF(iemOp_sub_Gv_Ev)
     
    14171379 * @opcode      0x2c
    14181380 * @opgroup     og_gen_arith_bin
    1419  * @opflmodify  cf,pf,af,zf,sf,of
     1381 * @opflclass   arithmetic
    14201382 */
    14211383FNIEMOP_DEF(iemOp_sub_Al_Ib)
     
    14291391 * @opcode      0x2d
    14301392 * @opgroup     og_gen_arith_bin
    1431  * @opflmodify  cf,pf,af,zf,sf,of
     1393 * @opflclass   arithmetic
    14321394 */
    14331395FNIEMOP_DEF(iemOp_sub_eAX_Iz)
     
    14771439 * @opcode      0x30
    14781440 * @opgroup     og_gen_arith_bin
    1479  * @opflmodify  cf,pf,af,zf,sf,of
    1480  * @opflundef   af
    1481  * @opflclear   of,cf
     1441 * @opflclass   logical
    14821442 */
    14831443FNIEMOP_DEF(iemOp_xor_Eb_Gb)
     
    14921452 * @opcode      0x31
    14931453 * @opgroup     og_gen_arith_bin
    1494  * @opflmodify  cf,pf,af,zf,sf,of
    1495  * @opflundef   af
    1496  * @opflclear   of,cf
     1454 * @opflclass   logical
    14971455 */
    14981456FNIEMOP_DEF(iemOp_xor_Ev_Gv)
     
    15081466 * @opcode      0x32
    15091467 * @opgroup     og_gen_arith_bin
    1510  * @opflmodify  cf,pf,af,zf,sf,of
    1511  * @opflundef   af
    1512  * @opflclear   of,cf
     1468 * @opflclass   logical
    15131469 */
    15141470FNIEMOP_DEF(iemOp_xor_Gb_Eb)
     
    15231479 * @opcode      0x33
    15241480 * @opgroup     og_gen_arith_bin
    1525  * @opflmodify  cf,pf,af,zf,sf,of
    1526  * @opflundef   af
    1527  * @opflclear   of,cf
     1481 * @opflclass   logical
    15281482 */
    15291483FNIEMOP_DEF(iemOp_xor_Gv_Ev)
     
    15381492 * @opcode      0x34
    15391493 * @opgroup     og_gen_arith_bin
    1540  * @opflmodify  cf,pf,af,zf,sf,of
    1541  * @opflundef   af
    1542  * @opflclear   of,cf
     1494 * @opflclass   logical
    15431495 */
    15441496FNIEMOP_DEF(iemOp_xor_Al_Ib)
     
    15531505 * @opcode      0x35
    15541506 * @opgroup     og_gen_arith_bin
    1555  * @opflmodify  cf,pf,af,zf,sf,of
    1556  * @opflundef   af
    1557  * @opflclear   of,cf
     1507 * @opflclass   logical
    15581508 */
    15591509FNIEMOP_DEF(iemOp_xor_eAX_Iz)
     
    15871537/**
    15881538 * @opcode      0x37
    1589  * @opfltest    af,cf
     1539 * @opfltest    af
    15901540 * @opflmodify  cf,pf,af,zf,sf,of
    15911541 * @opflundef   pf,zf,sf,of
     
    16361586/**
    16371587 * @opcode      0x38
     1588 * @opflclass   arithmetic
    16381589 */
    16391590FNIEMOP_DEF(iemOp_cmp_Eb_Gb)
     
    16461597/**
    16471598 * @opcode      0x39
     1599 * @opflclass   arithmetic
    16481600 */
    16491601FNIEMOP_DEF(iemOp_cmp_Ev_Gv)
     
    16561608/**
    16571609 * @opcode      0x3a
     1610 * @opflclass   arithmetic
    16581611 */
    16591612FNIEMOP_DEF(iemOp_cmp_Gb_Eb)
     
    16661619/**
    16671620 * @opcode      0x3b
     1621 * @opflclass   arithmetic
    16681622 */
    16691623FNIEMOP_DEF(iemOp_cmp_Gv_Ev)
     
    16761630/**
    16771631 * @opcode      0x3c
     1632 * @opflclass   arithmetic
    16781633 */
    16791634FNIEMOP_DEF(iemOp_cmp_Al_Ib)
     
    16861641/**
    16871642 * @opcode      0x3d
     1643 * @opflclass   arithmetic
    16881644 */
    16891645FNIEMOP_DEF(iemOp_cmp_eAX_Iz)
     
    17101666/**
    17111667 * @opcode      0x3f
    1712  * @opfltest    af,cf
     1668 * @opfltest    af
    17131669 * @opflmodify  cf,pf,af,zf,sf,of
    17141670 * @opflundef   pf,zf,sf,of
     
    17991755/**
    18001756 * @opcode      0x40
     1757 * @opflclass   incdec
    18011758 */
    18021759FNIEMOP_DEF(iemOp_inc_eAX)
     
    18211778/**
    18221779 * @opcode      0x41
     1780 * @opflclass   incdec
    18231781 */
    18241782FNIEMOP_DEF(iemOp_inc_eCX)
     
    18441802/**
    18451803 * @opcode      0x42
     1804 * @opflclass   incdec
    18461805 */
    18471806FNIEMOP_DEF(iemOp_inc_eDX)
     
    18681827/**
    18691828 * @opcode      0x43
     1829 * @opflclass   incdec
    18701830 */
    18711831FNIEMOP_DEF(iemOp_inc_eBX)
     
    18921852/**
    18931853 * @opcode      0x44
     1854 * @opflclass   incdec
    18941855 */
    18951856FNIEMOP_DEF(iemOp_inc_eSP)
     
    19151876/**
    19161877 * @opcode      0x45
     1878 * @opflclass   incdec
    19171879 */
    19181880FNIEMOP_DEF(iemOp_inc_eBP)
     
    19391901/**
    19401902 * @opcode      0x46
     1903 * @opflclass   incdec
    19411904 */
    19421905FNIEMOP_DEF(iemOp_inc_eSI)
     
    19631926/**
    19641927 * @opcode      0x47
     1928 * @opflclass   incdec
    19651929 */
    19661930FNIEMOP_DEF(iemOp_inc_eDI)
     
    19881952/**
    19891953 * @opcode      0x48
     1954 * @opflclass   incdec
    19901955 */
    19911956FNIEMOP_DEF(iemOp_dec_eAX)
     
    20111976/**
    20121977 * @opcode      0x49
     1978 * @opflclass   incdec
    20131979 */
    20141980FNIEMOP_DEF(iemOp_dec_eCX)
     
    20352001/**
    20362002 * @opcode      0x4a
     2003 * @opflclass   incdec
    20372004 */
    20382005FNIEMOP_DEF(iemOp_dec_eDX)
     
    20592026/**
    20602027 * @opcode      0x4b
     2028 * @opflclass   incdec
    20612029 */
    20622030FNIEMOP_DEF(iemOp_dec_eBX)
     
    20842052/**
    20852053 * @opcode      0x4c
     2054 * @opflclass   incdec
    20862055 */
    20872056FNIEMOP_DEF(iemOp_dec_eSP)
     
    21082077/**
    21092078 * @opcode      0x4d
     2079 * @opflclass   incdec
    21102080 */
    21112081FNIEMOP_DEF(iemOp_dec_eBP)
     
    21332103/**
    21342104 * @opcode      0x4e
     2105 * @opflclass   incdec
    21352106 */
    21362107FNIEMOP_DEF(iemOp_dec_eSI)
     
    21582129/**
    21592130 * @opcode      0x4f
     2131 * @opflclass   incdec
    21602132 */
    21612133FNIEMOP_DEF(iemOp_dec_eDI)
     
    26402612
    26412613
    2642 /** Opcode 0x63 - non-64-bit modes. */
     2614/**
     2615 * @opcode      0x63
     2616 * @opflmodify  zf
     2617 * @note        non-64-bit modes.
     2618 */
    26432619FNIEMOP_DEF(iemOp_arpl_Ew_Gw)
    26442620{
     
    28772853/**
    28782854 * @opcode      0x69
     2855 * @opflclass   multiply
    28792856 */
    28802857FNIEMOP_DEF(iemOp_imul_Gv_Ev_Iz)
     
    30783055/**
    30793056 * @opcode      0x6b
     3057 * @opflclass   multiply
    30803058 */
    30813059FNIEMOP_DEF(iemOp_imul_Gv_Ev_Ib)
     
    32413219/**
    32423220 * @opcode      0x6c
     3221 * @opfltest    iopl,df
    32433222 */
    32443223FNIEMOP_DEF(iemOp_insb_Yb_DX)
     
    32943273/**
    32953274 * @opcode      0x6d
     3275 * @opfltest    iopl,df
    32963276 */
    32973277FNIEMOP_DEF(iemOp_inswd_Yv_DX)
     
    34003380/**
    34013381 * @opcode      0x6e
     3382 * @opfltest    iopl,df
    34023383 */
    34033384FNIEMOP_DEF(iemOp_outsb_Yb_DX)
     
    34533434/**
    34543435 * @opcode      0x6f
     3436 * @opfltest    iopl,df
    34553437 */
    34563438FNIEMOP_DEF(iemOp_outswd_Yv_DX)
     
    35593541/**
    35603542 * @opcode      0x70
     3543 * @opfltest    of
    35613544 */
    35623545FNIEMOP_DEF(iemOp_jo_Jb)
     
    35793562/**
    35803563 * @opcode      0x71
     3564 * @opfltest    of
    35813565 */
    35823566FNIEMOP_DEF(iemOp_jno_Jb)
     
    35983582/**
    35993583 * @opcode      0x72
     3584 * @opfltest    cf
    36003585 */
    36013586FNIEMOP_DEF(iemOp_jc_Jb)
     
    36183603/**
    36193604 * @opcode      0x73
     3605 * @opfltest    cf
    36203606 */
    36213607FNIEMOP_DEF(iemOp_jnc_Jb)
     
    36383624/**
    36393625 * @opcode      0x74
     3626 * @opfltest    zf
    36403627 */
    36413628FNIEMOP_DEF(iemOp_je_Jb)
     
    36583645/**
    36593646 * @opcode      0x75
     3647 * @opfltest    zf
    36603648 */
    36613649FNIEMOP_DEF(iemOp_jne_Jb)
     
    36783666/**
    36793667 * @opcode      0x76
     3668 * @opfltest    cf,zf
    36803669 */
    36813670FNIEMOP_DEF(iemOp_jbe_Jb)
     
    36983687/**
    36993688 * @opcode      0x77
     3689 * @opfltest    cf,zf
    37003690 */
    37013691FNIEMOP_DEF(iemOp_jnbe_Jb)
     
    37183708/**
    37193709 * @opcode      0x78
     3710 * @opfltest    sf
    37203711 */
    37213712FNIEMOP_DEF(iemOp_js_Jb)
     
    37383729/**
    37393730 * @opcode      0x79
     3731 * @opfltest    sf
    37403732 */
    37413733FNIEMOP_DEF(iemOp_jns_Jb)
     
    37583750/**
    37593751 * @opcode      0x7a
     3752 * @opfltest    pf
    37603753 */
    37613754FNIEMOP_DEF(iemOp_jp_Jb)
     
    37783771/**
    37793772 * @opcode      0x7b
     3773 * @opfltest    pf
    37803774 */
    37813775FNIEMOP_DEF(iemOp_jnp_Jb)
     
    37983792/**
    37993793 * @opcode      0x7c
     3794 * @opfltest    sf,of
    38003795 */
    38013796FNIEMOP_DEF(iemOp_jl_Jb)
     
    38183813/**
    38193814 * @opcode      0x7d
     3815 * @opfltest    sf,of
    38203816 */
    38213817FNIEMOP_DEF(iemOp_jnl_Jb)
     
    38383834/**
    38393835 * @opcode      0x7e
     3836 * @opfltest    zf,sf,of
    38403837 */
    38413838FNIEMOP_DEF(iemOp_jle_Jb)
     
    38583855/**
    38593856 * @opcode      0x7f
     3857 * @opfltest    zf,sf,of
    38603858 */
    38613859FNIEMOP_DEF(iemOp_jnle_Jb)
     
    40104008 * @opmaps      grp1_80,grp1_83
    40114009 * @opcode      /0
     4010 * @opflclass   arithmetic
    40124011 */
    40134012FNIEMOP_DEF_1(iemOp_Grp1_add_Eb_Ib, uint8_t, bRm)
     
    40224021 * @opmaps      grp1_80,grp1_83
    40234022 * @opcode      /1
     4023 * @opflclass   logical
    40244024 */
    40254025FNIEMOP_DEF_1(iemOp_Grp1_or_Eb_Ib, uint8_t, bRm)
     
    40344034 * @opmaps      grp1_80,grp1_83
    40354035 * @opcode      /2
     4036 * @opflclass   arithmetic_carry
    40364037 */
    40374038FNIEMOP_DEF_1(iemOp_Grp1_adc_Eb_Ib, uint8_t, bRm)
     
    40464047 * @opmaps      grp1_80,grp1_83
    40474048 * @opcode      /3
     4049 * @opflclass   arithmetic_carry
    40484050 */
    40494051FNIEMOP_DEF_1(iemOp_Grp1_sbb_Eb_Ib, uint8_t, bRm)
     
    40584060 * @opmaps      grp1_80,grp1_83
    40594061 * @opcode      /4
     4062 * @opflclass   logical
    40604063 */
    40614064FNIEMOP_DEF_1(iemOp_Grp1_and_Eb_Ib, uint8_t, bRm)
     
    40704073 * @opmaps      grp1_80,grp1_83
    40714074 * @opcode      /5
     4075 * @opflclass   arithmetic
    40724076 */
    40734077FNIEMOP_DEF_1(iemOp_Grp1_sub_Eb_Ib, uint8_t, bRm)
     
    40824086 * @opmaps      grp1_80,grp1_83
    40834087 * @opcode      /6
     4088 * @opflclass   logical
    40844089 */
    40854090FNIEMOP_DEF_1(iemOp_Grp1_xor_Eb_Ib, uint8_t, bRm)
     
    40944099 * @opmaps      grp1_80,grp1_83
    40954100 * @opcode      /7
     4101 * @opflclass   arithmetic
    40964102 */
    40974103FNIEMOP_DEF_1(iemOp_Grp1_cmp_Eb_Ib, uint8_t, bRm)
     
    45264532 * @opmaps      grp1_81
    45274533 * @opcode      /0
     4534 * @opflclass   arithmetic
    45284535 */
    45294536FNIEMOP_DEF_1(iemOp_Grp1_add_Ev_Iz, uint8_t, bRm)
     
    45384545 * @opmaps      grp1_81
    45394546 * @opcode      /1
     4547 * @opflclass   logical
    45404548 */
    45414549FNIEMOP_DEF_1(iemOp_Grp1_or_Ev_Iz, uint8_t, bRm)
     
    45504558 * @opmaps      grp1_81
    45514559 * @opcode      /2
     4560 * @opflclass   arithmetic_carry
    45524561 */
    45534562FNIEMOP_DEF_1(iemOp_Grp1_adc_Ev_Iz, uint8_t, bRm)
     
    45624571 * @opmaps      grp1_81
    45634572 * @opcode      /3
     4573 * @opflclass   arithmetic_carry
    45644574 */
    45654575FNIEMOP_DEF_1(iemOp_Grp1_sbb_Ev_Iz, uint8_t, bRm)
     
    45744584 * @opmaps      grp1_81
    45754585 * @opcode      /4
     4586 * @opflclass   logical
    45764587 */
    45774588FNIEMOP_DEF_1(iemOp_Grp1_and_Ev_Iz, uint8_t, bRm)
     
    45864597 * @opmaps      grp1_81
    45874598 * @opcode      /5
     4599 * @opflclass   arithmetic
    45884600 */
    45894601FNIEMOP_DEF_1(iemOp_Grp1_sub_Ev_Iz, uint8_t, bRm)
     
    45984610 * @opmaps      grp1_81
    45994611 * @opcode      /6
     4612 * @opflclass   logical
    46004613 */
    46014614FNIEMOP_DEF_1(iemOp_Grp1_xor_Ev_Iz, uint8_t, bRm)
     
    46104623 * @opmaps      grp1_81
    46114624 * @opcode      /7
     4625 * @opflclass   arithmetic
    46124626 */
    46134627FNIEMOP_DEF_1(iemOp_Grp1_cmp_Ev_Iz, uint8_t, bRm)
     
    50265040 * @opmaps      grp1_83
    50275041 * @opcode      /0
     5042 * @opflclass   arithmetic
    50285043 */
    50295044FNIEMOP_DEF_1(iemOp_Grp1_add_Ev_Ib, uint8_t, bRm)
     
    50385053 * @opmaps      grp1_83
    50395054 * @opcode      /1
     5055 * @opflclass   logical
    50405056 */
    50415057FNIEMOP_DEF_1(iemOp_Grp1_or_Ev_Ib, uint8_t, bRm)
     
    50505066 * @opmaps      grp1_83
    50515067 * @opcode      /2
     5068 * @opflclass   arithmetic_carry
    50525069 */
    50535070FNIEMOP_DEF_1(iemOp_Grp1_adc_Ev_Ib, uint8_t, bRm)
     
    50625079 * @opmaps      grp1_83
    50635080 * @opcode      /3
     5081 * @opflclass   arithmetic_carry
    50645082 */
    50655083FNIEMOP_DEF_1(iemOp_Grp1_sbb_Ev_Ib, uint8_t, bRm)
     
    50745092 * @opmaps      grp1_83
    50755093 * @opcode      /4
     5094 * @opflclass   logical
    50765095 */
    50775096FNIEMOP_DEF_1(iemOp_Grp1_and_Ev_Ib, uint8_t, bRm)
     
    50865105 * @opmaps      grp1_83
    50875106 * @opcode      /5
     5107 * @opflclass   arithmetic
    50885108 */
    50895109FNIEMOP_DEF_1(iemOp_Grp1_sub_Ev_Ib, uint8_t, bRm)
     
    50985118 * @opmaps      grp1_83
    50995119 * @opcode      /6
     5120 * @opflclass   logical
    51005121 */
    51015122FNIEMOP_DEF_1(iemOp_Grp1_xor_Ev_Ib, uint8_t, bRm)
     
    51105131 * @opmaps      grp1_83
    51115132 * @opcode      /7
     5133 * @opflclass   arithmetic
    51125134 */
    51135135FNIEMOP_DEF_1(iemOp_Grp1_cmp_Ev_Ib, uint8_t, bRm)
     
    51445166/**
    51455167 * @opcode      0x84
     5168 * @opflclass   logical
    51465169 */
    51475170FNIEMOP_DEF(iemOp_test_Eb_Gb)
     
    51555178/**
    51565179 * @opcode      0x85
     5180 * @opflclass   logical
    51575181 */
    51585182FNIEMOP_DEF(iemOp_test_Ev_Gv)
     
    66936717/**
    66946718 * @opcode      0xa4
     6719 * @opfltest    df
    66956720 */
    66966721FNIEMOP_DEF(iemOp_movsb_Xb_Yb)
     
    67436768/**
    67446769 * @opcode      0xa5
     6770 * @opfltest    df
    67456771 */
    67466772FNIEMOP_DEF(iemOp_movswd_Xv_Yv)
     
    68996925/**
    69006926 * @opcode      0xa6
     6927 * @opflclass   arithmetic
     6928 * @opfltest    df
    69016929 */
    69026930FNIEMOP_DEF(iemOp_cmpsb_Xb_Yb)
     
    69777005/**
    69787006 * @opcode      0xa7
     7007 * @opflclass   arithmetic
     7008 * @opfltest    df
    69797009 */
    69807010FNIEMOP_DEF(iemOp_cmpswd_Xv_Yv)
     
    71777207/**
    71787208 * @opcode      0xa8
     7209 * @opflclass   logical
    71797210 */
    71807211FNIEMOP_DEF(iemOp_test_AL_Ib)
     
    71887219/**
    71897220 * @opcode      0xa9
     7221 * @opflclass   logical
    71907222 */
    71917223FNIEMOP_DEF(iemOp_test_eAX_Iz)
     
    73977429/**
    73987430 * @opcode      0xac
     7431 * @opfltest    df
    73997432 */
    74007433FNIEMOP_DEF(iemOp_lodsb_AL_Xb)
     
    74477480/**
    74487481 * @opcode      0xad
     7482 * @opfltest    df
    74497483 */
    74507484FNIEMOP_DEF(iemOp_lodswd_eAX_Xv)
     
    75957629/**
    75967630 * @opcode      0xae
     7631 * @opflclass   arithmetic
     7632 * @opfltest    df
    75977633 */
    75987634FNIEMOP_DEF(iemOp_scasb_AL_Xb)
     
    76667702/**
    76677703 * @opcode      0xaf
     7704 * @opflclass   arithmetic
     7705 * @opfltest    df
    76687706 */
    76697707FNIEMOP_DEF(iemOp_scaswd_eAX_Xv)
     
    91439181/**
    91449182 * @opcode      0xd4
     9183 * @opflmodify  cf,pf,af,zf,sf,of
     9184 * @opflundef   cf,af,of
    91459185 */
    91469186FNIEMOP_DEF(iemOp_aam_Ib)
    91479187{
     9188/** @todo testcase: aam   */
    91489189    IEMOP_MNEMONIC(aam_Ib, "aam Ib");
    91499190    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     
    91589199/**
    91599200 * @opcode      0xd5
     9201 * @opflmodify  cf,pf,af,zf,sf,of
     9202 * @opflundef   cf,af,of
    91609203 */
    91619204FNIEMOP_DEF(iemOp_aad_Ib)
    91629205{
     9206/** @todo testcase: aad?   */
    91639207    IEMOP_MNEMONIC(aad_Ib, "aad Ib");
    91649208    uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm);
     
    1241312457/**
    1241412458 * @opcode      0xe0
     12459 * @opfltest    zf
    1241512460 */
    1241612461FNIEMOP_DEF(iemOp_loopne_Jb)
     
    1246812513/**
    1246912514 * @opcode      0xe1
     12515 * @opfltest    zf
    1247012516 */
    1247112517FNIEMOP_DEF(iemOp_loope_Jb)
     
    1266512711
    1266612712
    12667 /** Opcode 0xe4 */
     12713/**
     12714 * @opcode      0xe4
     12715 * @opfltest    iopl
     12716 */
    1266812717FNIEMOP_DEF(iemOp_in_AL_Ib)
    1266912718{
     
    1267612725
    1267712726
    12678 /** Opcode 0xe5 */
     12727/**
     12728 * @opcode      0xe5
     12729 * @opfltest    iopl
     12730 */
    1267912731FNIEMOP_DEF(iemOp_in_eAX_Ib)
    1268012732{
     
    1268812740
    1268912741
    12690 /** Opcode 0xe6 */
     12742/**
     12743 * @opcode      0xe6
     12744 * @opfltest    iopl
     12745 */
    1269112746FNIEMOP_DEF(iemOp_out_Ib_AL)
    1269212747{
     
    1269912754
    1270012755
    12701 /** Opcode 0xe7 */
     12756/**
     12757 * @opcode      0xe7
     12758 * @opfltest    iopl
     12759 */
    1270212760FNIEMOP_DEF(iemOp_out_Ib_eAX)
    1270312761{
     
    1281612874
    1281712875
    12818 /** Opcode 0xec */
     12876/**
     12877 * @opcode      0xec
     12878 * @opfltest    iopl
     12879 */
    1281912880FNIEMOP_DEF(iemOp_in_AL_DX)
    1282012881{
     
    1282712888
    1282812889
    12829 /** Opcode 0xed */
     12890/**
     12891 * @opcode      0xed
     12892 * @opfltest    iopl
     12893 */
    1283012894FNIEMOP_DEF(iemOp_in_eAX_DX)
    1283112895{
     
    1283912903
    1284012904
    12841 /** Opcode 0xee */
     12905/**
     12906 * @opcode      0xee
     12907 * @opfltest    iopl
     12908 */
    1284212909FNIEMOP_DEF(iemOp_out_DX_AL)
    1284312910{
     
    1284912916
    1285012917
    12851 /** Opcode 0xef */
     12918/**
     12919 * @opcode      0xef
     12920 * @opfltest    iopl
     12921 */
    1285212922FNIEMOP_DEF(iemOp_out_DX_eAX)
    1285312923{
     
    1294113011/**
    1294213012 * @opcode      0xf5
     13013 * @opflmodify  cf
    1294313014 */
    1294413015FNIEMOP_DEF(iemOp_cmc)
     
    1320913280 * @opmaps  grp3_f6
    1321013281 * @opcode  /0
     13282 * @opflclass   logical
    1321113283 * @todo also /1
    1321213284 */
     
    1348313555
    1348413556/**
    13485  * @opmaps  grp3_f6
    13486  * @opcode  /2
     13557 * @opmaps      grp3_f6
     13558 * @opcode      /2
     13559 * @opflclass   unchanged
    1348713560 */
    1348813561FNIEMOP_DEF_1(iemOp_grp3_not_Eb, uint8_t, bRm)
    1348913562{
     13563/** @todo does not modify EFLAGS. */
    1349013564    IEMOP_MNEMONIC(not_Eb, "not Eb");
    1349113565    IEMOP_BODY_UNARY_Eb(bRm, iemAImpl_not_u8, iemAImpl_not_u8_locked);
     
    1349413568
    1349513569/**
    13496  * @opmaps  grp3_f6
    13497  * @opcode  /3
     13570 * @opmaps      grp3_f6
     13571 * @opcode      /3
     13572 * @opflclass   arithmetic
    1349813573 */
    1349913574FNIEMOP_DEF_1(iemOp_grp3_neg_Eb, uint8_t, bRm)
     
    1351713592        case 3: return FNIEMOP_CALL_1(iemOp_grp3_neg_Eb, bRm);
    1351813593        case 4:
     13594            /**
     13595             * @opdone
     13596             * @opmaps      grp3_f6
     13597             * @opcode      /4
     13598             * @opflclass   multiply
     13599             */
    1351913600            IEMOP_MNEMONIC(mul_Eb, "mul Eb");
    1352013601            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF);
    1352113602            return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEb, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_mul_u8_eflags));
    1352213603        case 5:
     13604            /**
     13605             * @opdone
     13606             * @opmaps      grp3_f6
     13607             * @opcode      /5
     13608             * @opflclass   multiply
     13609             */
    1352313610            IEMOP_MNEMONIC(imul_Eb, "imul Eb");
    1352413611            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF);
    1352513612            return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEb, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_u8_eflags));
    1352613613        case 6:
     13614            /**
     13615             * @opdone
     13616             * @opmaps      grp3_f6
     13617             * @opcode      /6
     13618             * @opflclass   division
     13619             */
    1352713620            IEMOP_MNEMONIC(div_Eb, "div Eb");
    1352813621            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF);
    1352913622            return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEb, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_div_u8_eflags));
    1353013623        case 7:
     13624            /**
     13625             * @opdone
     13626             * @opmaps      grp3_f6
     13627             * @opcode      /7
     13628             * @opflclass   division
     13629             */
    1353113630            IEMOP_MNEMONIC(idiv_Eb, "idiv Eb");
    1353213631            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF);
     
    1353713636
    1353813637
    13539 /** Opcode 0xf7 /0. */
     13638/**
     13639 * @opmaps      grp3_f7
     13640 * @opcode      /0
     13641 * @opflclass   logical
     13642 */
    1354013643FNIEMOP_DEF_1(iemOp_grp3_test_Ev, uint8_t, bRm)
    1354113644{
     
    1367413777
    1367513778
    13676 /** Opcode 0xf7 /2. */
     13779/**
     13780 * @opmaps      grp3_f7
     13781 * @opcode      /2
     13782 * @opflclass   unchanged
     13783 */
    1367713784FNIEMOP_DEF_1(iemOp_grp3_not_Ev, uint8_t, bRm)
    1367813785{
     13786/** @todo does not modify EFLAGS  */
    1367913787    IEMOP_MNEMONIC(not_Ev, "not Ev");
    1368013788    IEMOP_BODY_UNARY_Ev(       iemAImpl_not_u16,        iemAImpl_not_u32,        iemAImpl_not_u64);
     
    1368313791
    1368413792
    13685 /** Opcode 0xf7 /3. */
     13793/**
     13794 * @opmaps      grp3_f7
     13795 * @opcode      /3
     13796 * @opflclass   arithmetic
     13797 */
    1368613798FNIEMOP_DEF_1(iemOp_grp3_neg_Ev, uint8_t, bRm)
    1368713799{
     
    1370513817        case 3: return FNIEMOP_CALL_1(iemOp_grp3_neg_Ev, bRm);
    1370613818        case 4:
     13819            /**
     13820             * @opdone
     13821             * @opmaps      grp3_f7
     13822             * @opcode      /4
     13823             * @opflclass   multiply
     13824             */
    1370713825            IEMOP_MNEMONIC(mul_Ev, "mul Ev");
    1370813826            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF);
    1370913827            return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEv, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_mul_eflags));
    1371013828        case 5:
     13829            /**
     13830             * @opdone
     13831             * @opmaps      grp3_f7
     13832             * @opcode      /5
     13833             * @opflclass   multiply
     13834             */
    1371113835            IEMOP_MNEMONIC(imul_Ev, "imul Ev");
    1371213836            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF);
    1371313837            return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEv, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_eflags));
    1371413838        case 6:
     13839            /**
     13840             * @opdone
     13841             * @opmaps      grp3_f7
     13842             * @opcode      /6
     13843             * @opflclass   division
     13844             */
    1371513845            IEMOP_MNEMONIC(div_Ev, "div Ev");
    1371613846            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF);
    1371713847            return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEv, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_div_eflags));
    1371813848        case 7:
     13849            /**
     13850             * @opdone
     13851             * @opmaps      grp3_f7
     13852             * @opcode      /7
     13853             * @opflclass   division
     13854             */
    1371913855            IEMOP_MNEMONIC(idiv_Ev, "idiv Ev");
    1372013856            IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF);
     
    1372713863/**
    1372813864 * @opcode      0xf8
     13865 * @opflmodify  cf
     13866 * @opflclear   cf
    1372913867 */
    1373013868FNIEMOP_DEF(iemOp_clc)
     
    1374113879/**
    1374213880 * @opcode      0xf9
     13881 * @opflmodify  cf
     13882 * @opflset     cf
    1374313883 */
    1374413884FNIEMOP_DEF(iemOp_stc)
     
    1375513895/**
    1375613896 * @opcode      0xfa
     13897 * @opfltest    iopl,vm
     13898 * @opflmodify  if,vif
    1375713899 */
    1375813900FNIEMOP_DEF(iemOp_cli)
     
    1376413906
    1376513907
     13908/**
     13909 * @opcode      0xfb
     13910 * @opfltest    iopl,vm
     13911 * @opflmodify  if,vif
     13912 */
    1376613913FNIEMOP_DEF(iemOp_sti)
    1376713914{
     
    1377513922/**
    1377613923 * @opcode      0xfc
     13924 * @opflmodify  df
     13925 * @opflclear   df
    1377713926 */
    1377813927FNIEMOP_DEF(iemOp_cld)
     
    1378913938/**
    1379013939 * @opcode      0xfd
     13940 * @opflmodify  df
     13941 * @opflset     df
    1379113942 */
    1379213943FNIEMOP_DEF(iemOp_std)
     
    1380213953
    1380313954/**
    13804  * @opmaps  grp4
    13805  * @opcode  /0
     13955 * @opmaps      grp4
     13956 * @opcode      /0
     13957 * @opflclass   incdec
    1380613958 */
    1380713959FNIEMOP_DEF_1(iemOp_Grp4_inc_Eb, uint8_t, bRm)
     
    1381313965
    1381413966/**
    13815  * @opmaps  grp4
    13816  * @opcode  /1
     13967 * @opmaps      grp4
     13968 * @opcode      /1
     13969 * @opflclass   incdec
    1381713970 */
    1381813971FNIEMOP_DEF_1(iemOp_Grp4_dec_Eb, uint8_t, bRm)
     
    1384013993}
    1384113994
    13842 /** Opcode 0xff /0. */
     13995/**
     13996 * @opmaps      grp5
     13997 * @opcode      /0
     13998 * @opflclass   incdec
     13999 */
    1384314000FNIEMOP_DEF_1(iemOp_Grp5_inc_Ev, uint8_t, bRm)
    1384414001{
     
    1384914006
    1385014007
    13851 /** Opcode 0xff /1. */
     14008/**
     14009 * @opmaps      grp5
     14010 * @opcode      /1
     14011 * @opflclass   incdec
     14012 */
    1385214013FNIEMOP_DEF_1(iemOp_Grp5_dec_Ev, uint8_t, bRm)
    1385314014{
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py

    r103182 r103185  
    421421## \@oppfx values.
    422422g_kdPrefixes = {
    423     'none': [],
    424     '0x66': [],
    425     '0xf3': [],
    426     '0xf2': [],
     423    'none':  [],
     424    '0x66':  [],
     425    '0xf3':  [],
     426    '0xf2':  [],
     427    '!0xf3': [], # special case for bsf/tzcnt
    427428};
    428429
     
    456457    '!11 mr/reg vex.l=0':   [ '!11 mr/reg vex.l=0', 'L0',       ],
    457458    '!11 mr/reg vex.l=1':   [ '!11 mr/reg vex.l=1', 'L1',       ],
     459    '!11 mr/reg rex.w=0':   [ '!11 mr/reg rex.w=0', '',         ],
     460    '!11 mr/reg rex.w=1':   [ '!11 mr/reg rex.w=1', '',         ],
    458461};
    459462
     
    35263529            '@opcodesub':   self.parseTagOpcodeSub,
    35273530            '@openc':       self.parseTagOpEnc,
     3531            #@opfltest:     Lists all flags that will be used as input in some way.
    35283532            '@opfltest':    self.parseTagOpEFlags,
     3533            #@opflmodify:   Lists all EFLAGS modified. Includes @opflset, @opflcleared and @opflundef (if applicable).
    35293534            '@opflmodify':  self.parseTagOpEFlags,
     3535            #@opflclear:    Lists all flags that will be set (set to 1).
     3536            '@opflset':     self.parseTagOpEFlags,
     3537            #@opflclear:    Lists all flags that will be cleared (set to 0).
     3538            '@opflclear':   self.parseTagOpEFlags,
     3539            #@opflundef:    List of flag documented as undefined.
    35303540            '@opflundef':   self.parseTagOpEFlags,
    3531             '@opflset':     self.parseTagOpEFlags,
    3532             '@opflclear':   self.parseTagOpEFlags,
     3541            #@opflclass:    Shorthand for defining flag behaviour (@opfltest, @opfmodify, @opflset, @opflclear, @opflundef).
     3542            '@opflclass':   self.parseTagOpEFlagsClass,
    35333543            '@ophints':     self.parseTagOpHints,
    35343544            '@opdisenum':   self.parseTagOpDisEnum,
     
    41184128        """
    41194129        Tag:        @oppfx
    4120         Value:      n/a|none|0x66|0xf3|0xf2
     4130        Value:      n/a|none|0x66|0xf3|0xf2|!0xf3
    41214131
    41224132        Required prefix for the instruction.  (In a (E)VEX context this is the
     
    41404150                sPrefix = '0x' + sPrefix;
    41414151            if not _isValidOpcodeByte(sPrefix):
    4142                 return self.errorComment(iTagLine, '%s: invalid prefix: %s' % (sTag, sPrefix,));
     4152                if sPrefix != '!0xf3':
     4153                    return self.errorComment(iTagLine, '%s: invalid prefix: %s' % (sTag, sPrefix,));
    41434154
    41444155        if sPrefix is not None and sPrefix not in g_kdPrefixes:
     
    41884199        Value:      none | 11 mr/reg | !11 mr/reg | rex.w=0 | rex.w=1 | vex.l=0 | vex.l=1
    41894200                    | 11 mr/reg vex.l=0 | 11 mr/reg vex.l=1 | !11 mr/reg vex.l=0 | !11 mr/reg vex.l=1
     4201                    | !11 rex.w=0 | !11 mr/reg rex.w=0
     4202                    | !11 rex.w=1 | !11 mr/reg rex.w=1
    41904203
    41914204        This is a simple way of dealing with encodings where the mod=3 and mod!=3
     
    41984211        sSubOpcode = self.flattenAllSections(aasSections);
    41994212        if sSubOpcode not in g_kdSubOpcodes:
    4200             return self.errorComment(iTagLine, '%s: invalid sub opcode: %s  (valid: 11, !11, none)' % (sTag, sSubOpcode,));
     4213            return self.errorComment(iTagLine, '%s: invalid sub opcode: %s  (valid: %s)'
     4214                                     % (sTag, sSubOpcode, ', '.join(sorted(g_kdSubOpcodes.keys())),));
    42014215        sSubOpcode = g_kdSubOpcodes[sSubOpcode][0];
    42024216
     
    42714285        # Set them.
    42724286        asOld = getattr(oInstr, self.kdOpFlagToAttr[sTag]);
    4273         if asOld is not None:
     4287        if asOld is not None and len(asOld) > 0:
    42744288            return self.errorComment(iTagLine, '%s: attempting to overwrite "%s" with "%s"' % ( sTag, asOld, asFlags,));
    42754289        setattr(oInstr, self.kdOpFlagToAttr[sTag], asFlags);
     
    42774291        _ = iEndLine;
    42784292        return True;
     4293
     4294    ## EFLAGS class definitions with their attribute lists.
     4295    kdEFlagsClasses = {
     4296        'arithmetic': { # add, sub, ...
     4297            'asFlTest':         [],
     4298            'asFlModify':       [ 'cf', 'pf', 'af', 'zf', 'sf', 'of', ],
     4299            'asFlClear':        [],
     4300            'asFlSet':          [],
     4301            'asFlUndefined':    [],
     4302        },
     4303        'arithmetic_carry': { # adc, sbb, ...
     4304            'asFlTest':         [ 'cf', ],
     4305            'asFlModify':       [ 'cf', 'pf', 'af', 'zf', 'sf', 'of', ],
     4306            'asFlClear':        [],
     4307            'asFlSet':          [],
     4308            'asFlUndefined':    [],
     4309        },
     4310        'incdec': {
     4311            'asFlTest':         [],
     4312            'asFlModify':       [ 'pf', 'af', 'zf', 'sf', 'of', ], # leaves CF alone
     4313            'asFlClear':        [],
     4314            'asFlSet':          [],
     4315            'asFlUndefined':    [],
     4316        },
     4317        'division': { ## @todo specify intel/amd differences...
     4318            'asFlTest':         [ 'pf', 'af', 'zf', 'sf', ], # Intel leaves all flags unchanged.
     4319            'asFlModify':       [ 'pf', 'af', 'zf', 'sf', ], # While AMD sets AF and clears PF, ZF & SF, leaving CF and OF alone.
     4320            'asFlClear':        [],
     4321            'asFlSet':          [],
     4322            'asFlUndefined':    [ 'cf', 'pf', 'af', 'zf', 'sf', 'of', ],
     4323        },
     4324        'multiply': { ## @todo specify intel/amd differences...
     4325            'asFlTest':         [ 'pf', 'af', 'zf', 'sf', ], # AMD leaves these unchanged, so we have to delcare them as inputs.
     4326            'asFlModify':       [ 'cf', 'pf', 'af', 'zf', 'sf', 'of' ], # Intel always modifies all flags, but how differs
     4327            'asFlClear':        [],                                     # between IMUL and MUL.
     4328            'asFlSet':          [],
     4329            'asFlUndefined':    [ 'pf', 'af', 'zf', 'sf', ],
     4330        },
     4331        'logical': { # and, or, xor, ...
     4332            'asFlTest':         [],
     4333            'asFlModify':       [ 'cf', 'pf', 'af', 'zf', 'sf', 'of', ],
     4334            'asFlClear':        [ 'cf', 'af', 'of', ], # 'af' is undefined, but tstIEMAImpl indicates that it is cleared.
     4335            'asFlSet':          [],
     4336            'asFlUndefined':    [ 'af', ],
     4337        },
     4338        'bitmap': { # bt, btc, btr, btc
     4339            'asFlTest':         [],
     4340            'asFlModify':       [ 'cf', ],
     4341            'asFlClear':        [],
     4342            'asFlSet':          [],
     4343            'asFlUndefined':    [ 'pf', 'af', 'zf', 'sf', 'of', ], # tstIEMAImpl indicates that they aren't modified.
     4344        },
     4345        'unchanged': {
     4346            'asFlTest':         [],
     4347            'asFlModify':       [],
     4348            'asFlClear':        [],
     4349            'asFlSet':          [],
     4350            'asFlUndefined':    [],
     4351        },
     4352    }
     4353    def parseTagOpEFlagsClass(self, sTag, aasSections, iTagLine, iEndLine):
     4354        """
     4355        Tags:   @opflclass
     4356        Value:  arithmetic, logical
     4357
     4358        """
     4359        oInstr = self.ensureInstructionForOpTag(iTagLine);
     4360
     4361        # Flatten and validate the value.
     4362        sClass = self.flattenAllSections(aasSections);
     4363        kdAttribs = self.kdEFlagsClasses.get(sClass);
     4364        if not kdAttribs:
     4365            return self.errorComment(iTagLine, '%s: Unknown EFLAGS class: %s' % ( sTag, sClass,));
     4366
     4367        # Set the attributes.
     4368        for sAttrib, asFlags in kdAttribs.items():
     4369            asOld = getattr(oInstr, sAttrib);
     4370            if asOld is not None:
     4371                return self.errorComment(iTagLine, '%s: attempting to overwrite "%s" with "%s" for %s'
     4372                                         % ( sTag, asOld, asFlags, sAttrib));
     4373            setattr(oInstr, sAttrib, asFlags);
     4374
     4375        _ = iEndLine;
     4376        return True;
     4377
    42794378
    42804379    def parseTagOpHints(self, sTag, aasSections, iTagLine, iEndLine):
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h

    r103181 r103185  
    18541854}
    18551855
    1856 /** Opcode 0x0f 0x00 /3. */
    18571856FNIEMOP_DEF_1(iemOpCommonLarLsl_Gv_Ew, bool, fIsLar)
    18581857{
     
    19471946
    19481947
    1949 /** Opcode 0x0f 0x02. */
     1948/**
     1949 * @opcode      0x02
     1950 * @opflmodify  zf
     1951 */
    19501952FNIEMOP_DEF(iemOp_lar_Gv_Ew)
    19511953{
     
    19551957
    19561958
    1957 /** Opcode 0x0f 0x03. */
     1959/**
     1960 * @opcode      0x03
     1961 * @opflmodify  zf
     1962 */
    19581963FNIEMOP_DEF(iemOp_lsl_Gv_Ew)
    19591964{
     
    48684873
    48694874
    4870 /** Opcode      0x0f 0x2e - ucomiss Vss, Wss */
     4875/**
     4876 * @opcode      0x2e
     4877 * @oppfx       none
     4878 * @opflmodify  cf,pf,af,zf,sf,ov
     4879 * @opflclear   af,sf,of
     4880 */
    48714881FNIEMOP_DEF(iemOp_ucomiss_Vss_Wss)
    48724882{
     
    49374947
    49384948
    4939 /** Opcode 0x66 0x0f 0x2e - ucomisd Vsd, Wsd */
     4949/**
     4950 * @opcode      0x2e
     4951 * @oppfx       0x66
     4952 * @opflmodify  cf,pf,af,zf,sf,ov
     4953 * @opflclear   af,sf,of
     4954 */
    49404955FNIEMOP_DEF(iemOp_ucomisd_Vsd_Wsd)
    49414956{
     
    50105025
    50115026
    5012 /** Opcode      0x0f 0x2f - comiss Vss, Wss */
     5027/**
     5028 * @opcode      0x2e
     5029 * @oppfx       none
     5030 * @opflmodify  cf,pf,af,zf,sf,ov
     5031 * @opflclear   af,sf,of
     5032 */
    50135033FNIEMOP_DEF(iemOp_comiss_Vss_Wss)
    50145034{
     
    50795099
    50805100
    5081 /** Opcode 0x66 0x0f 0x2f - comisd Vsd, Wsd */
     5101/**
     5102 * @opcode      0x2f
     5103 * @oppfx       0x66
     5104 * @opflmodify  cf,pf,af,zf,sf,ov
     5105 * @opflclear   af,sf,of
     5106 */
    50825107FNIEMOP_DEF(iemOp_comisd_Vsd_Wsd)
    50835108{
     
    53555380
    53565381
    5357 /** Opcode 0x0f 0x40. */
     5382/**
     5383 * @opcode      0x40
     5384 * @opfltest    of
     5385 */
    53585386FNIEMOP_DEF(iemOp_cmovo_Gv_Ev)
    53595387{
     
    53635391
    53645392
    5365 /** Opcode 0x0f 0x41. */
     5393/**
     5394 * @opcode      0x41
     5395 * @opfltest    of
     5396 */
    53665397FNIEMOP_DEF(iemOp_cmovno_Gv_Ev)
    53675398{
     
    53715402
    53725403
    5373 /** Opcode 0x0f 0x42. */
     5404/**
     5405 * @opcode      0x42
     5406 * @opfltest    cf
     5407 */
    53745408FNIEMOP_DEF(iemOp_cmovc_Gv_Ev)
    53755409{
     
    53795413
    53805414
    5381 /** Opcode 0x0f 0x43. */
     5415/**
     5416 * @opcode      0x43
     5417 * @opfltest    cf
     5418 */
    53825419FNIEMOP_DEF(iemOp_cmovnc_Gv_Ev)
    53835420{
     
    53875424
    53885425
    5389 /** Opcode 0x0f 0x44. */
     5426/**
     5427 * @opcode      0x44
     5428 * @opfltest    zf
     5429 */
    53905430FNIEMOP_DEF(iemOp_cmove_Gv_Ev)
    53915431{
     
    53955435
    53965436
    5397 /** Opcode 0x0f 0x45. */
     5437/**
     5438 * @opcode      0x45
     5439 * @opfltest    zf
     5440 */
    53985441FNIEMOP_DEF(iemOp_cmovne_Gv_Ev)
    53995442{
     
    54035446
    54045447
    5405 /** Opcode 0x0f 0x46. */
     5448/**
     5449 * @opcode      0x46
     5450 * @opfltest    cf,zf
     5451 */
    54065452FNIEMOP_DEF(iemOp_cmovbe_Gv_Ev)
    54075453{
     
    54115457
    54125458
    5413 /** Opcode 0x0f 0x47. */
     5459/**
     5460 * @opcode      0x47
     5461 * @opfltest    cf,zf
     5462 */
    54145463FNIEMOP_DEF(iemOp_cmovnbe_Gv_Ev)
    54155464{
     
    54195468
    54205469
    5421 /** Opcode 0x0f 0x48. */
     5470/**
     5471 * @opcode      0x48
     5472 * @opfltest    sf
     5473 */
    54225474FNIEMOP_DEF(iemOp_cmovs_Gv_Ev)
    54235475{
     
    54275479
    54285480
    5429 /** Opcode 0x0f 0x49. */
     5481/**
     5482 * @opcode      0x49
     5483 * @opfltest    sf
     5484 */
    54305485FNIEMOP_DEF(iemOp_cmovns_Gv_Ev)
    54315486{
     
    54355490
    54365491
    5437 /** Opcode 0x0f 0x4a. */
     5492/**
     5493 * @opcode      0x4a
     5494 * @opfltest    pf
     5495 */
    54385496FNIEMOP_DEF(iemOp_cmovp_Gv_Ev)
    54395497{
     
    54435501
    54445502
    5445 /** Opcode 0x0f 0x4b. */
     5503/**
     5504 * @opcode      0x4b
     5505 * @opfltest    pf
     5506 */
    54465507FNIEMOP_DEF(iemOp_cmovnp_Gv_Ev)
    54475508{
     
    54515512
    54525513
    5453 /** Opcode 0x0f 0x4c. */
     5514/**
     5515 * @opcode      0x4c
     5516 * @opfltest    sf,of
     5517 */
    54545518FNIEMOP_DEF(iemOp_cmovl_Gv_Ev)
    54555519{
     
    54595523
    54605524
    5461 /** Opcode 0x0f 0x4d. */
     5525/**
     5526 * @opcode      0x4d
     5527 * @opfltest    sf,of
     5528 */
    54625529FNIEMOP_DEF(iemOp_cmovnl_Gv_Ev)
    54635530{
     
    54675534
    54685535
    5469 /** Opcode 0x0f 0x4e. */
     5536/**
     5537 * @opcode      0x4e
     5538 * @opfltest    zf,sf,of
     5539 */
    54705540FNIEMOP_DEF(iemOp_cmovle_Gv_Ev)
    54715541{
     
    54755545
    54765546
    5477 /** Opcode 0x0f 0x4f. */
     5547/**
     5548 * @opcode      0x4e
     5549 * @opfltest    zf,sf,of
     5550 */
    54785551FNIEMOP_DEF(iemOp_cmovnle_Gv_Ev)
    54795552{
     
    77437816
    77447817
    7745 
    7746 /** Opcode 0x0f 0x80. */
     7818/**
     7819 * @opcode      0x80
     7820 * @opfltest    of
     7821 */
    77477822FNIEMOP_DEF(iemOp_jo_Jv)
    77487823{
     
    77777852
    77787853
    7779 /** Opcode 0x0f 0x81. */
     7854/**
     7855 * @opcode      0x81
     7856 * @opfltest    of
     7857 */
    77807858FNIEMOP_DEF(iemOp_jno_Jv)
    77817859{
     
    78107888
    78117889
    7812 /** Opcode 0x0f 0x82. */
     7890/**
     7891 * @opcode      0x82
     7892 * @opfltest    cf
     7893 */
    78137894FNIEMOP_DEF(iemOp_jc_Jv)
    78147895{
     
    78437924
    78447925
    7845 /** Opcode 0x0f 0x83. */
     7926/**
     7927 * @opcode      0x83
     7928 * @opfltest    cf
     7929 */
    78467930FNIEMOP_DEF(iemOp_jnc_Jv)
    78477931{
     
    78767960
    78777961
    7878 /** Opcode 0x0f 0x84. */
     7962/**
     7963 * @opcode      0x84
     7964 * @opfltest    zf
     7965 */
    78797966FNIEMOP_DEF(iemOp_je_Jv)
    78807967{
     
    79097996
    79107997
    7911 /** Opcode 0x0f 0x85. */
     7998/**
     7999 * @opcode      0x85
     8000 * @opfltest    zf
     8001 */
    79128002FNIEMOP_DEF(iemOp_jne_Jv)
    79138003{
     
    79428032
    79438033
    7944 /** Opcode 0x0f 0x86. */
     8034/**
     8035 * @opcode      0x86
     8036 * @opfltest    cf,zf
     8037 */
    79458038FNIEMOP_DEF(iemOp_jbe_Jv)
    79468039{
     
    79758068
    79768069
    7977 /** Opcode 0x0f 0x87. */
     8070/**
     8071 * @opcode      0x87
     8072 * @opfltest    cf,zf
     8073 */
    79788074FNIEMOP_DEF(iemOp_jnbe_Jv)
    79798075{
     
    80088104
    80098105
    8010 /** Opcode 0x0f 0x88. */
     8106/**
     8107 * @opcode      0x88
     8108 * @opfltest    sf
     8109 */
    80118110FNIEMOP_DEF(iemOp_js_Jv)
    80128111{
     
    80418140
    80428141
    8043 /** Opcode 0x0f 0x89. */
     8142/**
     8143 * @opcode      0x89
     8144 * @opfltest    sf
     8145 */
    80448146FNIEMOP_DEF(iemOp_jns_Jv)
    80458147{
     
    80748176
    80758177
    8076 /** Opcode 0x0f 0x8a. */
     8178/**
     8179 * @opcode      0x8a
     8180 * @opfltest    pf
     8181 */
    80778182FNIEMOP_DEF(iemOp_jp_Jv)
    80788183{
     
    81078212
    81088213
    8109 /** Opcode 0x0f 0x8b. */
     8214/**
     8215 * @opcode      0x8b
     8216 * @opfltest    pf
     8217 */
    81108218FNIEMOP_DEF(iemOp_jnp_Jv)
    81118219{
     
    81408248
    81418249
    8142 /** Opcode 0x0f 0x8c. */
     8250/**
     8251 * @opcode      0x8c
     8252 * @opfltest    sf,of
     8253 */
    81438254FNIEMOP_DEF(iemOp_jl_Jv)
    81448255{
     
    81738284
    81748285
    8175 /** Opcode 0x0f 0x8d. */
     8286/**
     8287 * @opcode      0x8d
     8288 * @opfltest    sf,of
     8289 */
    81768290FNIEMOP_DEF(iemOp_jnl_Jv)
    81778291{
     
    82068320
    82078321
    8208 /** Opcode 0x0f 0x8e. */
     8322/**
     8323 * @opcode      0x8e
     8324 * @opfltest    zf,sf,of
     8325 */
    82098326FNIEMOP_DEF(iemOp_jle_Jv)
    82108327{
     
    82398356
    82408357
    8241 /** Opcode 0x0f 0x8f. */
     8358/**
     8359 * @opcode      0x8f
     8360 * @opfltest    zf,sf,of
     8361 */
    82428362FNIEMOP_DEF(iemOp_jnle_Jv)
    82438363{
     
    82728392
    82738393
    8274 /** Opcode 0x0f 0x90. */
     8394/**
     8395 * @opcode      0x90
     8396 * @opfltest    of
     8397 */
    82758398FNIEMOP_DEF(iemOp_seto_Eb)
    82768399{
     
    83138436
    83148437
    8315 /** Opcode 0x0f 0x91. */
     8438/**
     8439 * @opcode      0x91
     8440 * @opfltest    of
     8441 */
    83168442FNIEMOP_DEF(iemOp_setno_Eb)
    83178443{
     
    83548480
    83558481
    8356 /** Opcode 0x0f 0x92. */
     8482/**
     8483 * @opcode      0x92
     8484 * @opfltest    cf
     8485 */
    83578486FNIEMOP_DEF(iemOp_setc_Eb)
    83588487{
     
    83958524
    83968525
    8397 /** Opcode 0x0f 0x93. */
     8526/**
     8527 * @opcode      0x93
     8528 * @opfltest    cf
     8529 */
    83988530FNIEMOP_DEF(iemOp_setnc_Eb)
    83998531{
     
    84368568
    84378569
    8438 /** Opcode 0x0f 0x94. */
     8570/**
     8571 * @opcode      0x94
     8572 * @opfltest    zf
     8573 */
    84398574FNIEMOP_DEF(iemOp_sete_Eb)
    84408575{
     
    84778612
    84788613
    8479 /** Opcode 0x0f 0x95. */
     8614/**
     8615 * @opcode      0x95
     8616 * @opfltest    zf
     8617 */
    84808618FNIEMOP_DEF(iemOp_setne_Eb)
    84818619{
     
    85188656
    85198657
    8520 /** Opcode 0x0f 0x96. */
     8658/**
     8659 * @opcode      0x96
     8660 * @opfltest    cf,zf
     8661 */
    85218662FNIEMOP_DEF(iemOp_setbe_Eb)
    85228663{
     
    85598700
    85608701
    8561 /** Opcode 0x0f 0x97. */
     8702/**
     8703 * @opcode      0x97
     8704 * @opfltest    cf,zf
     8705 */
    85628706FNIEMOP_DEF(iemOp_setnbe_Eb)
    85638707{
     
    86008744
    86018745
    8602 /** Opcode 0x0f 0x98. */
     8746/**
     8747 * @opcode      0x98
     8748 * @opfltest    sf
     8749 */
    86038750FNIEMOP_DEF(iemOp_sets_Eb)
    86048751{
     
    86418788
    86428789
    8643 /** Opcode 0x0f 0x99. */
     8790/**
     8791 * @opcode      0x99
     8792 * @opfltest    sf
     8793 */
    86448794FNIEMOP_DEF(iemOp_setns_Eb)
    86458795{
     
    86828832
    86838833
    8684 /** Opcode 0x0f 0x9a. */
     8834/**
     8835 * @opcode      0x9a
     8836 * @opfltest    pf
     8837 */
    86858838FNIEMOP_DEF(iemOp_setp_Eb)
    86868839{
     
    87238876
    87248877
    8725 /** Opcode 0x0f 0x9b. */
     8878/**
     8879 * @opcode      0x9b
     8880 * @opfltest    pf
     8881 */
    87268882FNIEMOP_DEF(iemOp_setnp_Eb)
    87278883{
     
    87648920
    87658921
    8766 /** Opcode 0x0f 0x9c. */
     8922/**
     8923 * @opcode      0x9c
     8924 * @opfltest    sf,of
     8925 */
    87678926FNIEMOP_DEF(iemOp_setl_Eb)
    87688927{
     
    88058964
    88068965
    8807 /** Opcode 0x0f 0x9d. */
     8966/**
     8967 * @opcode      0x9d
     8968 * @opfltest    sf,of
     8969 */
    88088970FNIEMOP_DEF(iemOp_setnl_Eb)
    88098971{
     
    88469008
    88479009
    8848 /** Opcode 0x0f 0x9e. */
     9010/**
     9011 * @opcode      0x9e
     9012 * @opfltest    zf,sf,of
     9013 */
    88499014FNIEMOP_DEF(iemOp_setle_Eb)
    88509015{
     
    88879052
    88889053
    8889 /** Opcode 0x0f 0x9f. */
     9054/**
     9055 * @opcode      0x9f
     9056 * @opfltest    zf,sf,of
     9057 */
    88909058FNIEMOP_DEF(iemOp_setnle_Eb)
    88919059{
     
    93999567
    94009568
    9401 /** Opcode 0x0f 0xa3. */
     9569/**
     9570 * @opcode      0xa3
     9571 * @oppfx       n/a
     9572 * @opflclass   bitmap
     9573 */
    94029574FNIEMOP_DEF(iemOp_bt_Ev_Gv)
    94039575{
     
    97719943
    97729944
    9773 /** Opcode 0x0f 0xab. */
     9945/**
     9946 * @opcode      0xab
     9947 * @oppfx       n/a
     9948 * @opflclass   bitmap
     9949 */
    97749950FNIEMOP_DEF(iemOp_bts_Ev_Gv)
    97759951{
     
    1023610412
    1023710413
    10238 /** Opcode 0x0f 0xaf. */
     10414/**
     10415 * @opcode      0xaf
     10416 * @opflclass   multiply
     10417 */
    1023910418FNIEMOP_DEF(iemOp_imul_Gv_Ev)
    1024010419{
     
    1024710426
    1024810427
    10249 /** Opcode 0x0f 0xb0. */
     10428/**
     10429 * @opcode      0xb0
     10430 * @opflclass   arithmetic
     10431 */
    1025010432FNIEMOP_DEF(iemOp_cmpxchg_Eb_Gb)
    1025110433{
     
    1031210494}
    1031310495
    10314 /** Opcode 0x0f 0xb1. */
     10496/**
     10497 * @opcode      0xb1
     10498 * @opflclass   arithmetic
     10499 */
    1031510500FNIEMOP_DEF(iemOp_cmpxchg_Ev_Gv)
    1031610501{
     
    1051010695
    1051110696
    10512 /** Opcode 0x0f 0xb3. */
     10697/**
     10698 * @opcode      0xb3
     10699 * @oppfx       n/a
     10700 * @opflclass   bitmap
     10701 */
    1051310702FNIEMOP_DEF(iemOp_btr_Ev_Gv)
    1051410703{
     
    1071910908
    1072010909
    10721 /** Opcode 0xf3 0x0f 0xb8 - POPCNT Gv, Ev */
     10910/**
     10911 * @opcode      0xb8
     10912 * @oppfx       0xf3
     10913 * @opflmodify  cf,pf,af,zf,sf,of
     10914 * @opflclear   cf,pf,af,sf,of
     10915 */
    1072210916FNIEMOP_DEF(iemOp_popcnt_Gv_Ev)
    1072310917{
     
    1112711321
    1112811322
    11129 /** Opcode 0x0f 0xba /4. */
     11323/**
     11324 * @opmaps      grp8
     11325 * @opcode      /4
     11326 * @oppfx       n/a
     11327 * @opflclass   bitmap
     11328 */
    1113011329FNIEMOPRM_DEF(iemOp_Grp8_bt_Ev_Ib)
    1113111330{
     
    1113511334
    1113611335
    11137 /** Opcode 0x0f 0xba /5. */
     11336/**
     11337 * @opmaps      grp8
     11338 * @opcode      /5
     11339 * @oppfx       n/a
     11340 * @opflclass   bitmap
     11341 */
    1113811342FNIEMOPRM_DEF(iemOp_Grp8_bts_Ev_Ib)
    1113911343{
     
    1114411348
    1114511349
    11146 /** Opcode 0x0f 0xba /6. */
     11350/**
     11351 * @opmaps      grp8
     11352 * @opcode      /6
     11353 * @oppfx       n/a
     11354 * @opflclass   bitmap
     11355 */
    1114711356FNIEMOPRM_DEF(iemOp_Grp8_btr_Ev_Ib)
    1114811357{
     
    1115311362
    1115411363
    11155 /** Opcode 0x0f 0xba /7. */
     11364/**
     11365 * @opmaps      grp8
     11366 * @opcode      /7
     11367 * @oppfx       n/a
     11368 * @opflclass   bitmap
     11369 */
    1115611370FNIEMOPRM_DEF(iemOp_Grp8_btc_Ev_Ib)
    1115711371{
     
    1118311397
    1118411398
    11185 /** Opcode 0x0f 0xbb. */
     11399/**
     11400 * @opcode      0xbb
     11401 * @oppfx       n/a
     11402 * @opflclass   bitmap
     11403 */
    1118611404FNIEMOP_DEF(iemOp_btc_Ev_Gv)
    1118711405{
     
    1133611554
    1133711555
    11338 /** Opcode 0x0f 0xbc. */
     11556/**
     11557 * @opcode      0xbc
     11558 * @oppfx       !0xf3
     11559 * @opfltest    cf,pf,af,sf,of
     11560 * @opflmodify  cf,pf,af,zf,sf,of
     11561 * @opflundef   cf,pf,af,sf,of
     11562 * @todo AMD doesn't modify cf,pf,af,sf&of but since intel does, we're forced to
     11563 *       document them as inputs. Sigh.
     11564 */
    1133911565FNIEMOP_DEF(iemOp_bsf_Gv_Ev)
    1134011566{
     
    1134611572
    1134711573
    11348 /** Opcode 0xf3 0x0f 0xbc - TZCNT Gv, Ev */
     11574/**
     11575 * @opcode      0xbc
     11576 * @oppfx       0xf3
     11577 * @opfltest    pf,af,sf,of
     11578 * @opflmodify  cf,pf,af,zf,sf,of
     11579 * @opflundef   pf,af,sf,of
     11580 * @todo AMD doesn't modify pf,af,sf&of but since intel does, we're forced to
     11581 *       document them as inputs. Sigh.
     11582 */
    1134911583FNIEMOP_DEF(iemOp_tzcnt_Gv_Ev)
    1135011584{
     
    1137311607
    1137411608
    11375 /** Opcode 0x0f 0xbd. */
     11609/**
     11610 * @opcode      0xbd
     11611 * @oppfx       !0xf3
     11612 * @opfltest    cf,pf,af,sf,of
     11613 * @opflmodify  cf,pf,af,zf,sf,of
     11614 * @opflundef   cf,pf,af,sf,of
     11615 * @todo AMD doesn't modify cf,pf,af,sf&of but since intel does, we're forced to
     11616 *       document them as inputs. Sigh.
     11617 */
    1137611618FNIEMOP_DEF(iemOp_bsr_Gv_Ev)
    1137711619{
     
    1138311625
    1138411626
    11385 /** Opcode 0xf3 0x0f 0xbd - LZCNT Gv, Ev */
     11627/**
     11628 * @opcode      0xbd
     11629 * @oppfx       0xf3
     11630 * @opfltest    pf,af,sf,of
     11631 * @opflmodify  cf,pf,af,zf,sf,of
     11632 * @opflundef   pf,af,sf,of
     11633 * @todo AMD doesn't modify pf,af,sf&of but since intel does, we're forced to
     11634 *       document them as inputs. Sigh.
     11635 */
    1138611636FNIEMOP_DEF(iemOp_lzcnt_Gv_Ev)
    1138711637{
     
    1242912679
    1243012680
    12431 /** Opcode 0x0f 0xc7 !11/1. */
     12681/**
     12682 * @opmaps      grp9
     12683 * @opcode      /1
     12684 * @opcodesub   !11 mr/reg rex.w=0
     12685 * @oppfx       n/a
     12686 * @opflmodify  zf
     12687 */
    1243212688FNIEMOP_DEF_1(iemOp_Grp9_cmpxchg8b_Mq, uint8_t, bRm)
    1243312689{
     
    1247412730
    1247512731
    12476 /** Opcode REX.W 0x0f 0xc7 !11/1. */
     12732/**
     12733 * @opmaps      grp9
     12734 * @opcode      /1
     12735 * @opcodesub   !11 mr/reg rex.w=1
     12736 * @oppfx       n/a
     12737 * @opflmodify  zf
     12738 */
    1247712739FNIEMOP_DEF_1(iemOp_Grp9_cmpxchg16b_Mdq, uint8_t, bRm)
    1247812740{
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r103184 r103185  
    22792279
    22802280
    2281 /** Opcode VEX.0F 0x2e - vucomiss Vss, Wss */
     2281/**
     2282 * @opcode      0x2e
     2283 * @oppfx       none
     2284 * @opflmodify  cf,pf,af,zf,sf,ov
     2285 * @opflclear   af,sf,of
     2286 */
    22822287FNIEMOP_DEF(iemOp_vucomiss_Vss_Wss)
    22832288{
     
    23502355
    23512356
    2352 /** Opcode VEX.66.0F 0x2e - vucomisd Vsd, Wsd */
     2357/**
     2358 * @opcode      0x2e
     2359 * @oppfx       0x66
     2360 * @opflmodify  cf,pf,af,zf,sf,ov
     2361 * @opflclear   af,sf,of
     2362 */
    23532363FNIEMOP_DEF(iemOp_vucomisd_Vsd_Wsd)
    23542364{
     
    24242434/*  Opcode VEX.F2.0F 0x2e - invalid */
    24252435
    2426 /** Opcode VEX.0F 0x2f - vcomiss Vss, Wss */
     2436/**
     2437 * @opcode      0x2f
     2438 * @oppfx       none
     2439 * @opflmodify  cf,pf,af,zf,sf,ov
     2440 * @opflclear   af,sf,of
     2441 */
    24272442FNIEMOP_DEF(iemOp_vcomiss_Vss_Wss)
    24282443{
     
    24952510
    24962511
    2497 /** Opcode VEX.66.0F 0x2f - vcomisd Vsd, Wsd */
     2512/**
     2513 * @opcode      0x2f
     2514 * @oppfx       0x66
     2515 * @opflmodify  cf,pf,af,zf,sf,ov
     2516 * @opflclear   af,sf,of
     2517 */
    24982518FNIEMOP_DEF(iemOp_vcomisd_Vsd_Wsd)
    24992519{
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap2.cpp.h

    r102331 r103185  
    19831983
    19841984/** Body for SARX, SHLX, SHRX; assumes VEX.L must be 0. */
    1985 #define IEMOP_BODY_Gy_Ey_By_NoEflags(a_Instr, a_fFeatureMember, a_fUndefFlags) \
    1986     IEMOP_VERIFICATION_UNDEFINED_EFLAGS(a_fUndefFlags); \
     1985#define IEMOP_BODY_Gy_Ey_By_NoEflags(a_Instr, a_fFeatureMember) \
    19871986    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); \
    19881987    if (IEM_IS_MODRM_REG_MODE(bRm)) \
     
    20662065    (void)0
    20672066
    2068 /** Opcode VEX.0F38 0xf5 (vex only). */
     2067/**
     2068 * @opcode      0xf5
     2069 * @oppfx       none
     2070 * @opflmodify  cf,pf,af,zf,sf,of
     2071 * @opflclear   of
     2072 * @opflundef   pf,af
     2073 * @note        VEX only
     2074 */
    20692075FNIEMOP_DEF(iemOp_bzhi_Gy_Ey_By)
    20702076{
     
    21842190
    21852191
    2186 /** Opcode VEX.F2.0F38 0xf6 (vex only) */
     2192/**
     2193 * @opcode      0xf6
     2194 * @oppfx       0xf2
     2195 * @opflclass   unchanged
     2196 */
    21872197FNIEMOP_DEF(iemOp_mulx_By_Gy_rDX_Ey)
    21882198{
     
    22922302{
    22932303    IEMOP_MNEMONIC3(VEX_RMV, SHLX, shlx, Gy, Ey, By, DISOPTYPE_HARMLESS, IEMOPHINT_VEX_L_ZERO);
    2294     IEMOP_BODY_Gy_Ey_By_NoEflags(shlx, fBmi2, 0);
     2304    IEMOP_BODY_Gy_Ey_By_NoEflags(shlx, fBmi2);
    22952305}
    22962306
     
    23002310{
    23012311    IEMOP_MNEMONIC3(VEX_RMV, SARX, sarx, Gy, Ey, By, DISOPTYPE_HARMLESS, IEMOPHINT_VEX_L_ZERO);
    2302     IEMOP_BODY_Gy_Ey_By_NoEflags(sarx, fBmi2, 0);
     2312    IEMOP_BODY_Gy_Ey_By_NoEflags(sarx, fBmi2);
    23032313}
    23042314
     
    23082318{
    23092319    IEMOP_MNEMONIC3(VEX_RMV, SHRX, shrx, Gy, Ey, By, DISOPTYPE_HARMLESS, IEMOPHINT_VEX_L_ZERO);
    2310     IEMOP_BODY_Gy_Ey_By_NoEflags(shrx, fBmi2, 0);
     2320    IEMOP_BODY_Gy_Ey_By_NoEflags(shrx, fBmi2);
    23112321}
    23122322
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