VirtualBox

Ignore:
Timestamp:
Feb 13, 2017 6:21:03 PM (8 years ago)
Author:
vboxsync
Message:

bs3-cpu-decoding-1: group 15 undefined opcode checks.

File:
1 edited

Legend:

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

    r65777 r65783  
    7474#define RM_ESI_EAX              ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xAX))
    7575#define RM_EDI_EAX              ((3 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xAX))
     76
    7677#define RM_EAX_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     78#define RM_ECX_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xCX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     79#define RM_EDX_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     80#define RM_EBX_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     81#define RM_ESP_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSP <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     82#define RM_EBP_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBP <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     83#define RM_ESI_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     84#define RM_EDI_DEREF_EBX        ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     85
    7786#define RM_EAX_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     87#define RM_ECX_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xCX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     88#define RM_EDX_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     89#define RM_EBX_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     90#define RM_ESP_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSP <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     91#define RM_EBP_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBP <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     92#define RM_ESI_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     93#define RM_EDI_DEREF_EBX_DISP8  ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     94
    7895#define RM_EAX_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     96#define RM_ECX_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xCX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     97#define RM_EDX_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     98#define RM_EBX_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBX <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     99#define RM_ESP_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSP <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     100#define RM_EBP_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBP <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     101#define RM_ESI_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     102#define RM_EDI_DEREF_EBX_DISP32 ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI <<  X86_MODRM_REG_SHIFT) | (X86_GREG_xBX))
     103
    79104#define RM_EAX_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | 4)
     105#define RM_ECX_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xCX <<  X86_MODRM_REG_SHIFT) | 4)
     106#define RM_EDX_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDX <<  X86_MODRM_REG_SHIFT) | 4)
     107#define RM_EBX_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBX <<  X86_MODRM_REG_SHIFT) | 4)
     108#define RM_ESP_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSP <<  X86_MODRM_REG_SHIFT) | 4)
     109#define RM_EBP_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBP <<  X86_MODRM_REG_SHIFT) | 4)
     110#define RM_ESI_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI <<  X86_MODRM_REG_SHIFT) | 4)
     111#define RM_EDI_SIB              ((0 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI <<  X86_MODRM_REG_SHIFT) | 4)
     112
    80113#define RM_EAX_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | 4)
     114#define RM_ECX_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xCX <<  X86_MODRM_REG_SHIFT) | 4)
     115#define RM_EDX_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDX <<  X86_MODRM_REG_SHIFT) | 4)
     116#define RM_EBX_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBX <<  X86_MODRM_REG_SHIFT) | 4)
     117#define RM_ESP_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSP <<  X86_MODRM_REG_SHIFT) | 4)
     118#define RM_EBP_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBP <<  X86_MODRM_REG_SHIFT) | 4)
     119#define RM_ESI_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI <<  X86_MODRM_REG_SHIFT) | 4)
     120#define RM_EDI_SIB_DISP8        ((1 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI <<  X86_MODRM_REG_SHIFT) | 4)
     121
    81122#define RM_EAX_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xAX <<  X86_MODRM_REG_SHIFT) | 4)
     123#define RM_ECX_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xCX <<  X86_MODRM_REG_SHIFT) | 4)
     124#define RM_EDX_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDX <<  X86_MODRM_REG_SHIFT) | 4)
     125#define RM_EBX_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBX <<  X86_MODRM_REG_SHIFT) | 4)
     126#define RM_ESP_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSP <<  X86_MODRM_REG_SHIFT) | 4)
     127#define RM_EBP_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xBP <<  X86_MODRM_REG_SHIFT) | 4)
     128#define RM_ESI_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xSI <<  X86_MODRM_REG_SHIFT) | 4)
     129#define RM_EDI_SIB_DISP32       ((2 << X86_MODRM_MOD_SHIFT) | (X86_GREG_xDI <<  X86_MODRM_REG_SHIFT) | 4)
    82130
    83131#define RM_XMM0_XMM1            ((3 << X86_MODRM_MOD_SHIFT) | (0            <<  X86_MODRM_REG_SHIFT) | 1)
     
    311359#define UD_T_MODRM_M        3
    312360#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
     361#define UD_T_MODRM_RR0      0x10
     362#define UD_T_MODRM_RR1      0x11
     363#define UD_T_MODRM_RR2      0x12
     364#define UD_T_MODRM_RR3      0x13
     365#define UD_T_MODRM_RR4      0x14
     366#define UD_T_MODRM_RR5      0x15
     367#define UD_T_MODRM_RR6      0x16
     368#define UD_T_MODRM_RR7      0x17
     369#define UD_T_MODRM_RR0_I8   0x18
     370#define UD_T_MODRM_RR1_I8   0x19
     371#define UD_T_MODRM_RR2_I8   0x1a
     372#define UD_T_MODRM_RR3_I8   0x1b
     373#define UD_T_MODRM_RR4_I8   0x1c
     374#define UD_T_MODRM_RR5_I8   0x1d
     375#define UD_T_MODRM_RR6_I8   0x1e
     376#define UD_T_MODRM_RR7_I8   0x1f
     377#define UD_T_MODRM_MR0      0x20
     378#define UD_T_MODRM_MR1      0x21
     379#define UD_T_MODRM_MR2      0x22
     380#define UD_T_MODRM_MR3      0x23
     381#define UD_T_MODRM_MR4      0x24
     382#define UD_T_MODRM_MR5      0x25
     383#define UD_T_MODRM_MR6      0x26
     384#define UD_T_MODRM_MR7      0x27
    329385
    330386#define UD_F_ANY_PFX 0
     
    341397CPUDECODE1UDTST const g_aUdTest2Byte_0f[] =
    342398{
     399#if 1
    343400    {  UD_T_EXACT, 2, { 0x0f, 0x04 }, UD_F_ANY_PFX },
    344401    {  UD_T_EXACT, 2, { 0x0f, 0x0a }, UD_F_ANY_PFX },
     
    434491    {  UD_T_MODRM, 2, { 0x0f, 0xa6 }, UD_F_ANY_PFX },
    435492    {  UD_T_MODRM, 2, { 0x0f, 0xa7 }, UD_F_ANY_PFX },
     493    {  UD_T_MODRM_MR0, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* fxsave only checks REX.W */
     494    {  UD_T_MODRM_MR1, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* frstor ditto  */
     495    {  UD_T_MODRM_MR2, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* ldmxcsr */
     496    {  UD_T_MODRM_MR3, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* stmxcsr */
     497    {  UD_T_MODRM_MR4, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* xsave */
     498    {  UD_T_MODRM_MR5, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* xrstor */
     499    {  UD_T_MODRM_MR6, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* xsaveopt */
     500    {  UD_T_MODRM_MR7, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX }, /* clflush seems to ignore op size! */
     501    {  UD_T_MODRM_RR0, 2, { 0x0f, 0xae }, UD_F_ANY_PFX }, /* f3=rdfsbase is 64-bit  */
     502    {  UD_T_MODRM_RR1, 2, { 0x0f, 0xae }, UD_F_ANY_PFX }, /* f3=rdfsbase is 64-bit  */
     503    {  UD_T_MODRM_RR2, 2, { 0x0f, 0xae }, UD_F_ANY_PFX }, /* f3=rdfsbase is 64-bit  */
     504    {  UD_T_MODRM_RR3, 2, { 0x0f, 0xae }, UD_F_ANY_PFX }, /* f3=rdfsbase is 64-bit  */
     505    {  UD_T_MODRM_RR4, 2, { 0x0f, 0xae }, UD_F_ANY_PFX }, /* unused */
     506    {  UD_T_MODRM_RR5, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* 00=lfence */
     507    {  UD_T_MODRM_RR6, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* 00=mfence */
     508    {  UD_T_MODRM_RR7, 2, { 0x0f, 0xae }, UD_F_NOT_NO_PFX }, /* 00=sfence */
    436509    {  UD_T_MODRM, 2, { 0x0f, 0xb8 }, UD_F_NOT_RN_PFX },
    437510    /** @todo f3 0f bb rm and f2 0f bb rm does stuff on skylake even if their are blank in intel and AMD tables! */
     
    494567    {  UD_T_MODRM, 2, { 0x0f, 0xfe }, UD_F_NOT_NO_PFX | UD_F_NOT_OZ_PFX },
    495568    {  UD_T_MODRM, 2, { 0x0f, 0xff }, UD_F_ANY_PFX },
     569#endif
    496570};
    497571
     
    883957                { 2, { RM_EDI_EAX, 0x11 },                                  0 },
    884958            };
     959            static CPUDECODE1UDSEQ const s_aModRmMRx[] = /* index*5 */
     960            {
     961                { 2, { RM_EAX_DEREF_EBX_DISP8, 0 },                         0 },
     962                { 5, { RM_EAX_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     963                { 2, { RM_EAX_SIB, SIB_EBX_X1_NONE, },                      0 },
     964                { 3, { RM_EAX_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     965                { 6, { RM_EAX_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     966
     967                { 2, { RM_ECX_DEREF_EBX_DISP8, 0 },                         0 },
     968                { 5, { RM_ECX_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     969                { 2, { RM_ECX_SIB, SIB_EBX_X1_NONE, },                      0 },
     970                { 3, { RM_ECX_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     971                { 6, { RM_ECX_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     972
     973                { 2, { RM_EDX_DEREF_EBX_DISP8, 0 },                         0 },
     974                { 5, { RM_EDX_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     975                { 2, { RM_EDX_SIB, SIB_EBX_X1_NONE, },                      0 },
     976                { 3, { RM_EDX_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     977                { 6, { RM_EDX_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     978
     979                { 2, { RM_EBX_DEREF_EBX_DISP8, 0 },                         0 },
     980                { 5, { RM_EBX_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     981                { 2, { RM_EBX_SIB, SIB_EBX_X1_NONE, },                      0 },
     982                { 3, { RM_EBX_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     983                { 6, { RM_EBX_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     984
     985                { 2, { RM_ESP_DEREF_EBX_DISP8, 0 },                         0 },
     986                { 5, { RM_ESP_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     987                { 2, { RM_ESP_SIB, SIB_EBX_X1_NONE, },                      0 },
     988                { 3, { RM_ESP_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     989                { 6, { RM_ESP_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     990
     991                { 2, { RM_EBP_DEREF_EBX_DISP8, 0 },                         0 },
     992                { 5, { RM_EBP_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     993                { 2, { RM_EBP_SIB, SIB_EBX_X1_NONE, },                      0 },
     994                { 3, { RM_EBP_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     995                { 6, { RM_EBP_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     996
     997                { 2, { RM_ESI_DEREF_EBX_DISP8, 0 },                         0 },
     998                { 5, { RM_ESI_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     999                { 2, { RM_ESI_SIB, SIB_EBX_X1_NONE, },                      0 },
     1000                { 3, { RM_ESI_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     1001                { 6, { RM_ESI_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     1002
     1003                { 2, { RM_EDI_DEREF_EBX_DISP8, 0 },                         0 },
     1004                { 5, { RM_EDI_DEREF_EBX_DISP32, 0, 0, 0, 0 },               0 },
     1005                { 2, { RM_EDI_SIB, SIB_EBX_X1_NONE, },                      0 },
     1006                { 3, { RM_EDI_SIB_DISP8,  SIB_EBX_X1_NONE, 0 },             0 },
     1007                { 6, { RM_EDI_SIB_DISP32, SIB_EBX_X1_NONE, 0, 0, 0, 0 },    0 },
     1008            };
    8851009            unsigned            iPrefix;
    8861010            unsigned            cSuffixes;
     
    9421066                    paSuffixes  = &s_aModRmRRxImm8[paTests[iTest].enmType - UD_T_MODRM_RR0_I8];
    9431067                    break;
     1068                case UD_T_MODRM_MR0:
     1069                case UD_T_MODRM_MR1:
     1070                case UD_T_MODRM_MR2:
     1071                case UD_T_MODRM_MR3:
     1072                case UD_T_MODRM_MR4:
     1073                case UD_T_MODRM_MR5:
     1074                case UD_T_MODRM_MR6:
     1075                case UD_T_MODRM_MR7:
     1076                    cSuffixes   = 5;
     1077                    paSuffixes  = &s_aModRmMRx[(paTests[iTest].enmType - UD_T_MODRM_MR0) * 5];
     1078                    break;
    9441079                default:
    9451080                    Bs3TestPrintf("#%u: enmType=%d\n", paTests[iTest].enmType);
     
    14321567    DecodeUdEdgeTest(g_aUdTest2Byte_0f, RT_ELEMENTS(g_aUdTest2Byte_0f));
    14331568#endif
    1434 #if 0
     1569#if 1
    14351570    Bs3TestSub("3 byte undefined opcodes 0f 38");
    14361571    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