VirtualBox

Ignore:
Timestamp:
Feb 13, 2017 5:38:06 PM (8 years ago)
Author:
vboxsync
Message:

bs3-cpu-decoding-1: group 12, 13, and 14 undefined opcode checks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3-cpu-decoding-1.c32

    r65776 r65777  
    6767
    6868#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))
    6976#define RM_EAX_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
    7077#define RM_EAX_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     
    301308#define UD_T_EXACT          0
    302309#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
    304329
    305330#define UD_F_ANY_PFX 0
     
    338363    {  UD_T_EXACT, 2, { 0x0f, 0x36 }, UD_F_ANY_PFX },
    339364    {  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_IMM8, 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.  */
    341366    {  UD_T_MODRM,      3, { 0x0f, 0x3c, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused.  */
    342367    {  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_IMM8, 3, { 0x0f, 0x3e, 0x00 }, UD_F_3BYTE_ESC | UD_F_ANY_PFX }, /* Three byte escape table, just unused.  */
    344     {  UD_T_MODRM_IMM8, 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.  */
    345370    {  UD_T_MODRM, 2, { 0x0f, 0x50 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
    346371    {  UD_T_MODRM, 2, { 0x0f, 0x52 }, UD_F_NOT_NO_PFX | UD_F_NOT_RN_PFX },
     
    367392    {  UD_T_MODRM, 2, { 0x0f, 0x6e }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
    368393    {  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 },
    369421    {  UD_T_MODRM, 2, { 0x0f, 0x74 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
    370422    {  UD_T_MODRM, 2, { 0x0f, 0x75 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
     
    391443    /* Note! Intel incorrectly states that XADD (0f c0 and 0f c1) are sensitive to OZ, RN and RZ.  AMD and skylake hw disagrees. */
    392444    {  UD_T_MODRM, 2, { 0x0f, 0xc3 }, UD_F_NOT_NO_PFX },
    393     {  UD_T_MODRM_IMM8, 2, { 0x0f, 0xc4 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
    394     {  UD_T_MODRM_IMM8, 2, { 0x0f, 0xc5 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
    395     {  UD_T_MODRM_IMM8, 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 },
    396448    {  UD_T_MODRM, 2, { 0x0f, 0xd0 }, UD_F_NOT_OZ_PFX | UD_F_NOT_RZ_PFX },
    397449    {  UD_T_MODRM, 2, { 0x0f, 0xd1 }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
     
    792844            {
    793845                { 1, { RM_EAX_EAX, },                                       0 },
     846                /* Mem forms (hardcoded indexed later): */
    794847                { 2, { RM_EAX_DEREF_EBX_DISP8, 0 },                         0 },
    795848                { 5, { RM_EAX_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     
    801854            {
    802855                { 1 + 1, { RM_EAX_EAX, 0x11 },                                      0 },
     856                /* Mem forms (hardcoded indexed later): */
    803857                { 2 + 1, { RM_EAX_DEREF_EBX_DISP8, 0, 0x11 },                       0 },
    804858                { 5 + 1, { RM_EAX_DEREF_EBX_DISP32, 0, 0, 0, 0, 0x11 },             0 },
     
    806860                { 3 + 1, { RM_EAX_SIB_DISP8,  SIB_EBX_X1_NONE, 0, 0x11 },           0 },
    807861                { 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 },
    808884            };
    809885            unsigned            iPrefix;
     
    831907                    paSuffixes  = s_aModRm;
    832908                    break;
    833                 case UD_T_MODRM_IMM8:
     909                case UD_T_MODRM_I8:
    834910                    cSuffixes   = RT_ELEMENTS(s_aModRmImm8);
    835911                    paSuffixes  = s_aModRmImm8;
    836912                    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];
    837943                    break;
    838944                default:
     
    13261432    DecodeUdEdgeTest(g_aUdTest2Byte_0f, RT_ELEMENTS(g_aUdTest2Byte_0f));
    13271433#endif
    1328 #if 1
     1434#if 0
    13291435    Bs3TestSub("3 byte undefined opcodes 0f 38");
    13301436    DecodeUdEdgeTest(g_aUdTest3Byte_0f_38, RT_ELEMENTS(g_aUdTest3Byte_0f_38));
Note: See TracChangeset for help on using the changeset viewer.

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