Changeset 66340 in vbox
- Timestamp:
- Mar 29, 2017 3:28:52 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-decoding-1.c32
r66338 r66340 396 396 #define UD_F_NOT_NO_PFX UINT8_C(0x01) /**< Must have some kind of prefix to be \#UD. */ 397 397 #define UD_F_NOT_OZ_PFX UINT8_C(0x02) /**< Skip the size prefix. */ 398 #define UD_F_NOT_R Z_PFX UINT8_C(0x04) /**< Skip the REPZ prefix. */399 #define UD_F_NOT_R N_PFX UINT8_C(0x08) /**< Skip the REPNZ prefix. */398 #define UD_F_NOT_REPNZ_PFX UINT8_C(0x04) /**< Skip the REPZ prefix. */ 399 #define UD_F_NOT_REPZ_PFX UINT8_C(0x08) /**< Skip the REPNZ prefix. */ 400 400 #define UD_F_NOT_LK_PFX UINT8_C(0x10) /**< Skip the LOCK prefix. */ 401 401 #define UD_F_3BYTE_ESC UINT8_C(0x20) /**< Unused 3 byte escape table. Test all 256 entries */ … … 406 406 CPUDECODE1UDTST const g_aUdTest2Byte_0f[] = 407 407 { 408 #if 0408 #if 1 409 409 { UD_T_EXACT, 2, { 0x0f, 0x04 }, UD_F_ANY_PFX }, 410 410 { UD_T_EXACT, 2, { 0x0f, 0x0a }, UD_F_ANY_PFX }, … … 415 415 { UD_T_MODRM, 2, { 0x0f, 0x14 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 416 416 { UD_T_MODRM, 2, { 0x0f, 0x15 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 417 { UD_T_MODRM, 2, { 0x0f, 0x16 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX },417 { UD_T_MODRM, 2, { 0x0f, 0x16 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX }, 418 418 { UD_T_MODRM, 2, { 0x0f, 0x17 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 419 419 /** @todo figure when 0f 019 and 0f 0c-0f were made into NOPs. */ … … 435 435 { UD_T_MODRM_I8, 3, { 0x0f, 0x3f, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused. */ 436 436 { UD_T_MODRM, 2, { 0x0f, 0x50 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 437 { UD_T_MODRM, 2, { 0x0f, 0x52 }, UD_F_NOT_NO_PFX | UD_F_NOT_R N_PFX },438 { UD_T_MODRM, 2, { 0x0f, 0x53 }, UD_F_NOT_NO_PFX | UD_F_NOT_R N_PFX },437 { UD_T_MODRM, 2, { 0x0f, 0x52 }, UD_F_NOT_NO_PFX | UD_F_NOT_REPZ_PFX }, 438 { UD_T_MODRM, 2, { 0x0f, 0x53 }, UD_F_NOT_NO_PFX | UD_F_NOT_REPZ_PFX }, 439 439 { UD_T_MODRM, 2, { 0x0f, 0x54 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 440 440 { UD_T_MODRM, 2, { 0x0f, 0x55 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 441 441 { UD_T_MODRM, 2, { 0x0f, 0x56 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 442 442 { UD_T_MODRM, 2, { 0x0f, 0x57 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 443 { UD_T_MODRM, 2, { 0x0f, 0x5b }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX },443 { UD_T_MODRM, 2, { 0x0f, 0x5b }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX }, 444 444 { UD_T_MODRM, 2, { 0x0f, 0x60 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 445 445 { UD_T_MODRM, 2, { 0x0f, 0x61 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, … … 457 457 { UD_T_MODRM, 2, { 0x0f, 0x6d }, UD_F_NOT_OZ_PFX }, 458 458 { UD_T_MODRM, 2, { 0x0f, 0x6e }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 459 { UD_T_MODRM, 2, { 0x0f, 0x6f }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX },459 { UD_T_MODRM, 2, { 0x0f, 0x6f }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX }, 460 460 { UD_T_MODRM_M_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, 461 461 { UD_T_MODRM_RR0_I8, 2, { 0x0f, 0x71 }, UD_F_ANY_PFX }, … … 489 489 { UD_T_MODRM, 2, { 0x0f, 0x76 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 490 490 /* 0f 77: WTF? OZ, RZ and RN are all empty in the intel tables and LK isn't metnioned at all: */ 491 { UD_T_MODRM, 2, { 0x0f, 0x77 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX | UD_F_NOT_RN_PFX | UD_F_NOT_LK_PFX },491 { UD_T_MODRM, 2, { 0x0f, 0x77 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX | UD_F_NOT_REPZ_PFX | UD_F_NOT_LK_PFX }, 492 492 { UD_T_MODRM, 2, { 0x0f, 0x78 }, UD_F_NOT_NO_PFX }, 493 493 { UD_T_MODRM, 2, { 0x0f, 0x79 }, UD_F_NOT_NO_PFX }, 494 494 { UD_T_MODRM, 2, { 0x0f, 0x7a }, UD_F_ANY_PFX }, 495 495 { UD_T_MODRM, 2, { 0x0f, 0x7b }, UD_F_ANY_PFX }, 496 { UD_T_MODRM, 2, { 0x0f, 0x7c }, UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX },497 { UD_T_MODRM, 2, { 0x0f, 0x7d }, UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX },498 { UD_T_MODRM, 2, { 0x0f, 0x7e }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX },499 { UD_T_MODRM, 2, { 0x0f, 0x7f }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX },496 { UD_T_MODRM, 2, { 0x0f, 0x7c }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX }, 497 { UD_T_MODRM, 2, { 0x0f, 0x7d }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX }, 498 { UD_T_MODRM, 2, { 0x0f, 0x7e }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX }, 499 { UD_T_MODRM, 2, { 0x0f, 0x7f }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX }, 500 500 { UD_T_MODRM, 2, { 0x0f, 0xa6 }, UD_F_ANY_PFX }, 501 501 { UD_T_MODRM, 2, { 0x0f, 0xa7 }, UD_F_ANY_PFX }, … … 516 516 { UD_T_MODRM_RR6, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* 00=mfence */ 517 517 { UD_T_MODRM_RR7, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* 00=sfence */ 518 { UD_T_MODRM, 2, { 0x0f, 0xb8 }, UD_F_NOT_R N_PFX },518 { UD_T_MODRM, 2, { 0x0f, 0xb8 }, UD_F_NOT_REPZ_PFX }, 519 519 { UD_T_MODRM | UD_T_NOAMD, 2, { 0x0f, 0xb9 }, UD_F_ANY_PFX }, /* UD1 */ 520 520 { UD_T_MODRM_MR0_I8, 2, { 0x0f, 0xba }, UD_F_ANY_PFX }, /* grp8 */ … … 525 525 //{ UD_T_MODRM, 2, { 0x0f, 0xbb }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 526 526 /** @todo AMD tables indicates that f2 0f bc rm is invalid, but on skylake it works differently (BSF?) */ 527 { UD_T_MODRM, 2, { 0x0f, 0xbc }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX /* figure: */ | UD_F_NOT_RZ_PFX },527 { UD_T_MODRM, 2, { 0x0f, 0xbc }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX /* figure: */ | UD_F_NOT_REPNZ_PFX }, 528 528 /** @todo AMD tables indicates that f3 0f bc rm is invalid, but on skylake it works differently (BSR?) */ 529 { UD_T_MODRM, 2, { 0x0f, 0xbd }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX /* figure: */ | UD_F_NOT_RZ_PFX },529 { UD_T_MODRM, 2, { 0x0f, 0xbd }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX /* figure: */ | UD_F_NOT_REPNZ_PFX }, 530 530 /* Note! Intel incorrectly states that XADD (0f c0 and 0f c1) are sensitive to OZ, RN and RZ. AMD and skylake hw disagrees. */ 531 531 { UD_T_MODRM, 2, { 0x0f, 0xc3 }, UD_F_NOT_NO_PFX }, … … 546 546 { UD_T_MODRM_MR5, 2, { 0x0f, 0xc7 }, UD_F_ANY_PFX }, 547 547 { UD_T_MODRM_RR5, 2, { 0x0f, 0xc7 }, UD_F_ANY_PFX }, 548 //{ UD_T_MODRM_MR0, 2, { 0x0f, 0xc7 }, UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX | },548 //{ UD_T_MODRM_MR0, 2, { 0x0f, 0xc7 }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX | }, 549 549 { UD_T_MODRM_RR0, 2, { 0x0f, 0xc7 }, UD_F_ANY_PFX }, 550 #if 0551 { UD_T_MODRM, 2, { 0x0f, 0xd0 }, UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX },550 #if 1 551 { UD_T_MODRM, 2, { 0x0f, 0xd0 }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX }, 552 552 { UD_T_MODRM, 2, { 0x0f, 0xd1 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 553 553 { UD_T_MODRM, 2, { 0x0f, 0xd2 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, … … 555 555 { UD_T_MODRM, 2, { 0x0f, 0xd4 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 556 556 { UD_T_MODRM, 2, { 0x0f, 0xd5 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 557 { UD_T_MODRM, 2, { 0x0f, 0xd6 }, UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX | UD_F_NOT_RN_PFX },557 { UD_T_MODRM, 2, { 0x0f, 0xd6 }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX | UD_F_NOT_REPZ_PFX }, 558 558 { UD_T_MODRM, 2, { 0x0f, 0xd7 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 559 559 { UD_T_MODRM, 2, { 0x0f, 0xd8 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, … … 571 571 { UD_T_MODRM, 2, { 0x0f, 0xe4 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 572 572 { UD_T_MODRM, 2, { 0x0f, 0xe5 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 573 { UD_T_MODRM, 2, { 0x0f, 0xe6 }, UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX | UD_F_NOT_RN_PFX },573 { UD_T_MODRM, 2, { 0x0f, 0xe6 }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX | UD_F_NOT_REPZ_PFX }, 574 574 { UD_T_MODRM, 2, { 0x0f, 0xe7 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 575 575 { UD_T_MODRM, 2, { 0x0f, 0xe8 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, … … 581 581 { UD_T_MODRM, 2, { 0x0f, 0xee }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 582 582 { UD_T_MODRM, 2, { 0x0f, 0xef }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 583 { UD_T_MODRM, 2, { 0x0f, 0xf0 }, UD_F_NOT_R Z_PFX },583 { UD_T_MODRM, 2, { 0x0f, 0xf0 }, UD_F_NOT_REPNZ_PFX }, 584 584 { UD_T_MODRM, 2, { 0x0f, 0xf1 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, 585 585 { UD_T_MODRM, 2, { 0x0f, 0xf2 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, … … 846 846 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xee }, UD_F_ANY_PFX }, 847 847 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xef }, UD_F_ANY_PFX }, 848 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf0 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX }, /// @todo crc32 weirdness849 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf1 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX }, /// @todo crc32 weirdness848 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf0 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX }, /// @todo crc32 weirdness 849 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf1 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX }, /// @todo crc32 weirdness 850 850 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf2 }, UD_F_NOT_NO_PFX }, 851 851 852 852 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf4 }, UD_F_ANY_PFX }, 853 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf5 }, UD_F_NOT_NO_PFX | UD_F_NOT_R N_PFX | UD_F_NOT_RZ_PFX },853 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf5 }, UD_F_NOT_NO_PFX | UD_F_NOT_REPZ_PFX | UD_F_NOT_REPNZ_PFX }, 854 854 855 855 { UD_T_MODRM, 3, { 0x0f, 0x38, 0xf7 }, UD_F_ANY_PFX }, … … 932 932 { 0, { 0 }, UD_F_NOT_NO_PFX }, 933 933 { 1, { P_OZ }, UD_F_NOT_OZ_PFX }, 934 { 1, { P_RN }, UD_F_NOT_R Z_PFX },935 { 1, { P_RZ }, UD_F_NOT_R N_PFX },934 { 1, { P_RN }, UD_F_NOT_REPNZ_PFX }, 935 { 1, { P_RZ }, UD_F_NOT_REPZ_PFX }, 936 936 { 1, { P_LK }, UD_F_NOT_LK_PFX }, 937 937 { 2, { P_OZ, P_OZ }, UD_F_NOT_OZ_PFX | UD_F_NOT_OZ_PFX }, 938 { 2, { P_RN, P_OZ }, UD_F_NOT_R Z_PFX | UD_F_NOT_OZ_PFX },939 { 2, { P_RZ, P_OZ }, UD_F_NOT_R N_PFX | UD_F_NOT_OZ_PFX },938 { 2, { P_RN, P_OZ }, UD_F_NOT_REPNZ_PFX | UD_F_NOT_OZ_PFX }, 939 { 2, { P_RZ, P_OZ }, UD_F_NOT_REPZ_PFX | UD_F_NOT_OZ_PFX }, 940 940 { 2, { P_LK, P_OZ }, UD_F_NOT_LK_PFX | UD_F_NOT_OZ_PFX }, 941 { 2, { P_OZ, P_RN }, UD_F_NOT_OZ_PFX | UD_F_NOT_R Z_PFX },942 { 2, { P_RN, P_RN }, UD_F_NOT_R Z_PFX | UD_F_NOT_RZ_PFX },943 { 2, { P_RZ, P_RN }, UD_F_NOT_R N_PFX | UD_F_NOT_RZ_PFX },944 { 2, { P_LK, P_RN }, UD_F_NOT_LK_PFX | UD_F_NOT_R Z_PFX },945 { 2, { P_OZ, P_RZ }, UD_F_NOT_OZ_PFX | UD_F_NOT_R N_PFX },946 { 2, { P_RN, P_RZ }, UD_F_NOT_R Z_PFX | UD_F_NOT_RN_PFX },947 { 2, { P_RZ, P_RZ }, UD_F_NOT_R N_PFX | UD_F_NOT_RN_PFX },948 { 2, { P_LK, P_RZ }, UD_F_NOT_LK_PFX | UD_F_NOT_R N_PFX },941 { 2, { P_OZ, P_RN }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPNZ_PFX }, 942 { 2, { P_RN, P_RN }, UD_F_NOT_REPNZ_PFX | UD_F_NOT_REPNZ_PFX }, 943 { 2, { P_RZ, P_RN }, UD_F_NOT_REPZ_PFX | UD_F_NOT_REPNZ_PFX }, 944 { 2, { P_LK, P_RN }, UD_F_NOT_LK_PFX | UD_F_NOT_REPNZ_PFX }, 945 { 2, { P_OZ, P_RZ }, UD_F_NOT_OZ_PFX | UD_F_NOT_REPZ_PFX }, 946 { 2, { P_RN, P_RZ }, UD_F_NOT_REPNZ_PFX | UD_F_NOT_REPZ_PFX }, 947 { 2, { P_RZ, P_RZ }, UD_F_NOT_REPZ_PFX | UD_F_NOT_REPZ_PFX }, 948 { 2, { P_LK, P_RZ }, UD_F_NOT_LK_PFX | UD_F_NOT_REPZ_PFX }, 949 949 { 2, { P_OZ, P_LK }, UD_F_NOT_OZ_PFX | UD_F_NOT_LK_PFX }, 950 { 2, { P_RN, P_LK }, UD_F_NOT_R Z_PFX | UD_F_NOT_LK_PFX },951 { 2, { P_RZ, P_LK }, UD_F_NOT_R N_PFX | UD_F_NOT_LK_PFX },950 { 2, { P_RN, P_LK }, UD_F_NOT_REPNZ_PFX | UD_F_NOT_LK_PFX }, 951 { 2, { P_RZ, P_LK }, UD_F_NOT_REPZ_PFX | UD_F_NOT_LK_PFX }, 952 952 { 2, { P_LK, P_LK }, UD_F_NOT_LK_PFX | UD_F_NOT_LK_PFX }, 953 953 };
Note:
See TracChangeset
for help on using the changeset viewer.