- Timestamp:
- Feb 4, 2024 3:42:48 PM (16 months ago)
- svn:sync-xref-src-repo-rev:
- 161450
- Location:
- trunk/src/VBox/VMM/VMMAll
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllInstOneByte.cpp.h
r102977 r103185 715 715 * @opmaps one 716 716 * @openc ModR/M 717 * @opfl modify cf,pf,af,zf,sf,of717 * @opflclass arithmetic 718 718 * @ophints harmless ignores_op_sizes 719 719 * @opstats add_Eb_Gb … … 734 734 * @opcode 0x01 735 735 * @opgroup og_gen_arith_bin 736 * @opfl modify cf,pf,af,zf,sf,of736 * @opflclass arithmetic 737 737 * @optest op1=1 op2=1 -> op1=2 efl&|=nc,pe,na,nz,pl,nv 738 738 * @optest efl|=cf op1=2 op2=2 -> op1=4 efl&|=nc,pe,na,nz,pl,nv … … 751 751 * @opcode 0x02 752 752 * @opgroup og_gen_arith_bin 753 * @opfl modify cf,pf,af,zf,sf,of753 * @opflclass arithmetic 754 754 * @opcopytests iemOp_add_Eb_Gb 755 755 */ … … 764 764 * @opcode 0x03 765 765 * @opgroup og_gen_arith_bin 766 * @opfl modify cf,pf,af,zf,sf,of766 * @opflclass arithmetic 767 767 * @opcopytests iemOp_add_Ev_Gv 768 768 */ … … 777 777 * @opcode 0x04 778 778 * @opgroup og_gen_arith_bin 779 * @opfl modify cf,pf,af,zf,sf,of779 * @opflclass arithmetic 780 780 * @opcopytests iemOp_add_Eb_Gb 781 781 */ … … 790 790 * @opcode 0x05 791 791 * @opgroup og_gen_arith_bin 792 * @opfl modify cf,pf,af,zf,sf,of792 * @opflclass arithmetic 793 793 * @optest op1=1 op2=1 -> op1=2 efl&|=nv,pl,nz,na,pe 794 794 * @optest efl|=cf op1=2 op2=2 -> op1=4 efl&|=nc,pe,na,nz,pl,nv … … 837 837 * @opcode 0x08 838 838 * @opgroup og_gen_arith_bin 839 * @opflmodify cf,pf,af,zf,sf,of 840 * @opflundef af 841 * @opflclear of,cf 839 * @opflclass logical 842 840 * @optest op1=7 op2=12 -> op1=15 efl&|=nc,po,na,nz,pl,nv 843 841 * @optest efl|=of,cf op1=0 op2=0 -> op1=0 efl&|=nc,po,na,zf,pl,nv … … 856 854 * @opcode 0x09 857 855 * @opgroup og_gen_arith_bin 858 * @opflmodify cf,pf,af,zf,sf,of 859 * @opflundef af 860 * @opflclear of,cf 856 * @opflclass logical 861 857 * @optest efl|=of,cf op1=12 op2=7 -> op1=15 efl&|=nc,po,na,nz,pl,nv 862 858 * @optest efl|=of,cf op1=0 op2=0 -> op1=0 efl&|=nc,po,na,zf,pl,nv … … 865 861 * @optest o32 / op1=0x5a5a5a5a op2=0xa5a5a5a5 -> op1=-1 efl&|=nc,po,na,nz,ng,nv 866 862 * @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. 867 864 */ 868 865 FNIEMOP_DEF(iemOp_or_Ev_Gv) … … 878 875 * @opcode 0x0a 879 876 * @opgroup og_gen_arith_bin 880 * @opflmodify cf,pf,af,zf,sf,of 881 * @opflundef af 882 * @opflclear of,cf 877 * @opflclass logical 883 878 * @opcopytests iemOp_or_Eb_Gb 884 879 */ … … 894 889 * @opcode 0x0b 895 890 * @opgroup og_gen_arith_bin 896 * @opflmodify cf,pf,af,zf,sf,of 897 * @opflundef af 898 * @opflclear of,cf 891 * @opflclass logical 899 892 * @opcopytests iemOp_or_Ev_Gv 900 893 */ … … 910 903 * @opcode 0x0c 911 904 * @opgroup og_gen_arith_bin 912 * @opflmodify cf,pf,af,zf,sf,of 913 * @opflundef af 914 * @opflclear of,cf 905 * @opflclass logical 915 906 * @opcopytests iemOp_or_Eb_Gb 916 907 */ … … 926 917 * @opcode 0x0d 927 918 * @opgroup og_gen_arith_bin 928 * @opflmodify cf,pf,af,zf,sf,of 929 * @opflundef af 930 * @opflclear of,cf 919 * @opflclass logical 931 920 * @optest efl|=of,cf op1=12 op2=7 -> op1=15 efl&|=nc,po,na,nz,pl,nv 932 921 * @optest efl|=of,cf op1=0 op2=0 -> op1=0 efl&|=nc,po,na,zf,pl,nv … … 1006 995 * @opcode 0x10 1007 996 * @opgroup og_gen_arith_bin 1008 * @opfltest cf 1009 * @opflmodify cf,pf,af,zf,sf,of 997 * @opflclass arithmetic_carry 1010 998 * @optest op1=1 op2=1 efl&~=cf -> op1=2 efl&|=nc,pe,na,nz,pl,nv 1011 999 * @optest op1=1 op2=1 efl|=cf -> op1=3 efl&|=nc,po,na,nz,pl,nv … … 1024 1012 * @opcode 0x11 1025 1013 * @opgroup og_gen_arith_bin 1026 * @opfltest cf 1027 * @opflmodify cf,pf,af,zf,sf,of 1014 * @opflclass arithmetic_carry 1028 1015 * @optest op1=1 op2=1 efl&~=cf -> op1=2 efl&|=nc,pe,na,nz,pl,nv 1029 1016 * @optest op1=1 op2=1 efl|=cf -> op1=3 efl&|=nc,po,na,nz,pl,nv … … 1043 1030 * @opcode 0x12 1044 1031 * @opgroup og_gen_arith_bin 1045 * @opfltest cf 1046 * @opflmodify cf,pf,af,zf,sf,of 1032 * @opflclass arithmetic_carry 1047 1033 * @opcopytests iemOp_adc_Eb_Gb 1048 1034 */ … … 1057 1043 * @opcode 0x13 1058 1044 * @opgroup og_gen_arith_bin 1059 * @opfltest cf 1060 * @opflmodify cf,pf,af,zf,sf,of 1045 * @opflclass arithmetic_carry 1061 1046 * @opcopytests iemOp_adc_Ev_Gv 1062 1047 */ … … 1071 1056 * @opcode 0x14 1072 1057 * @opgroup og_gen_arith_bin 1073 * @opfltest cf 1074 * @opflmodify cf,pf,af,zf,sf,of 1058 * @opflclass arithmetic_carry 1075 1059 * @opcopytests iemOp_adc_Eb_Gb 1076 1060 */ … … 1085 1069 * @opcode 0x15 1086 1070 * @opgroup og_gen_arith_bin 1087 * @opfltest cf 1088 * @opflmodify cf,pf,af,zf,sf,of 1071 * @opflclass arithmetic_carry 1089 1072 * @opcopytests iemOp_adc_Ev_Gv 1090 1073 */ … … 1109 1092 /** 1110 1093 * @opcode 0x17 1111 * @opgroup og_gen_arith_bin1112 * @opfltest cf1113 * @opflmodify cf,pf,af,zf,sf,of1114 1094 */ 1115 1095 FNIEMOP_DEF(iemOp_pop_SS) … … 1131 1111 * @opcode 0x18 1132 1112 * @opgroup og_gen_arith_bin 1133 * @opfltest cf 1134 * @opflmodify cf,pf,af,zf,sf,of 1113 * @opflclass arithmetic_carry 1135 1114 */ 1136 1115 FNIEMOP_DEF(iemOp_sbb_Eb_Gb) … … 1144 1123 * @opcode 0x19 1145 1124 * @opgroup og_gen_arith_bin 1146 * @opfltest cf 1147 * @opflmodify cf,pf,af,zf,sf,of 1125 * @opflclass arithmetic_carry 1148 1126 */ 1149 1127 FNIEMOP_DEF(iemOp_sbb_Ev_Gv) … … 1158 1136 * @opcode 0x1a 1159 1137 * @opgroup og_gen_arith_bin 1160 * @opfltest cf 1161 * @opflmodify cf,pf,af,zf,sf,of 1138 * @opflclass arithmetic_carry 1162 1139 */ 1163 1140 FNIEMOP_DEF(iemOp_sbb_Gb_Eb) … … 1171 1148 * @opcode 0x1b 1172 1149 * @opgroup og_gen_arith_bin 1173 * @opfltest cf 1174 * @opflmodify cf,pf,af,zf,sf,of 1150 * @opflclass arithmetic_carry 1175 1151 */ 1176 1152 FNIEMOP_DEF(iemOp_sbb_Gv_Ev) … … 1184 1160 * @opcode 0x1c 1185 1161 * @opgroup og_gen_arith_bin 1186 * @opfltest cf 1187 * @opflmodify cf,pf,af,zf,sf,of 1162 * @opflclass arithmetic_carry 1188 1163 */ 1189 1164 FNIEMOP_DEF(iemOp_sbb_Al_Ib) … … 1197 1172 * @opcode 0x1d 1198 1173 * @opgroup og_gen_arith_bin 1199 * @opfltest cf 1200 * @opflmodify cf,pf,af,zf,sf,of 1174 * @opflclass arithmetic_carry 1201 1175 */ 1202 1176 FNIEMOP_DEF(iemOp_sbb_eAX_Iz) … … 1241 1215 * @opcode 0x20 1242 1216 * @opgroup og_gen_arith_bin 1243 * @opflmodify cf,pf,af,zf,sf,of 1244 * @opflundef af 1245 * @opflclear of,cf 1217 * @opflclass logical 1246 1218 */ 1247 1219 FNIEMOP_DEF(iemOp_and_Eb_Gb) … … 1256 1228 * @opcode 0x21 1257 1229 * @opgroup og_gen_arith_bin 1258 * @opflmodify cf,pf,af,zf,sf,of 1259 * @opflundef af 1260 * @opflclear of,cf 1230 * @opflclass logical 1261 1231 */ 1262 1232 FNIEMOP_DEF(iemOp_and_Ev_Gv) … … 1272 1242 * @opcode 0x22 1273 1243 * @opgroup og_gen_arith_bin 1274 * @opflmodify cf,pf,af,zf,sf,of 1275 * @opflundef af 1276 * @opflclear of,cf 1244 * @opflclass logical 1277 1245 */ 1278 1246 FNIEMOP_DEF(iemOp_and_Gb_Eb) … … 1287 1255 * @opcode 0x23 1288 1256 * @opgroup og_gen_arith_bin 1289 * @opflmodify cf,pf,af,zf,sf,of 1290 * @opflundef af 1291 * @opflclear of,cf 1257 * @opflclass logical 1292 1258 */ 1293 1259 FNIEMOP_DEF(iemOp_and_Gv_Ev) … … 1302 1268 * @opcode 0x24 1303 1269 * @opgroup og_gen_arith_bin 1304 * @opflmodify cf,pf,af,zf,sf,of 1305 * @opflundef af 1306 * @opflclear of,cf 1270 * @opflclass logical 1307 1271 */ 1308 1272 FNIEMOP_DEF(iemOp_and_Al_Ib) … … 1317 1281 * @opcode 0x25 1318 1282 * @opgroup og_gen_arith_bin 1319 * @opflmodify cf,pf,af,zf,sf,of 1320 * @opflundef af 1321 * @opflclear of,cf 1283 * @opflclass logical 1322 1284 */ 1323 1285 FNIEMOP_DEF(iemOp_and_eAX_Iz) … … 1368 1330 * @opcode 0x28 1369 1331 * @opgroup og_gen_arith_bin 1370 * @opfl modify cf,pf,af,zf,sf,of1332 * @opflclass arithmetic 1371 1333 */ 1372 1334 FNIEMOP_DEF(iemOp_sub_Eb_Gb) … … 1380 1342 * @opcode 0x29 1381 1343 * @opgroup og_gen_arith_bin 1382 * @opfl modify cf,pf,af,zf,sf,of1344 * @opflclass arithmetic 1383 1345 */ 1384 1346 FNIEMOP_DEF(iemOp_sub_Ev_Gv) … … 1393 1355 * @opcode 0x2a 1394 1356 * @opgroup og_gen_arith_bin 1395 * @opfl modify cf,pf,af,zf,sf,of1357 * @opflclass arithmetic 1396 1358 */ 1397 1359 FNIEMOP_DEF(iemOp_sub_Gb_Eb) … … 1405 1367 * @opcode 0x2b 1406 1368 * @opgroup og_gen_arith_bin 1407 * @opfl modify cf,pf,af,zf,sf,of1369 * @opflclass arithmetic 1408 1370 */ 1409 1371 FNIEMOP_DEF(iemOp_sub_Gv_Ev) … … 1417 1379 * @opcode 0x2c 1418 1380 * @opgroup og_gen_arith_bin 1419 * @opfl modify cf,pf,af,zf,sf,of1381 * @opflclass arithmetic 1420 1382 */ 1421 1383 FNIEMOP_DEF(iemOp_sub_Al_Ib) … … 1429 1391 * @opcode 0x2d 1430 1392 * @opgroup og_gen_arith_bin 1431 * @opfl modify cf,pf,af,zf,sf,of1393 * @opflclass arithmetic 1432 1394 */ 1433 1395 FNIEMOP_DEF(iemOp_sub_eAX_Iz) … … 1477 1439 * @opcode 0x30 1478 1440 * @opgroup og_gen_arith_bin 1479 * @opflmodify cf,pf,af,zf,sf,of 1480 * @opflundef af 1481 * @opflclear of,cf 1441 * @opflclass logical 1482 1442 */ 1483 1443 FNIEMOP_DEF(iemOp_xor_Eb_Gb) … … 1492 1452 * @opcode 0x31 1493 1453 * @opgroup og_gen_arith_bin 1494 * @opflmodify cf,pf,af,zf,sf,of 1495 * @opflundef af 1496 * @opflclear of,cf 1454 * @opflclass logical 1497 1455 */ 1498 1456 FNIEMOP_DEF(iemOp_xor_Ev_Gv) … … 1508 1466 * @opcode 0x32 1509 1467 * @opgroup og_gen_arith_bin 1510 * @opflmodify cf,pf,af,zf,sf,of 1511 * @opflundef af 1512 * @opflclear of,cf 1468 * @opflclass logical 1513 1469 */ 1514 1470 FNIEMOP_DEF(iemOp_xor_Gb_Eb) … … 1523 1479 * @opcode 0x33 1524 1480 * @opgroup og_gen_arith_bin 1525 * @opflmodify cf,pf,af,zf,sf,of 1526 * @opflundef af 1527 * @opflclear of,cf 1481 * @opflclass logical 1528 1482 */ 1529 1483 FNIEMOP_DEF(iemOp_xor_Gv_Ev) … … 1538 1492 * @opcode 0x34 1539 1493 * @opgroup og_gen_arith_bin 1540 * @opflmodify cf,pf,af,zf,sf,of 1541 * @opflundef af 1542 * @opflclear of,cf 1494 * @opflclass logical 1543 1495 */ 1544 1496 FNIEMOP_DEF(iemOp_xor_Al_Ib) … … 1553 1505 * @opcode 0x35 1554 1506 * @opgroup og_gen_arith_bin 1555 * @opflmodify cf,pf,af,zf,sf,of 1556 * @opflundef af 1557 * @opflclear of,cf 1507 * @opflclass logical 1558 1508 */ 1559 1509 FNIEMOP_DEF(iemOp_xor_eAX_Iz) … … 1587 1537 /** 1588 1538 * @opcode 0x37 1589 * @opfltest af ,cf1539 * @opfltest af 1590 1540 * @opflmodify cf,pf,af,zf,sf,of 1591 1541 * @opflundef pf,zf,sf,of … … 1636 1586 /** 1637 1587 * @opcode 0x38 1588 * @opflclass arithmetic 1638 1589 */ 1639 1590 FNIEMOP_DEF(iemOp_cmp_Eb_Gb) … … 1646 1597 /** 1647 1598 * @opcode 0x39 1599 * @opflclass arithmetic 1648 1600 */ 1649 1601 FNIEMOP_DEF(iemOp_cmp_Ev_Gv) … … 1656 1608 /** 1657 1609 * @opcode 0x3a 1610 * @opflclass arithmetic 1658 1611 */ 1659 1612 FNIEMOP_DEF(iemOp_cmp_Gb_Eb) … … 1666 1619 /** 1667 1620 * @opcode 0x3b 1621 * @opflclass arithmetic 1668 1622 */ 1669 1623 FNIEMOP_DEF(iemOp_cmp_Gv_Ev) … … 1676 1630 /** 1677 1631 * @opcode 0x3c 1632 * @opflclass arithmetic 1678 1633 */ 1679 1634 FNIEMOP_DEF(iemOp_cmp_Al_Ib) … … 1686 1641 /** 1687 1642 * @opcode 0x3d 1643 * @opflclass arithmetic 1688 1644 */ 1689 1645 FNIEMOP_DEF(iemOp_cmp_eAX_Iz) … … 1710 1666 /** 1711 1667 * @opcode 0x3f 1712 * @opfltest af ,cf1668 * @opfltest af 1713 1669 * @opflmodify cf,pf,af,zf,sf,of 1714 1670 * @opflundef pf,zf,sf,of … … 1799 1755 /** 1800 1756 * @opcode 0x40 1757 * @opflclass incdec 1801 1758 */ 1802 1759 FNIEMOP_DEF(iemOp_inc_eAX) … … 1821 1778 /** 1822 1779 * @opcode 0x41 1780 * @opflclass incdec 1823 1781 */ 1824 1782 FNIEMOP_DEF(iemOp_inc_eCX) … … 1844 1802 /** 1845 1803 * @opcode 0x42 1804 * @opflclass incdec 1846 1805 */ 1847 1806 FNIEMOP_DEF(iemOp_inc_eDX) … … 1868 1827 /** 1869 1828 * @opcode 0x43 1829 * @opflclass incdec 1870 1830 */ 1871 1831 FNIEMOP_DEF(iemOp_inc_eBX) … … 1892 1852 /** 1893 1853 * @opcode 0x44 1854 * @opflclass incdec 1894 1855 */ 1895 1856 FNIEMOP_DEF(iemOp_inc_eSP) … … 1915 1876 /** 1916 1877 * @opcode 0x45 1878 * @opflclass incdec 1917 1879 */ 1918 1880 FNIEMOP_DEF(iemOp_inc_eBP) … … 1939 1901 /** 1940 1902 * @opcode 0x46 1903 * @opflclass incdec 1941 1904 */ 1942 1905 FNIEMOP_DEF(iemOp_inc_eSI) … … 1963 1926 /** 1964 1927 * @opcode 0x47 1928 * @opflclass incdec 1965 1929 */ 1966 1930 FNIEMOP_DEF(iemOp_inc_eDI) … … 1988 1952 /** 1989 1953 * @opcode 0x48 1954 * @opflclass incdec 1990 1955 */ 1991 1956 FNIEMOP_DEF(iemOp_dec_eAX) … … 2011 1976 /** 2012 1977 * @opcode 0x49 1978 * @opflclass incdec 2013 1979 */ 2014 1980 FNIEMOP_DEF(iemOp_dec_eCX) … … 2035 2001 /** 2036 2002 * @opcode 0x4a 2003 * @opflclass incdec 2037 2004 */ 2038 2005 FNIEMOP_DEF(iemOp_dec_eDX) … … 2059 2026 /** 2060 2027 * @opcode 0x4b 2028 * @opflclass incdec 2061 2029 */ 2062 2030 FNIEMOP_DEF(iemOp_dec_eBX) … … 2084 2052 /** 2085 2053 * @opcode 0x4c 2054 * @opflclass incdec 2086 2055 */ 2087 2056 FNIEMOP_DEF(iemOp_dec_eSP) … … 2108 2077 /** 2109 2078 * @opcode 0x4d 2079 * @opflclass incdec 2110 2080 */ 2111 2081 FNIEMOP_DEF(iemOp_dec_eBP) … … 2133 2103 /** 2134 2104 * @opcode 0x4e 2105 * @opflclass incdec 2135 2106 */ 2136 2107 FNIEMOP_DEF(iemOp_dec_eSI) … … 2158 2129 /** 2159 2130 * @opcode 0x4f 2131 * @opflclass incdec 2160 2132 */ 2161 2133 FNIEMOP_DEF(iemOp_dec_eDI) … … 2640 2612 2641 2613 2642 /** Opcode 0x63 - non-64-bit modes. */ 2614 /** 2615 * @opcode 0x63 2616 * @opflmodify zf 2617 * @note non-64-bit modes. 2618 */ 2643 2619 FNIEMOP_DEF(iemOp_arpl_Ew_Gw) 2644 2620 { … … 2877 2853 /** 2878 2854 * @opcode 0x69 2855 * @opflclass multiply 2879 2856 */ 2880 2857 FNIEMOP_DEF(iemOp_imul_Gv_Ev_Iz) … … 3078 3055 /** 3079 3056 * @opcode 0x6b 3057 * @opflclass multiply 3080 3058 */ 3081 3059 FNIEMOP_DEF(iemOp_imul_Gv_Ev_Ib) … … 3241 3219 /** 3242 3220 * @opcode 0x6c 3221 * @opfltest iopl,df 3243 3222 */ 3244 3223 FNIEMOP_DEF(iemOp_insb_Yb_DX) … … 3294 3273 /** 3295 3274 * @opcode 0x6d 3275 * @opfltest iopl,df 3296 3276 */ 3297 3277 FNIEMOP_DEF(iemOp_inswd_Yv_DX) … … 3400 3380 /** 3401 3381 * @opcode 0x6e 3382 * @opfltest iopl,df 3402 3383 */ 3403 3384 FNIEMOP_DEF(iemOp_outsb_Yb_DX) … … 3453 3434 /** 3454 3435 * @opcode 0x6f 3436 * @opfltest iopl,df 3455 3437 */ 3456 3438 FNIEMOP_DEF(iemOp_outswd_Yv_DX) … … 3559 3541 /** 3560 3542 * @opcode 0x70 3543 * @opfltest of 3561 3544 */ 3562 3545 FNIEMOP_DEF(iemOp_jo_Jb) … … 3579 3562 /** 3580 3563 * @opcode 0x71 3564 * @opfltest of 3581 3565 */ 3582 3566 FNIEMOP_DEF(iemOp_jno_Jb) … … 3598 3582 /** 3599 3583 * @opcode 0x72 3584 * @opfltest cf 3600 3585 */ 3601 3586 FNIEMOP_DEF(iemOp_jc_Jb) … … 3618 3603 /** 3619 3604 * @opcode 0x73 3605 * @opfltest cf 3620 3606 */ 3621 3607 FNIEMOP_DEF(iemOp_jnc_Jb) … … 3638 3624 /** 3639 3625 * @opcode 0x74 3626 * @opfltest zf 3640 3627 */ 3641 3628 FNIEMOP_DEF(iemOp_je_Jb) … … 3658 3645 /** 3659 3646 * @opcode 0x75 3647 * @opfltest zf 3660 3648 */ 3661 3649 FNIEMOP_DEF(iemOp_jne_Jb) … … 3678 3666 /** 3679 3667 * @opcode 0x76 3668 * @opfltest cf,zf 3680 3669 */ 3681 3670 FNIEMOP_DEF(iemOp_jbe_Jb) … … 3698 3687 /** 3699 3688 * @opcode 0x77 3689 * @opfltest cf,zf 3700 3690 */ 3701 3691 FNIEMOP_DEF(iemOp_jnbe_Jb) … … 3718 3708 /** 3719 3709 * @opcode 0x78 3710 * @opfltest sf 3720 3711 */ 3721 3712 FNIEMOP_DEF(iemOp_js_Jb) … … 3738 3729 /** 3739 3730 * @opcode 0x79 3731 * @opfltest sf 3740 3732 */ 3741 3733 FNIEMOP_DEF(iemOp_jns_Jb) … … 3758 3750 /** 3759 3751 * @opcode 0x7a 3752 * @opfltest pf 3760 3753 */ 3761 3754 FNIEMOP_DEF(iemOp_jp_Jb) … … 3778 3771 /** 3779 3772 * @opcode 0x7b 3773 * @opfltest pf 3780 3774 */ 3781 3775 FNIEMOP_DEF(iemOp_jnp_Jb) … … 3798 3792 /** 3799 3793 * @opcode 0x7c 3794 * @opfltest sf,of 3800 3795 */ 3801 3796 FNIEMOP_DEF(iemOp_jl_Jb) … … 3818 3813 /** 3819 3814 * @opcode 0x7d 3815 * @opfltest sf,of 3820 3816 */ 3821 3817 FNIEMOP_DEF(iemOp_jnl_Jb) … … 3838 3834 /** 3839 3835 * @opcode 0x7e 3836 * @opfltest zf,sf,of 3840 3837 */ 3841 3838 FNIEMOP_DEF(iemOp_jle_Jb) … … 3858 3855 /** 3859 3856 * @opcode 0x7f 3857 * @opfltest zf,sf,of 3860 3858 */ 3861 3859 FNIEMOP_DEF(iemOp_jnle_Jb) … … 4010 4008 * @opmaps grp1_80,grp1_83 4011 4009 * @opcode /0 4010 * @opflclass arithmetic 4012 4011 */ 4013 4012 FNIEMOP_DEF_1(iemOp_Grp1_add_Eb_Ib, uint8_t, bRm) … … 4022 4021 * @opmaps grp1_80,grp1_83 4023 4022 * @opcode /1 4023 * @opflclass logical 4024 4024 */ 4025 4025 FNIEMOP_DEF_1(iemOp_Grp1_or_Eb_Ib, uint8_t, bRm) … … 4034 4034 * @opmaps grp1_80,grp1_83 4035 4035 * @opcode /2 4036 * @opflclass arithmetic_carry 4036 4037 */ 4037 4038 FNIEMOP_DEF_1(iemOp_Grp1_adc_Eb_Ib, uint8_t, bRm) … … 4046 4047 * @opmaps grp1_80,grp1_83 4047 4048 * @opcode /3 4049 * @opflclass arithmetic_carry 4048 4050 */ 4049 4051 FNIEMOP_DEF_1(iemOp_Grp1_sbb_Eb_Ib, uint8_t, bRm) … … 4058 4060 * @opmaps grp1_80,grp1_83 4059 4061 * @opcode /4 4062 * @opflclass logical 4060 4063 */ 4061 4064 FNIEMOP_DEF_1(iemOp_Grp1_and_Eb_Ib, uint8_t, bRm) … … 4070 4073 * @opmaps grp1_80,grp1_83 4071 4074 * @opcode /5 4075 * @opflclass arithmetic 4072 4076 */ 4073 4077 FNIEMOP_DEF_1(iemOp_Grp1_sub_Eb_Ib, uint8_t, bRm) … … 4082 4086 * @opmaps grp1_80,grp1_83 4083 4087 * @opcode /6 4088 * @opflclass logical 4084 4089 */ 4085 4090 FNIEMOP_DEF_1(iemOp_Grp1_xor_Eb_Ib, uint8_t, bRm) … … 4094 4099 * @opmaps grp1_80,grp1_83 4095 4100 * @opcode /7 4101 * @opflclass arithmetic 4096 4102 */ 4097 4103 FNIEMOP_DEF_1(iemOp_Grp1_cmp_Eb_Ib, uint8_t, bRm) … … 4526 4532 * @opmaps grp1_81 4527 4533 * @opcode /0 4534 * @opflclass arithmetic 4528 4535 */ 4529 4536 FNIEMOP_DEF_1(iemOp_Grp1_add_Ev_Iz, uint8_t, bRm) … … 4538 4545 * @opmaps grp1_81 4539 4546 * @opcode /1 4547 * @opflclass logical 4540 4548 */ 4541 4549 FNIEMOP_DEF_1(iemOp_Grp1_or_Ev_Iz, uint8_t, bRm) … … 4550 4558 * @opmaps grp1_81 4551 4559 * @opcode /2 4560 * @opflclass arithmetic_carry 4552 4561 */ 4553 4562 FNIEMOP_DEF_1(iemOp_Grp1_adc_Ev_Iz, uint8_t, bRm) … … 4562 4571 * @opmaps grp1_81 4563 4572 * @opcode /3 4573 * @opflclass arithmetic_carry 4564 4574 */ 4565 4575 FNIEMOP_DEF_1(iemOp_Grp1_sbb_Ev_Iz, uint8_t, bRm) … … 4574 4584 * @opmaps grp1_81 4575 4585 * @opcode /4 4586 * @opflclass logical 4576 4587 */ 4577 4588 FNIEMOP_DEF_1(iemOp_Grp1_and_Ev_Iz, uint8_t, bRm) … … 4586 4597 * @opmaps grp1_81 4587 4598 * @opcode /5 4599 * @opflclass arithmetic 4588 4600 */ 4589 4601 FNIEMOP_DEF_1(iemOp_Grp1_sub_Ev_Iz, uint8_t, bRm) … … 4598 4610 * @opmaps grp1_81 4599 4611 * @opcode /6 4612 * @opflclass logical 4600 4613 */ 4601 4614 FNIEMOP_DEF_1(iemOp_Grp1_xor_Ev_Iz, uint8_t, bRm) … … 4610 4623 * @opmaps grp1_81 4611 4624 * @opcode /7 4625 * @opflclass arithmetic 4612 4626 */ 4613 4627 FNIEMOP_DEF_1(iemOp_Grp1_cmp_Ev_Iz, uint8_t, bRm) … … 5026 5040 * @opmaps grp1_83 5027 5041 * @opcode /0 5042 * @opflclass arithmetic 5028 5043 */ 5029 5044 FNIEMOP_DEF_1(iemOp_Grp1_add_Ev_Ib, uint8_t, bRm) … … 5038 5053 * @opmaps grp1_83 5039 5054 * @opcode /1 5055 * @opflclass logical 5040 5056 */ 5041 5057 FNIEMOP_DEF_1(iemOp_Grp1_or_Ev_Ib, uint8_t, bRm) … … 5050 5066 * @opmaps grp1_83 5051 5067 * @opcode /2 5068 * @opflclass arithmetic_carry 5052 5069 */ 5053 5070 FNIEMOP_DEF_1(iemOp_Grp1_adc_Ev_Ib, uint8_t, bRm) … … 5062 5079 * @opmaps grp1_83 5063 5080 * @opcode /3 5081 * @opflclass arithmetic_carry 5064 5082 */ 5065 5083 FNIEMOP_DEF_1(iemOp_Grp1_sbb_Ev_Ib, uint8_t, bRm) … … 5074 5092 * @opmaps grp1_83 5075 5093 * @opcode /4 5094 * @opflclass logical 5076 5095 */ 5077 5096 FNIEMOP_DEF_1(iemOp_Grp1_and_Ev_Ib, uint8_t, bRm) … … 5086 5105 * @opmaps grp1_83 5087 5106 * @opcode /5 5107 * @opflclass arithmetic 5088 5108 */ 5089 5109 FNIEMOP_DEF_1(iemOp_Grp1_sub_Ev_Ib, uint8_t, bRm) … … 5098 5118 * @opmaps grp1_83 5099 5119 * @opcode /6 5120 * @opflclass logical 5100 5121 */ 5101 5122 FNIEMOP_DEF_1(iemOp_Grp1_xor_Ev_Ib, uint8_t, bRm) … … 5110 5131 * @opmaps grp1_83 5111 5132 * @opcode /7 5133 * @opflclass arithmetic 5112 5134 */ 5113 5135 FNIEMOP_DEF_1(iemOp_Grp1_cmp_Ev_Ib, uint8_t, bRm) … … 5144 5166 /** 5145 5167 * @opcode 0x84 5168 * @opflclass logical 5146 5169 */ 5147 5170 FNIEMOP_DEF(iemOp_test_Eb_Gb) … … 5155 5178 /** 5156 5179 * @opcode 0x85 5180 * @opflclass logical 5157 5181 */ 5158 5182 FNIEMOP_DEF(iemOp_test_Ev_Gv) … … 6693 6717 /** 6694 6718 * @opcode 0xa4 6719 * @opfltest df 6695 6720 */ 6696 6721 FNIEMOP_DEF(iemOp_movsb_Xb_Yb) … … 6743 6768 /** 6744 6769 * @opcode 0xa5 6770 * @opfltest df 6745 6771 */ 6746 6772 FNIEMOP_DEF(iemOp_movswd_Xv_Yv) … … 6899 6925 /** 6900 6926 * @opcode 0xa6 6927 * @opflclass arithmetic 6928 * @opfltest df 6901 6929 */ 6902 6930 FNIEMOP_DEF(iemOp_cmpsb_Xb_Yb) … … 6977 7005 /** 6978 7006 * @opcode 0xa7 7007 * @opflclass arithmetic 7008 * @opfltest df 6979 7009 */ 6980 7010 FNIEMOP_DEF(iemOp_cmpswd_Xv_Yv) … … 7177 7207 /** 7178 7208 * @opcode 0xa8 7209 * @opflclass logical 7179 7210 */ 7180 7211 FNIEMOP_DEF(iemOp_test_AL_Ib) … … 7188 7219 /** 7189 7220 * @opcode 0xa9 7221 * @opflclass logical 7190 7222 */ 7191 7223 FNIEMOP_DEF(iemOp_test_eAX_Iz) … … 7397 7429 /** 7398 7430 * @opcode 0xac 7431 * @opfltest df 7399 7432 */ 7400 7433 FNIEMOP_DEF(iemOp_lodsb_AL_Xb) … … 7447 7480 /** 7448 7481 * @opcode 0xad 7482 * @opfltest df 7449 7483 */ 7450 7484 FNIEMOP_DEF(iemOp_lodswd_eAX_Xv) … … 7595 7629 /** 7596 7630 * @opcode 0xae 7631 * @opflclass arithmetic 7632 * @opfltest df 7597 7633 */ 7598 7634 FNIEMOP_DEF(iemOp_scasb_AL_Xb) … … 7666 7702 /** 7667 7703 * @opcode 0xaf 7704 * @opflclass arithmetic 7705 * @opfltest df 7668 7706 */ 7669 7707 FNIEMOP_DEF(iemOp_scaswd_eAX_Xv) … … 9143 9181 /** 9144 9182 * @opcode 0xd4 9183 * @opflmodify cf,pf,af,zf,sf,of 9184 * @opflundef cf,af,of 9145 9185 */ 9146 9186 FNIEMOP_DEF(iemOp_aam_Ib) 9147 9187 { 9188 /** @todo testcase: aam */ 9148 9189 IEMOP_MNEMONIC(aam_Ib, "aam Ib"); 9149 9190 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); … … 9158 9199 /** 9159 9200 * @opcode 0xd5 9201 * @opflmodify cf,pf,af,zf,sf,of 9202 * @opflundef cf,af,of 9160 9203 */ 9161 9204 FNIEMOP_DEF(iemOp_aad_Ib) 9162 9205 { 9206 /** @todo testcase: aad? */ 9163 9207 IEMOP_MNEMONIC(aad_Ib, "aad Ib"); 9164 9208 uint8_t bImm; IEM_OPCODE_GET_NEXT_U8(&bImm); … … 12413 12457 /** 12414 12458 * @opcode 0xe0 12459 * @opfltest zf 12415 12460 */ 12416 12461 FNIEMOP_DEF(iemOp_loopne_Jb) … … 12468 12513 /** 12469 12514 * @opcode 0xe1 12515 * @opfltest zf 12470 12516 */ 12471 12517 FNIEMOP_DEF(iemOp_loope_Jb) … … 12665 12711 12666 12712 12667 /** Opcode 0xe4 */ 12713 /** 12714 * @opcode 0xe4 12715 * @opfltest iopl 12716 */ 12668 12717 FNIEMOP_DEF(iemOp_in_AL_Ib) 12669 12718 { … … 12676 12725 12677 12726 12678 /** Opcode 0xe5 */ 12727 /** 12728 * @opcode 0xe5 12729 * @opfltest iopl 12730 */ 12679 12731 FNIEMOP_DEF(iemOp_in_eAX_Ib) 12680 12732 { … … 12688 12740 12689 12741 12690 /** Opcode 0xe6 */ 12742 /** 12743 * @opcode 0xe6 12744 * @opfltest iopl 12745 */ 12691 12746 FNIEMOP_DEF(iemOp_out_Ib_AL) 12692 12747 { … … 12699 12754 12700 12755 12701 /** Opcode 0xe7 */ 12756 /** 12757 * @opcode 0xe7 12758 * @opfltest iopl 12759 */ 12702 12760 FNIEMOP_DEF(iemOp_out_Ib_eAX) 12703 12761 { … … 12816 12874 12817 12875 12818 /** Opcode 0xec */ 12876 /** 12877 * @opcode 0xec 12878 * @opfltest iopl 12879 */ 12819 12880 FNIEMOP_DEF(iemOp_in_AL_DX) 12820 12881 { … … 12827 12888 12828 12889 12829 /** Opcode 0xed */ 12890 /** 12891 * @opcode 0xed 12892 * @opfltest iopl 12893 */ 12830 12894 FNIEMOP_DEF(iemOp_in_eAX_DX) 12831 12895 { … … 12839 12903 12840 12904 12841 /** Opcode 0xee */ 12905 /** 12906 * @opcode 0xee 12907 * @opfltest iopl 12908 */ 12842 12909 FNIEMOP_DEF(iemOp_out_DX_AL) 12843 12910 { … … 12849 12916 12850 12917 12851 /** Opcode 0xef */ 12918 /** 12919 * @opcode 0xef 12920 * @opfltest iopl 12921 */ 12852 12922 FNIEMOP_DEF(iemOp_out_DX_eAX) 12853 12923 { … … 12941 13011 /** 12942 13012 * @opcode 0xf5 13013 * @opflmodify cf 12943 13014 */ 12944 13015 FNIEMOP_DEF(iemOp_cmc) … … 13209 13280 * @opmaps grp3_f6 13210 13281 * @opcode /0 13282 * @opflclass logical 13211 13283 * @todo also /1 13212 13284 */ … … 13483 13555 13484 13556 /** 13485 * @opmaps grp3_f6 13486 * @opcode /2 13557 * @opmaps grp3_f6 13558 * @opcode /2 13559 * @opflclass unchanged 13487 13560 */ 13488 13561 FNIEMOP_DEF_1(iemOp_grp3_not_Eb, uint8_t, bRm) 13489 13562 { 13563 /** @todo does not modify EFLAGS. */ 13490 13564 IEMOP_MNEMONIC(not_Eb, "not Eb"); 13491 13565 IEMOP_BODY_UNARY_Eb(bRm, iemAImpl_not_u8, iemAImpl_not_u8_locked); … … 13494 13568 13495 13569 /** 13496 * @opmaps grp3_f6 13497 * @opcode /3 13570 * @opmaps grp3_f6 13571 * @opcode /3 13572 * @opflclass arithmetic 13498 13573 */ 13499 13574 FNIEMOP_DEF_1(iemOp_grp3_neg_Eb, uint8_t, bRm) … … 13517 13592 case 3: return FNIEMOP_CALL_1(iemOp_grp3_neg_Eb, bRm); 13518 13593 case 4: 13594 /** 13595 * @opdone 13596 * @opmaps grp3_f6 13597 * @opcode /4 13598 * @opflclass multiply 13599 */ 13519 13600 IEMOP_MNEMONIC(mul_Eb, "mul Eb"); 13520 13601 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 13521 13602 return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEb, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_mul_u8_eflags)); 13522 13603 case 5: 13604 /** 13605 * @opdone 13606 * @opmaps grp3_f6 13607 * @opcode /5 13608 * @opflclass multiply 13609 */ 13523 13610 IEMOP_MNEMONIC(imul_Eb, "imul Eb"); 13524 13611 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 13525 13612 return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEb, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_u8_eflags)); 13526 13613 case 6: 13614 /** 13615 * @opdone 13616 * @opmaps grp3_f6 13617 * @opcode /6 13618 * @opflclass division 13619 */ 13527 13620 IEMOP_MNEMONIC(div_Eb, "div Eb"); 13528 13621 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); 13529 13622 return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEb, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_div_u8_eflags)); 13530 13623 case 7: 13624 /** 13625 * @opdone 13626 * @opmaps grp3_f6 13627 * @opcode /7 13628 * @opflclass division 13629 */ 13531 13630 IEMOP_MNEMONIC(idiv_Eb, "idiv Eb"); 13532 13631 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); … … 13537 13636 13538 13637 13539 /** Opcode 0xf7 /0. */ 13638 /** 13639 * @opmaps grp3_f7 13640 * @opcode /0 13641 * @opflclass logical 13642 */ 13540 13643 FNIEMOP_DEF_1(iemOp_grp3_test_Ev, uint8_t, bRm) 13541 13644 { … … 13674 13777 13675 13778 13676 /** Opcode 0xf7 /2. */ 13779 /** 13780 * @opmaps grp3_f7 13781 * @opcode /2 13782 * @opflclass unchanged 13783 */ 13677 13784 FNIEMOP_DEF_1(iemOp_grp3_not_Ev, uint8_t, bRm) 13678 13785 { 13786 /** @todo does not modify EFLAGS */ 13679 13787 IEMOP_MNEMONIC(not_Ev, "not Ev"); 13680 13788 IEMOP_BODY_UNARY_Ev( iemAImpl_not_u16, iemAImpl_not_u32, iemAImpl_not_u64); … … 13683 13791 13684 13792 13685 /** Opcode 0xf7 /3. */ 13793 /** 13794 * @opmaps grp3_f7 13795 * @opcode /3 13796 * @opflclass arithmetic 13797 */ 13686 13798 FNIEMOP_DEF_1(iemOp_grp3_neg_Ev, uint8_t, bRm) 13687 13799 { … … 13705 13817 case 3: return FNIEMOP_CALL_1(iemOp_grp3_neg_Ev, bRm); 13706 13818 case 4: 13819 /** 13820 * @opdone 13821 * @opmaps grp3_f7 13822 * @opcode /4 13823 * @opflclass multiply 13824 */ 13707 13825 IEMOP_MNEMONIC(mul_Ev, "mul Ev"); 13708 13826 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 13709 13827 return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEv, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_mul_eflags)); 13710 13828 case 5: 13829 /** 13830 * @opdone 13831 * @opmaps grp3_f7 13832 * @opcode /5 13833 * @opflclass multiply 13834 */ 13711 13835 IEMOP_MNEMONIC(imul_Ev, "imul Ev"); 13712 13836 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF); 13713 13837 return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEv, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_imul_eflags)); 13714 13838 case 6: 13839 /** 13840 * @opdone 13841 * @opmaps grp3_f7 13842 * @opcode /6 13843 * @opflclass division 13844 */ 13715 13845 IEMOP_MNEMONIC(div_Ev, "div Ev"); 13716 13846 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); 13717 13847 return FNIEMOP_CALL_2(iemOpCommonGrp3MulDivEv, bRm, IEMTARGETCPU_EFL_BEHAVIOR_SELECT(g_iemAImpl_div_eflags)); 13718 13848 case 7: 13849 /** 13850 * @opdone 13851 * @opmaps grp3_f7 13852 * @opcode /7 13853 * @opflclass division 13854 */ 13719 13855 IEMOP_MNEMONIC(idiv_Ev, "idiv Ev"); 13720 13856 IEMOP_VERIFICATION_UNDEFINED_EFLAGS(X86_EFL_SF | X86_EFL_ZF | X86_EFL_AF | X86_EFL_PF | X86_EFL_OF | X86_EFL_CF); … … 13727 13863 /** 13728 13864 * @opcode 0xf8 13865 * @opflmodify cf 13866 * @opflclear cf 13729 13867 */ 13730 13868 FNIEMOP_DEF(iemOp_clc) … … 13741 13879 /** 13742 13880 * @opcode 0xf9 13881 * @opflmodify cf 13882 * @opflset cf 13743 13883 */ 13744 13884 FNIEMOP_DEF(iemOp_stc) … … 13755 13895 /** 13756 13896 * @opcode 0xfa 13897 * @opfltest iopl,vm 13898 * @opflmodify if,vif 13757 13899 */ 13758 13900 FNIEMOP_DEF(iemOp_cli) … … 13764 13906 13765 13907 13908 /** 13909 * @opcode 0xfb 13910 * @opfltest iopl,vm 13911 * @opflmodify if,vif 13912 */ 13766 13913 FNIEMOP_DEF(iemOp_sti) 13767 13914 { … … 13775 13922 /** 13776 13923 * @opcode 0xfc 13924 * @opflmodify df 13925 * @opflclear df 13777 13926 */ 13778 13927 FNIEMOP_DEF(iemOp_cld) … … 13789 13938 /** 13790 13939 * @opcode 0xfd 13940 * @opflmodify df 13941 * @opflset df 13791 13942 */ 13792 13943 FNIEMOP_DEF(iemOp_std) … … 13802 13953 13803 13954 /** 13804 * @opmaps grp4 13805 * @opcode /0 13955 * @opmaps grp4 13956 * @opcode /0 13957 * @opflclass incdec 13806 13958 */ 13807 13959 FNIEMOP_DEF_1(iemOp_Grp4_inc_Eb, uint8_t, bRm) … … 13813 13965 13814 13966 /** 13815 * @opmaps grp4 13816 * @opcode /1 13967 * @opmaps grp4 13968 * @opcode /1 13969 * @opflclass incdec 13817 13970 */ 13818 13971 FNIEMOP_DEF_1(iemOp_Grp4_dec_Eb, uint8_t, bRm) … … 13840 13993 } 13841 13994 13842 /** Opcode 0xff /0. */ 13995 /** 13996 * @opmaps grp5 13997 * @opcode /0 13998 * @opflclass incdec 13999 */ 13843 14000 FNIEMOP_DEF_1(iemOp_Grp5_inc_Ev, uint8_t, bRm) 13844 14001 { … … 13849 14006 13850 14007 13851 /** Opcode 0xff /1. */ 14008 /** 14009 * @opmaps grp5 14010 * @opcode /1 14011 * @opflclass incdec 14012 */ 13852 14013 FNIEMOP_DEF_1(iemOp_Grp5_dec_Ev, uint8_t, bRm) 13853 14014 { -
trunk/src/VBox/VMM/VMMAll/IEMAllInstPython.py
r103182 r103185 421 421 ## \@oppfx values. 422 422 g_kdPrefixes = { 423 'none': [], 424 '0x66': [], 425 '0xf3': [], 426 '0xf2': [], 423 'none': [], 424 '0x66': [], 425 '0xf3': [], 426 '0xf2': [], 427 '!0xf3': [], # special case for bsf/tzcnt 427 428 }; 428 429 … … 456 457 '!11 mr/reg vex.l=0': [ '!11 mr/reg vex.l=0', 'L0', ], 457 458 '!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', '', ], 458 461 }; 459 462 … … 3526 3529 '@opcodesub': self.parseTagOpcodeSub, 3527 3530 '@openc': self.parseTagOpEnc, 3531 #@opfltest: Lists all flags that will be used as input in some way. 3528 3532 '@opfltest': self.parseTagOpEFlags, 3533 #@opflmodify: Lists all EFLAGS modified. Includes @opflset, @opflcleared and @opflundef (if applicable). 3529 3534 '@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. 3530 3540 '@opflundef': self.parseTagOpEFlags, 3531 '@opflset': self.parseTagOpEFlags,3532 '@opflcl ear': self.parseTagOpEFlags,3541 #@opflclass: Shorthand for defining flag behaviour (@opfltest, @opfmodify, @opflset, @opflclear, @opflundef). 3542 '@opflclass': self.parseTagOpEFlagsClass, 3533 3543 '@ophints': self.parseTagOpHints, 3534 3544 '@opdisenum': self.parseTagOpDisEnum, … … 4118 4128 """ 4119 4129 Tag: @oppfx 4120 Value: n/a|none|0x66|0xf3|0xf2 4130 Value: n/a|none|0x66|0xf3|0xf2|!0xf3 4121 4131 4122 4132 Required prefix for the instruction. (In a (E)VEX context this is the … … 4140 4150 sPrefix = '0x' + sPrefix; 4141 4151 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,)); 4143 4154 4144 4155 if sPrefix is not None and sPrefix not in g_kdPrefixes: … … 4188 4199 Value: none | 11 mr/reg | !11 mr/reg | rex.w=0 | rex.w=1 | vex.l=0 | vex.l=1 4189 4200 | 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 4190 4203 4191 4204 This is a simple way of dealing with encodings where the mod=3 and mod!=3 … … 4198 4211 sSubOpcode = self.flattenAllSections(aasSections); 4199 4212 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())),)); 4201 4215 sSubOpcode = g_kdSubOpcodes[sSubOpcode][0]; 4202 4216 … … 4271 4285 # Set them. 4272 4286 asOld = getattr(oInstr, self.kdOpFlagToAttr[sTag]); 4273 if asOld is not None :4287 if asOld is not None and len(asOld) > 0: 4274 4288 return self.errorComment(iTagLine, '%s: attempting to overwrite "%s" with "%s"' % ( sTag, asOld, asFlags,)); 4275 4289 setattr(oInstr, self.kdOpFlagToAttr[sTag], asFlags); … … 4277 4291 _ = iEndLine; 4278 4292 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 4279 4378 4280 4379 def parseTagOpHints(self, sTag, aasSections, iTagLine, iEndLine): -
trunk/src/VBox/VMM/VMMAll/IEMAllInstTwoByte0f.cpp.h
r103181 r103185 1854 1854 } 1855 1855 1856 /** Opcode 0x0f 0x00 /3. */1857 1856 FNIEMOP_DEF_1(iemOpCommonLarLsl_Gv_Ew, bool, fIsLar) 1858 1857 { … … 1947 1946 1948 1947 1949 /** Opcode 0x0f 0x02. */ 1948 /** 1949 * @opcode 0x02 1950 * @opflmodify zf 1951 */ 1950 1952 FNIEMOP_DEF(iemOp_lar_Gv_Ew) 1951 1953 { … … 1955 1957 1956 1958 1957 /** Opcode 0x0f 0x03. */ 1959 /** 1960 * @opcode 0x03 1961 * @opflmodify zf 1962 */ 1958 1963 FNIEMOP_DEF(iemOp_lsl_Gv_Ew) 1959 1964 { … … 4868 4873 4869 4874 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 */ 4871 4881 FNIEMOP_DEF(iemOp_ucomiss_Vss_Wss) 4872 4882 { … … 4937 4947 4938 4948 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 */ 4940 4955 FNIEMOP_DEF(iemOp_ucomisd_Vsd_Wsd) 4941 4956 { … … 5010 5025 5011 5026 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 */ 5013 5033 FNIEMOP_DEF(iemOp_comiss_Vss_Wss) 5014 5034 { … … 5079 5099 5080 5100 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 */ 5082 5107 FNIEMOP_DEF(iemOp_comisd_Vsd_Wsd) 5083 5108 { … … 5355 5380 5356 5381 5357 /** Opcode 0x0f 0x40. */ 5382 /** 5383 * @opcode 0x40 5384 * @opfltest of 5385 */ 5358 5386 FNIEMOP_DEF(iemOp_cmovo_Gv_Ev) 5359 5387 { … … 5363 5391 5364 5392 5365 /** Opcode 0x0f 0x41. */ 5393 /** 5394 * @opcode 0x41 5395 * @opfltest of 5396 */ 5366 5397 FNIEMOP_DEF(iemOp_cmovno_Gv_Ev) 5367 5398 { … … 5371 5402 5372 5403 5373 /** Opcode 0x0f 0x42. */ 5404 /** 5405 * @opcode 0x42 5406 * @opfltest cf 5407 */ 5374 5408 FNIEMOP_DEF(iemOp_cmovc_Gv_Ev) 5375 5409 { … … 5379 5413 5380 5414 5381 /** Opcode 0x0f 0x43. */ 5415 /** 5416 * @opcode 0x43 5417 * @opfltest cf 5418 */ 5382 5419 FNIEMOP_DEF(iemOp_cmovnc_Gv_Ev) 5383 5420 { … … 5387 5424 5388 5425 5389 /** Opcode 0x0f 0x44. */ 5426 /** 5427 * @opcode 0x44 5428 * @opfltest zf 5429 */ 5390 5430 FNIEMOP_DEF(iemOp_cmove_Gv_Ev) 5391 5431 { … … 5395 5435 5396 5436 5397 /** Opcode 0x0f 0x45. */ 5437 /** 5438 * @opcode 0x45 5439 * @opfltest zf 5440 */ 5398 5441 FNIEMOP_DEF(iemOp_cmovne_Gv_Ev) 5399 5442 { … … 5403 5446 5404 5447 5405 /** Opcode 0x0f 0x46. */ 5448 /** 5449 * @opcode 0x46 5450 * @opfltest cf,zf 5451 */ 5406 5452 FNIEMOP_DEF(iemOp_cmovbe_Gv_Ev) 5407 5453 { … … 5411 5457 5412 5458 5413 /** Opcode 0x0f 0x47. */ 5459 /** 5460 * @opcode 0x47 5461 * @opfltest cf,zf 5462 */ 5414 5463 FNIEMOP_DEF(iemOp_cmovnbe_Gv_Ev) 5415 5464 { … … 5419 5468 5420 5469 5421 /** Opcode 0x0f 0x48. */ 5470 /** 5471 * @opcode 0x48 5472 * @opfltest sf 5473 */ 5422 5474 FNIEMOP_DEF(iemOp_cmovs_Gv_Ev) 5423 5475 { … … 5427 5479 5428 5480 5429 /** Opcode 0x0f 0x49. */ 5481 /** 5482 * @opcode 0x49 5483 * @opfltest sf 5484 */ 5430 5485 FNIEMOP_DEF(iemOp_cmovns_Gv_Ev) 5431 5486 { … … 5435 5490 5436 5491 5437 /** Opcode 0x0f 0x4a. */ 5492 /** 5493 * @opcode 0x4a 5494 * @opfltest pf 5495 */ 5438 5496 FNIEMOP_DEF(iemOp_cmovp_Gv_Ev) 5439 5497 { … … 5443 5501 5444 5502 5445 /** Opcode 0x0f 0x4b. */ 5503 /** 5504 * @opcode 0x4b 5505 * @opfltest pf 5506 */ 5446 5507 FNIEMOP_DEF(iemOp_cmovnp_Gv_Ev) 5447 5508 { … … 5451 5512 5452 5513 5453 /** Opcode 0x0f 0x4c. */ 5514 /** 5515 * @opcode 0x4c 5516 * @opfltest sf,of 5517 */ 5454 5518 FNIEMOP_DEF(iemOp_cmovl_Gv_Ev) 5455 5519 { … … 5459 5523 5460 5524 5461 /** Opcode 0x0f 0x4d. */ 5525 /** 5526 * @opcode 0x4d 5527 * @opfltest sf,of 5528 */ 5462 5529 FNIEMOP_DEF(iemOp_cmovnl_Gv_Ev) 5463 5530 { … … 5467 5534 5468 5535 5469 /** Opcode 0x0f 0x4e. */ 5536 /** 5537 * @opcode 0x4e 5538 * @opfltest zf,sf,of 5539 */ 5470 5540 FNIEMOP_DEF(iemOp_cmovle_Gv_Ev) 5471 5541 { … … 5475 5545 5476 5546 5477 /** Opcode 0x0f 0x4f. */ 5547 /** 5548 * @opcode 0x4e 5549 * @opfltest zf,sf,of 5550 */ 5478 5551 FNIEMOP_DEF(iemOp_cmovnle_Gv_Ev) 5479 5552 { … … 7743 7816 7744 7817 7745 7746 /** Opcode 0x0f 0x80. */ 7818 /** 7819 * @opcode 0x80 7820 * @opfltest of 7821 */ 7747 7822 FNIEMOP_DEF(iemOp_jo_Jv) 7748 7823 { … … 7777 7852 7778 7853 7779 /** Opcode 0x0f 0x81. */ 7854 /** 7855 * @opcode 0x81 7856 * @opfltest of 7857 */ 7780 7858 FNIEMOP_DEF(iemOp_jno_Jv) 7781 7859 { … … 7810 7888 7811 7889 7812 /** Opcode 0x0f 0x82. */ 7890 /** 7891 * @opcode 0x82 7892 * @opfltest cf 7893 */ 7813 7894 FNIEMOP_DEF(iemOp_jc_Jv) 7814 7895 { … … 7843 7924 7844 7925 7845 /** Opcode 0x0f 0x83. */ 7926 /** 7927 * @opcode 0x83 7928 * @opfltest cf 7929 */ 7846 7930 FNIEMOP_DEF(iemOp_jnc_Jv) 7847 7931 { … … 7876 7960 7877 7961 7878 /** Opcode 0x0f 0x84. */ 7962 /** 7963 * @opcode 0x84 7964 * @opfltest zf 7965 */ 7879 7966 FNIEMOP_DEF(iemOp_je_Jv) 7880 7967 { … … 7909 7996 7910 7997 7911 /** Opcode 0x0f 0x85. */ 7998 /** 7999 * @opcode 0x85 8000 * @opfltest zf 8001 */ 7912 8002 FNIEMOP_DEF(iemOp_jne_Jv) 7913 8003 { … … 7942 8032 7943 8033 7944 /** Opcode 0x0f 0x86. */ 8034 /** 8035 * @opcode 0x86 8036 * @opfltest cf,zf 8037 */ 7945 8038 FNIEMOP_DEF(iemOp_jbe_Jv) 7946 8039 { … … 7975 8068 7976 8069 7977 /** Opcode 0x0f 0x87. */ 8070 /** 8071 * @opcode 0x87 8072 * @opfltest cf,zf 8073 */ 7978 8074 FNIEMOP_DEF(iemOp_jnbe_Jv) 7979 8075 { … … 8008 8104 8009 8105 8010 /** Opcode 0x0f 0x88. */ 8106 /** 8107 * @opcode 0x88 8108 * @opfltest sf 8109 */ 8011 8110 FNIEMOP_DEF(iemOp_js_Jv) 8012 8111 { … … 8041 8140 8042 8141 8043 /** Opcode 0x0f 0x89. */ 8142 /** 8143 * @opcode 0x89 8144 * @opfltest sf 8145 */ 8044 8146 FNIEMOP_DEF(iemOp_jns_Jv) 8045 8147 { … … 8074 8176 8075 8177 8076 /** Opcode 0x0f 0x8a. */ 8178 /** 8179 * @opcode 0x8a 8180 * @opfltest pf 8181 */ 8077 8182 FNIEMOP_DEF(iemOp_jp_Jv) 8078 8183 { … … 8107 8212 8108 8213 8109 /** Opcode 0x0f 0x8b. */ 8214 /** 8215 * @opcode 0x8b 8216 * @opfltest pf 8217 */ 8110 8218 FNIEMOP_DEF(iemOp_jnp_Jv) 8111 8219 { … … 8140 8248 8141 8249 8142 /** Opcode 0x0f 0x8c. */ 8250 /** 8251 * @opcode 0x8c 8252 * @opfltest sf,of 8253 */ 8143 8254 FNIEMOP_DEF(iemOp_jl_Jv) 8144 8255 { … … 8173 8284 8174 8285 8175 /** Opcode 0x0f 0x8d. */ 8286 /** 8287 * @opcode 0x8d 8288 * @opfltest sf,of 8289 */ 8176 8290 FNIEMOP_DEF(iemOp_jnl_Jv) 8177 8291 { … … 8206 8320 8207 8321 8208 /** Opcode 0x0f 0x8e. */ 8322 /** 8323 * @opcode 0x8e 8324 * @opfltest zf,sf,of 8325 */ 8209 8326 FNIEMOP_DEF(iemOp_jle_Jv) 8210 8327 { … … 8239 8356 8240 8357 8241 /** Opcode 0x0f 0x8f. */ 8358 /** 8359 * @opcode 0x8f 8360 * @opfltest zf,sf,of 8361 */ 8242 8362 FNIEMOP_DEF(iemOp_jnle_Jv) 8243 8363 { … … 8272 8392 8273 8393 8274 /** Opcode 0x0f 0x90. */ 8394 /** 8395 * @opcode 0x90 8396 * @opfltest of 8397 */ 8275 8398 FNIEMOP_DEF(iemOp_seto_Eb) 8276 8399 { … … 8313 8436 8314 8437 8315 /** Opcode 0x0f 0x91. */ 8438 /** 8439 * @opcode 0x91 8440 * @opfltest of 8441 */ 8316 8442 FNIEMOP_DEF(iemOp_setno_Eb) 8317 8443 { … … 8354 8480 8355 8481 8356 /** Opcode 0x0f 0x92. */ 8482 /** 8483 * @opcode 0x92 8484 * @opfltest cf 8485 */ 8357 8486 FNIEMOP_DEF(iemOp_setc_Eb) 8358 8487 { … … 8395 8524 8396 8525 8397 /** Opcode 0x0f 0x93. */ 8526 /** 8527 * @opcode 0x93 8528 * @opfltest cf 8529 */ 8398 8530 FNIEMOP_DEF(iemOp_setnc_Eb) 8399 8531 { … … 8436 8568 8437 8569 8438 /** Opcode 0x0f 0x94. */ 8570 /** 8571 * @opcode 0x94 8572 * @opfltest zf 8573 */ 8439 8574 FNIEMOP_DEF(iemOp_sete_Eb) 8440 8575 { … … 8477 8612 8478 8613 8479 /** Opcode 0x0f 0x95. */ 8614 /** 8615 * @opcode 0x95 8616 * @opfltest zf 8617 */ 8480 8618 FNIEMOP_DEF(iemOp_setne_Eb) 8481 8619 { … … 8518 8656 8519 8657 8520 /** Opcode 0x0f 0x96. */ 8658 /** 8659 * @opcode 0x96 8660 * @opfltest cf,zf 8661 */ 8521 8662 FNIEMOP_DEF(iemOp_setbe_Eb) 8522 8663 { … … 8559 8700 8560 8701 8561 /** Opcode 0x0f 0x97. */ 8702 /** 8703 * @opcode 0x97 8704 * @opfltest cf,zf 8705 */ 8562 8706 FNIEMOP_DEF(iemOp_setnbe_Eb) 8563 8707 { … … 8600 8744 8601 8745 8602 /** Opcode 0x0f 0x98. */ 8746 /** 8747 * @opcode 0x98 8748 * @opfltest sf 8749 */ 8603 8750 FNIEMOP_DEF(iemOp_sets_Eb) 8604 8751 { … … 8641 8788 8642 8789 8643 /** Opcode 0x0f 0x99. */ 8790 /** 8791 * @opcode 0x99 8792 * @opfltest sf 8793 */ 8644 8794 FNIEMOP_DEF(iemOp_setns_Eb) 8645 8795 { … … 8682 8832 8683 8833 8684 /** Opcode 0x0f 0x9a. */ 8834 /** 8835 * @opcode 0x9a 8836 * @opfltest pf 8837 */ 8685 8838 FNIEMOP_DEF(iemOp_setp_Eb) 8686 8839 { … … 8723 8876 8724 8877 8725 /** Opcode 0x0f 0x9b. */ 8878 /** 8879 * @opcode 0x9b 8880 * @opfltest pf 8881 */ 8726 8882 FNIEMOP_DEF(iemOp_setnp_Eb) 8727 8883 { … … 8764 8920 8765 8921 8766 /** Opcode 0x0f 0x9c. */ 8922 /** 8923 * @opcode 0x9c 8924 * @opfltest sf,of 8925 */ 8767 8926 FNIEMOP_DEF(iemOp_setl_Eb) 8768 8927 { … … 8805 8964 8806 8965 8807 /** Opcode 0x0f 0x9d. */ 8966 /** 8967 * @opcode 0x9d 8968 * @opfltest sf,of 8969 */ 8808 8970 FNIEMOP_DEF(iemOp_setnl_Eb) 8809 8971 { … … 8846 9008 8847 9009 8848 /** Opcode 0x0f 0x9e. */ 9010 /** 9011 * @opcode 0x9e 9012 * @opfltest zf,sf,of 9013 */ 8849 9014 FNIEMOP_DEF(iemOp_setle_Eb) 8850 9015 { … … 8887 9052 8888 9053 8889 /** Opcode 0x0f 0x9f. */ 9054 /** 9055 * @opcode 0x9f 9056 * @opfltest zf,sf,of 9057 */ 8890 9058 FNIEMOP_DEF(iemOp_setnle_Eb) 8891 9059 { … … 9399 9567 9400 9568 9401 /** Opcode 0x0f 0xa3. */ 9569 /** 9570 * @opcode 0xa3 9571 * @oppfx n/a 9572 * @opflclass bitmap 9573 */ 9402 9574 FNIEMOP_DEF(iemOp_bt_Ev_Gv) 9403 9575 { … … 9771 9943 9772 9944 9773 /** Opcode 0x0f 0xab. */ 9945 /** 9946 * @opcode 0xab 9947 * @oppfx n/a 9948 * @opflclass bitmap 9949 */ 9774 9950 FNIEMOP_DEF(iemOp_bts_Ev_Gv) 9775 9951 { … … 10236 10412 10237 10413 10238 /** Opcode 0x0f 0xaf. */ 10414 /** 10415 * @opcode 0xaf 10416 * @opflclass multiply 10417 */ 10239 10418 FNIEMOP_DEF(iemOp_imul_Gv_Ev) 10240 10419 { … … 10247 10426 10248 10427 10249 /** Opcode 0x0f 0xb0. */ 10428 /** 10429 * @opcode 0xb0 10430 * @opflclass arithmetic 10431 */ 10250 10432 FNIEMOP_DEF(iemOp_cmpxchg_Eb_Gb) 10251 10433 { … … 10312 10494 } 10313 10495 10314 /** Opcode 0x0f 0xb1. */ 10496 /** 10497 * @opcode 0xb1 10498 * @opflclass arithmetic 10499 */ 10315 10500 FNIEMOP_DEF(iemOp_cmpxchg_Ev_Gv) 10316 10501 { … … 10510 10695 10511 10696 10512 /** Opcode 0x0f 0xb3. */ 10697 /** 10698 * @opcode 0xb3 10699 * @oppfx n/a 10700 * @opflclass bitmap 10701 */ 10513 10702 FNIEMOP_DEF(iemOp_btr_Ev_Gv) 10514 10703 { … … 10719 10908 10720 10909 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 */ 10722 10916 FNIEMOP_DEF(iemOp_popcnt_Gv_Ev) 10723 10917 { … … 11127 11321 11128 11322 11129 /** Opcode 0x0f 0xba /4. */ 11323 /** 11324 * @opmaps grp8 11325 * @opcode /4 11326 * @oppfx n/a 11327 * @opflclass bitmap 11328 */ 11130 11329 FNIEMOPRM_DEF(iemOp_Grp8_bt_Ev_Ib) 11131 11330 { … … 11135 11334 11136 11335 11137 /** Opcode 0x0f 0xba /5. */ 11336 /** 11337 * @opmaps grp8 11338 * @opcode /5 11339 * @oppfx n/a 11340 * @opflclass bitmap 11341 */ 11138 11342 FNIEMOPRM_DEF(iemOp_Grp8_bts_Ev_Ib) 11139 11343 { … … 11144 11348 11145 11349 11146 /** Opcode 0x0f 0xba /6. */ 11350 /** 11351 * @opmaps grp8 11352 * @opcode /6 11353 * @oppfx n/a 11354 * @opflclass bitmap 11355 */ 11147 11356 FNIEMOPRM_DEF(iemOp_Grp8_btr_Ev_Ib) 11148 11357 { … … 11153 11362 11154 11363 11155 /** Opcode 0x0f 0xba /7. */ 11364 /** 11365 * @opmaps grp8 11366 * @opcode /7 11367 * @oppfx n/a 11368 * @opflclass bitmap 11369 */ 11156 11370 FNIEMOPRM_DEF(iemOp_Grp8_btc_Ev_Ib) 11157 11371 { … … 11183 11397 11184 11398 11185 /** Opcode 0x0f 0xbb. */ 11399 /** 11400 * @opcode 0xbb 11401 * @oppfx n/a 11402 * @opflclass bitmap 11403 */ 11186 11404 FNIEMOP_DEF(iemOp_btc_Ev_Gv) 11187 11405 { … … 11336 11554 11337 11555 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 */ 11339 11565 FNIEMOP_DEF(iemOp_bsf_Gv_Ev) 11340 11566 { … … 11346 11572 11347 11573 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 */ 11349 11583 FNIEMOP_DEF(iemOp_tzcnt_Gv_Ev) 11350 11584 { … … 11373 11607 11374 11608 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 */ 11376 11618 FNIEMOP_DEF(iemOp_bsr_Gv_Ev) 11377 11619 { … … 11383 11625 11384 11626 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 */ 11386 11636 FNIEMOP_DEF(iemOp_lzcnt_Gv_Ev) 11387 11637 { … … 12429 12679 12430 12680 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 */ 12432 12688 FNIEMOP_DEF_1(iemOp_Grp9_cmpxchg8b_Mq, uint8_t, bRm) 12433 12689 { … … 12474 12730 12475 12731 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 */ 12477 12739 FNIEMOP_DEF_1(iemOp_Grp9_cmpxchg16b_Mdq, uint8_t, bRm) 12478 12740 { -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h
r103184 r103185 2279 2279 2280 2280 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 */ 2282 2287 FNIEMOP_DEF(iemOp_vucomiss_Vss_Wss) 2283 2288 { … … 2350 2355 2351 2356 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 */ 2353 2363 FNIEMOP_DEF(iemOp_vucomisd_Vsd_Wsd) 2354 2364 { … … 2424 2434 /* Opcode VEX.F2.0F 0x2e - invalid */ 2425 2435 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 */ 2427 2442 FNIEMOP_DEF(iemOp_vcomiss_Vss_Wss) 2428 2443 { … … 2495 2510 2496 2511 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 */ 2498 2518 FNIEMOP_DEF(iemOp_vcomisd_Vsd_Wsd) 2499 2519 { -
trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap2.cpp.h
r102331 r103185 1983 1983 1984 1984 /** 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) \ 1987 1986 uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm); \ 1988 1987 if (IEM_IS_MODRM_REG_MODE(bRm)) \ … … 2066 2065 (void)0 2067 2066 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 */ 2069 2075 FNIEMOP_DEF(iemOp_bzhi_Gy_Ey_By) 2070 2076 { … … 2184 2190 2185 2191 2186 /** Opcode VEX.F2.0F38 0xf6 (vex only) */ 2192 /** 2193 * @opcode 0xf6 2194 * @oppfx 0xf2 2195 * @opflclass unchanged 2196 */ 2187 2197 FNIEMOP_DEF(iemOp_mulx_By_Gy_rDX_Ey) 2188 2198 { … … 2292 2302 { 2293 2303 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); 2295 2305 } 2296 2306 … … 2300 2310 { 2301 2311 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); 2303 2313 } 2304 2314 … … 2308 2318 { 2309 2319 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); 2311 2321 } 2312 2322
Note:
See TracChangeset
for help on using the changeset viewer.