Changeset 65777 in vbox for trunk/src/VBox/ValidationKit/bootsectors
- Timestamp:
- Feb 13, 2017 5:38:06 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-decoding-1.c32
r65776 r65777 67 67 68 68 #define RM_EAX_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 69 #define RM_ECX_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xCX << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 70 #define RM_EDX_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDX << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 71 #define RM_EBX_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBX << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 72 #define RM_ESP_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSP << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 73 #define RM_EBP_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBP << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 74 #define RM_ESI_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 75 #define RM_EDI_EAX ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI << X86_MODRM_REG_SHIFT) | (X86_GREG_xAX)) 69 76 #define RM_EAX_DEREF_EBX ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX << X86_MODRM_REG_SHIFT) | (X86_GREG_xBX)) 70 77 #define RM_EAX_DEREF_EBX_DISP8 ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX << X86_MODRM_REG_SHIFT) | (X86_GREG_xBX)) … … 301 308 #define UD_T_EXACT 0 302 309 #define UD_T_MODRM 1 303 #define UD_T_MODRM_IMM8 2 310 #define UD_T_MODRM_I8 2 311 #define UD_T_MODRM_M 3 312 #define UD_T_MODRM_M_I8 4 313 #define UD_T_MODRM_RR0 5 314 #define UD_T_MODRM_RR1 6 315 #define UD_T_MODRM_RR2 7 316 #define UD_T_MODRM_RR3 8 317 #define UD_T_MODRM_RR4 9 318 #define UD_T_MODRM_RR5 10 319 #define UD_T_MODRM_RR6 11 320 #define UD_T_MODRM_RR7 12 321 #define UD_T_MODRM_RR0_I8 13 322 #define UD_T_MODRM_RR1_I8 14 323 #define UD_T_MODRM_RR2_I8 15 324 #define UD_T_MODRM_RR3_I8 16 325 #define UD_T_MODRM_RR4_I8 17 326 #define UD_T_MODRM_RR5_I8 18 327 #define UD_T_MODRM_RR6_I8 19 328 #define UD_T_MODRM_RR7_I8 20 304 329 305 330 #define UD_F_ANY_PFX 0 … … 338 363 { UD_T_EXACT, 2, { 0x0f, 0x36 }, UD_F_ANY_PFX }, 339 364 { UD_T_MODRM, 3, { 0x0f, 0x39, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */ 340 { UD_T_MODRM_I MM8, 3, { 0x0f, 0x3b, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */365 { UD_T_MODRM_I8, 3, { 0x0f, 0x3b, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */ 341 366 { UD_T_MODRM, 3, { 0x0f, 0x3c, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */ 342 367 { UD_T_MODRM, 3, { 0x0f, 0x3d, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */ 343 { UD_T_MODRM_I MM8, 3, { 0x0f, 0x3e, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */344 { UD_T_MODRM_I MM8, 3, { 0x0f, 0x3f, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */368 { UD_T_MODRM_I8, 3, { 0x0f, 0x3e, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */ 369 { UD_T_MODRM_I8, 3, { 0x0f, 0x3f, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */ 345 370 { UD_T_MODRM, 2, { 0x0f, 0x50 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 346 371 { UD_T_MODRM, 2, { 0x0f, 0x52 }, UD_F_NOT_NO_PFX | UD_F_NOT_RN_PFX }, … … 367 392 { UD_T_MODRM, 2, { 0x0f, 0x6e }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 368 393 { UD_T_MODRM, 2, { 0x0f, 0x6f }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_RN_PFX }, 394 { UD_T_MODRM_M_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, 395 { UD_T_MODRM_RR0_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, 396 { UD_T_MODRM_RR1_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, 397 { UD_T_MODRM_RR2_I8, 2, { 0x0f, 0x71 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 398 { UD_T_MODRM_RR3_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, 399 { UD_T_MODRM_RR4_I8, 2, { 0x0f, 0x71 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 400 { UD_T_MODRM_RR5_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, 401 { UD_T_MODRM_RR6_I8, 2, { 0x0f, 0x71 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 402 { UD_T_MODRM_RR7_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, 403 { UD_T_MODRM_M_I8, 2, { 0x0f, 0x72 }, UD_F_ANY_PFX }, 404 { UD_T_MODRM_RR0_I8, 2, { 0x0f, 0x72 }, UD_F_ANY_PFX }, 405 { UD_T_MODRM_RR1_I8, 2, { 0x0f, 0x72 }, UD_F_ANY_PFX }, 406 { UD_T_MODRM_RR2_I8, 2, { 0x0f, 0x72 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 407 { UD_T_MODRM_RR3_I8, 2, { 0x0f, 0x72 }, UD_F_ANY_PFX }, 408 { UD_T_MODRM_RR4_I8, 2, { 0x0f, 0x72 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 409 { UD_T_MODRM_RR5_I8, 2, { 0x0f, 0x72 }, UD_F_ANY_PFX }, 410 { UD_T_MODRM_RR6_I8, 2, { 0x0f, 0x72 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 411 { UD_T_MODRM_RR7_I8, 2, { 0x0f, 0x72 }, UD_F_ANY_PFX }, 412 { UD_T_MODRM_M_I8, 2, { 0x0f, 0x73 }, UD_F_ANY_PFX }, 413 { UD_T_MODRM_RR0_I8, 2, { 0x0f, 0x73 }, UD_F_ANY_PFX }, 414 { UD_T_MODRM_RR1_I8, 2, { 0x0f, 0x73 }, UD_F_ANY_PFX }, 415 { UD_T_MODRM_RR2_I8, 2, { 0x0f, 0x73 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 416 { UD_T_MODRM_RR3_I8, 2, { 0x0f, 0x73 }, UD_F_NOT_OZ_PFX }, 417 { UD_T_MODRM_RR4_I8, 2, { 0x0f, 0x73 }, UD_F_ANY_PFX }, 418 { UD_T_MODRM_RR5_I8, 2, { 0x0f, 0x73 }, UD_F_ANY_PFX }, 419 { UD_T_MODRM_RR6_I8, 2, { 0x0f, 0x73 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 420 { UD_T_MODRM_RR7_I8, 2, { 0x0f, 0x73 }, UD_F_NOT_OZ_PFX }, 369 421 { UD_T_MODRM, 2, { 0x0f, 0x74 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 370 422 { UD_T_MODRM, 2, { 0x0f, 0x75 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, … … 391 443 /* Note! Intel incorrectly states that XADD (0f c0 and 0f c1) are sensitive to OZ, RN and RZ. AMD and skylake hw disagrees. */ 392 444 { UD_T_MODRM, 2, { 0x0f, 0xc3 }, UD_F_NOT_NO_PFX }, 393 { UD_T_MODRM_I MM8, 2, { 0x0f, 0xc4 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },394 { UD_T_MODRM_I MM8, 2, { 0x0f, 0xc5 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },395 { UD_T_MODRM_I MM8, 2, { 0x0f, 0xc6 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },445 { UD_T_MODRM_I8, 2, { 0x0f, 0xc4 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 446 { UD_T_MODRM_I8, 2, { 0x0f, 0xc5 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 447 { UD_T_MODRM_I8, 2, { 0x0f, 0xc6 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 396 448 { UD_T_MODRM, 2, { 0x0f, 0xd0 }, UD_F_NOT_OZ_PFX | UD_F_NOT_RZ_PFX }, 397 449 { UD_T_MODRM, 2, { 0x0f, 0xd1 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, … … 792 844 { 793 845 { 1, { RM_EAX_EAX, }, 0 }, 846 /* Mem forms (hardcoded indexed later): */ 794 847 { 2, { RM_EAX_DEREF_EBX_DISP8, 0 }, 0 }, 795 848 { 5, { RM_EAX_DEREF_EBX_DISP32, 0, 0, 0, 0 }, 0 }, … … 801 854 { 802 855 { 1 + 1, { RM_EAX_EAX, 0x11 }, 0 }, 856 /* Mem forms (hardcoded indexed later): */ 803 857 { 2 + 1, { RM_EAX_DEREF_EBX_DISP8, 0, 0x11 }, 0 }, 804 858 { 5 + 1, { RM_EAX_DEREF_EBX_DISP32, 0, 0, 0, 0, 0x11 }, 0 }, … … 806 860 { 3 + 1, { RM_EAX_SIB_DISP8, SIB_EBX_X1_NONE, 0, 0x11 }, 0 }, 807 861 { 6 + 1, { RM_EAX_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0, 0x11 }, 0 }, 862 }; 863 static CPUDECODE1UDSEQ const s_aModRmRRx[] = 864 { 865 { 1, { RM_EAX_EAX, }, 0 }, 866 { 1, { RM_ECX_EAX, }, 0 }, 867 { 1, { RM_EDX_EAX, }, 0 }, 868 { 1, { RM_EBX_EAX, }, 0 }, 869 { 1, { RM_ESP_EAX, }, 0 }, 870 { 1, { RM_EBP_EAX, }, 0 }, 871 { 1, { RM_ESI_EAX, }, 0 }, 872 { 1, { RM_EDI_EAX, }, 0 }, 873 }; 874 static CPUDECODE1UDSEQ const s_aModRmRRxImm8[] = 875 { 876 { 2, { RM_EAX_EAX, 0x11 }, 0 }, 877 { 2, { RM_ECX_EAX, 0x11 }, 0 }, 878 { 2, { RM_EDX_EAX, 0x11 }, 0 }, 879 { 2, { RM_EBX_EAX, 0x11 }, 0 }, 880 { 2, { RM_ESP_EAX, 0x11 }, 0 }, 881 { 2, { RM_EBP_EAX, 0x11 }, 0 }, 882 { 2, { RM_ESI_EAX, 0x11 }, 0 }, 883 { 2, { RM_EDI_EAX, 0x11 }, 0 }, 808 884 }; 809 885 unsigned iPrefix; … … 831 907 paSuffixes = s_aModRm; 832 908 break; 833 case UD_T_MODRM_I MM8:909 case UD_T_MODRM_I8: 834 910 cSuffixes = RT_ELEMENTS(s_aModRmImm8); 835 911 paSuffixes = s_aModRmImm8; 836 912 cImmEntries = 256; 913 break; 914 case UD_T_MODRM_M: 915 cSuffixes = RT_ELEMENTS(s_aModRm) - 1; 916 paSuffixes = &s_aModRm[1]; 917 break; 918 case UD_T_MODRM_M_I8: 919 cSuffixes = RT_ELEMENTS(s_aModRmImm8) - 1; 920 paSuffixes = &s_aModRmImm8[1]; 921 break; 922 case UD_T_MODRM_RR0: 923 case UD_T_MODRM_RR1: 924 case UD_T_MODRM_RR2: 925 case UD_T_MODRM_RR3: 926 case UD_T_MODRM_RR4: 927 case UD_T_MODRM_RR5: 928 case UD_T_MODRM_RR6: 929 case UD_T_MODRM_RR7: 930 cSuffixes = 1; 931 paSuffixes = &s_aModRmRRx[paTests[iTest].enmType - UD_T_MODRM_RR0]; 932 break; 933 case UD_T_MODRM_RR0_I8: 934 case UD_T_MODRM_RR1_I8: 935 case UD_T_MODRM_RR2_I8: 936 case UD_T_MODRM_RR3_I8: 937 case UD_T_MODRM_RR4_I8: 938 case UD_T_MODRM_RR5_I8: 939 case UD_T_MODRM_RR6_I8: 940 case UD_T_MODRM_RR7_I8: 941 cSuffixes = 1; 942 paSuffixes = &s_aModRmRRxImm8[paTests[iTest].enmType - UD_T_MODRM_RR0_I8]; 837 943 break; 838 944 default: … … 1326 1432 DecodeUdEdgeTest(g_aUdTest2Byte_0f, RT_ELEMENTS(g_aUdTest2Byte_0f)); 1327 1433 #endif 1328 #if 11434 #if 0 1329 1435 Bs3TestSub("3 byte undefined opcodes 0f 38"); 1330 1436 DecodeUdEdgeTest(g_aUdTest3Byte_0f_38, RT_ELEMENTS(g_aUdTest3Byte_0f_38));
Note:
See TracChangeset
for help on using the changeset viewer.