gas/testsuite/
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 23 Feb 2008 17:29:17 +0000 (17:29 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sat, 23 Feb 2008 17:29:17 +0000 (17:29 +0000)
2008-02-23  H.J. Lu  <hongjiu.lu@intel.com>

* gas/i386/jump.s: Add tests for far branches.
* gas/i386/jump16.s: Likewise.

* gas/i386/jump.d: Updated.
* gas/i386/jump16.d: Likewise.
* gas/i386/x86-64-inval.l: Likewise.

* gas/i386/x86-64-inval.s: Add tests for 16-bit near indirect
branches.

opcodes/

2008-02-23  H.J. Lu  <hongjiu.lu@intel.com>

* i386-opc.tbl: Disallow 16-bit near indirect branches for
x86-64.
* i386-tbl.h: Regenerated.

gas/testsuite/ChangeLog
gas/testsuite/gas/i386/jump.d
gas/testsuite/gas/i386/jump.s
gas/testsuite/gas/i386/jump16.d
gas/testsuite/gas/i386/jump16.s
gas/testsuite/gas/i386/x86-64-inval.l
gas/testsuite/gas/i386/x86-64-inval.s
opcodes/ChangeLog
opcodes/i386-opc.tbl
opcodes/i386-tbl.h

index 63375baf7737243c5987d2978a2075c56b65f0f2..f3465f8bd0d7b512e68f99aacfe13f908fae9401 100644 (file)
@@ -1,3 +1,15 @@
+2008-02-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gas/i386/jump.s: Add tests for far branches.
+       * gas/i386/jump16.s: Likewise.
+
+       * gas/i386/jump.d: Updated.
+       * gas/i386/jump16.d: Likewise.
+       * gas/i386/x86-64-inval.l: Likewise.
+
+       * gas/i386/x86-64-inval.s: Add tests for 16-bit near indirect
+       branches.
+
 2008-02-22  Nick Clifton  <nickc@redhat.com>
 
        * gas/m68hc11/bug-1825.d: Update to match changes in the
index cddd4a3c74aaeaef45e3dd4361541b4f6d2c97b4..c8e8c6d273db156358acbdabf69a0345307713c0 100644 (file)
@@ -5,22 +5,31 @@
 
 Disassembly of section .text:
 
-0+000 <.text>:
-   0:  eb fe [         ]*jmp    (0x0|0 <.text>)
-   2:  e9 ((fc|f9) ff ff ff|00 00 00 00) [     ]*jmp    (0x)?(0|3|7)( <.text(\+0x7)?>)?        3: (R_386_PC)?(DISP)?32 xxx
-   7:  ff 25 00 00 00 00 [     ]*jmp    \*0x0  9: (R_386_)?(dir)?32    xxx
-   d:  ff e7 [         ]*jmp    \*%edi
-   f:  ff 27 [         ]*jmp    \*\(%edi\)
-  11:  ff 2c bd 00 00 00 00 [  ]*ljmp   \*0x0\(,%edi,4\)       14: (R_386_)?(dir)?32   xxx
-  18:  ff 2d 00 00 00 00 [     ]*ljmp   \*0x0  1a: (R_386_)?(dir)?32   xxx
-  1e:  ea 00 00 00 00 34 12 [  ]*ljmp   \$0x1234,\$0x0 1f: (R_386_)?(dir)?32   xxx
-  25:  e8 d6 ff ff ff [        ]*call   (0x0|0 <.text>)
-  2a:  e8 ((fc|d1) ff ff ff|00 00 00 00) [     ]*call   (0x)?(0|2b|2f)( <.text(\+0x2f)?>)?     2b: (R_386_PC)?(DISP)?32        xxx
-  2f:  ff 15 00 00 00 00 [     ]*call   \*0x0  31: (R_386_)?(dir)?32   xxx
-  35:  ff d7 [         ]*call   \*%edi
-  37:  ff 17 [         ]*call   \*\(%edi\)
-  39:  ff 1c bd 00 00 00 00 [  ]*lcall  \*0x0\(,%edi,4\)       3c: (R_386_)?(dir)?32   xxx
-  40:  ff 1d 00 00 00 00 [     ]*lcall  \*0x0  42: (R_386_)?(dir)?32   xxx
-  46:  9a 00 00 00 00 34 12 [  ]*lcall  \$0x1234,\$0x0 47: (R_386_)?(dir)?32   xxx
-  4d:.*
-.*
+0+ <.text>:
+[      ]*[a-f0-9]+:    eb fe                   jmp    0x0
+[      ]*[a-f0-9]+:    e9 fc ff ff ff          jmp    0x3      3: R_386_PC32   xxx
+[      ]*[a-f0-9]+:    ff 25 00 00 00 00       jmp    \*0x0    9: R_386_32     xxx
+[      ]*[a-f0-9]+:    ff e7                   jmp    \*%edi
+[      ]*[a-f0-9]+:    ff 27                   jmp    \*\(%edi\)
+[      ]*[a-f0-9]+:    ff 2c bd 00 00 00 00    ljmp   \*0x0\(,%edi,4\) 14: R_386_32    xxx
+[      ]*[a-f0-9]+:    66 ff 2c bd 00 00 00 00         ljmpw  \*0x0\(,%edi,4\) 1c: R_386_32    xxx
+[      ]*[a-f0-9]+:    ff 2d 00 00 00 00       ljmp   \*0x0    22: R_386_32    xxx
+[      ]*[a-f0-9]+:    66 ff 2d 00 00 00 00    ljmpw  \*0x0    29: R_386_32    xxx
+[      ]*[a-f0-9]+:    ea 00 00 00 00 34 12    ljmp   \$0x1234,\$0x0   2e: R_386_32    xxx
+[      ]*[a-f0-9]+:    e8 c7 ff ff ff          call   0x0
+[      ]*[a-f0-9]+:    e8 fc ff ff ff          call   0x3a     3a: R_386_PC32  xxx
+[      ]*[a-f0-9]+:    ff 15 00 00 00 00       call   \*0x0    40: R_386_32    xxx
+[      ]*[a-f0-9]+:    ff d7                   call   \*%edi
+[      ]*[a-f0-9]+:    ff 17                   call   \*\(%edi\)
+[      ]*[a-f0-9]+:    ff 1c bd 00 00 00 00    lcall  \*0x0\(,%edi,4\) 4b: R_386_32    xxx
+[      ]*[a-f0-9]+:    66 ff 1c bd 00 00 00 00         lcallw \*0x0\(,%edi,4\) 53: R_386_32    xxx
+[      ]*[a-f0-9]+:    ff 1d 00 00 00 00       lcall  \*0x0    59: R_386_32    xxx
+[      ]*[a-f0-9]+:    66 ff 1d 00 00 00 00    lcallw \*0x0    60: R_386_32    xxx
+[      ]*[a-f0-9]+:    9a 00 00 00 00 34 12    lcall  \$0x1234,\$0x0   65: R_386_32    xxx
+[      ]*[a-f0-9]+:    66 ff 13                callw  \*\(%ebx\)
+[      ]*[a-f0-9]+:    ff 13                   call   \*\(%ebx\)
+[      ]*[a-f0-9]+:    ff 1b                   lcall  \*\(%ebx\)
+[      ]*[a-f0-9]+:    66 ff 23                jmpw   \*\(%ebx\)
+[      ]*[a-f0-9]+:    ff 23                   jmp    \*\(%ebx\)
+[      ]*[a-f0-9]+:    ff 2b                   ljmp   \*\(%ebx\)
+#pass
index 1f11cd317b78662eed89b413e38b7c4429c18bac..b7608255c1ce0593935dd7710683432da7127dce 100644 (file)
@@ -8,7 +8,9 @@
        jmp     *%edi
        jmp     *(%edi)
        ljmp    *xxx(,%edi,4)
+       ljmpw   *xxx(,%edi,4)
        ljmp    *xxx
+       ljmpw   *xxx
        ljmp    $0x1234,$xxx
 
        call    1b
        call    *%edi
        call    *(%edi)
        lcall   *xxx(,%edi,4)
+       lcallw  *xxx(,%edi,4)
        lcall   *xxx
+       lcallw  *xxx
        lcall   $0x1234,$xxx
 
-       # Force a good alignment.
-       .p2align        4,0
+       .intel_syntax noprefix
+       call    word ptr [ebx]
+       call    dword ptr [ebx]
+       call    fword ptr [ebx]
+       jmp     word ptr [ebx]
+       jmp     dword ptr [ebx]
+       jmp     fword ptr [ebx]
index 87951effa5765edeb94ec5ef7e090ebbe82f947a..b2903d764a8ef61eec1878f516bfa7e198cf74e9 100644 (file)
@@ -5,36 +5,46 @@
 
 Disassembly of section .text:
 
-0+000 <.text>:
-   0:  eb fe [         ]*jmp    (0x0|0 <.text>)
-   2:  e9 (fe|fb) ff [         ]*jmp    (0x3|0x0|0 <.text>)    3: (R_386_PC)?(DISP)?16 xxx
-   5:  ff 26 00 00 [   ]*jmp    \*0x0  7: (R_386_)?(dir)?16    xxx
-   9:  66 ff e7 [      ]*jmpl   \*%edi
-   c:  67 ff 27 [      ]*addr32 jmp \*\(%edi\)
-   f:  67 ff af 00 00 00 00 [  ]*addr32 ljmp \*0x0\(%edi\)     12: (R_386_)?(dir)?32   xxx
-  16:  ff 2e 00 00 [   ]*ljmp   \*0x0  18: (R_386_)?(dir)?16   xxx
-  1a:  ea 00 00 34 12 [        ]*ljmp   \$0x1234,\$0x0 1b: (R_386_)?(dir)?16   xxx
-  1f:  66 e8 db ff ff ff [     ]*calll  (0x0|0 <.text>)
-  25:  66 e8 (fc|d5) ff ff ff [        ]*calll  (0x27|0x0|0 <.text>)   27: (R_386_PC)?(DISP)?32        xxx
-  2b:  66 ff 16 00 00 [        ]*calll  \*0x0  2e: (R_386_)?(dir)?16   xxx
-  30:  66 ff d7 [      ]*calll  \*%edi
-  33:  67 66 ff 17 [   ]*addr32 calll \*\(%edi\)
-  37:  67 66 ff 9f 00 00 00 00 [       ]*addr32 lcalll \*0x0\(%edi\)   3b: (R_386_)?(dir)?32   xxx
-  3f:  66 ff 1e 00 00 [        ]*lcalll \*0x0  42: (R_386_)?(dir)?16   xxx
-  44:  66 9a 00 00 00 00 34 12 [       ]*lcalll \$0x1234,\$0x0 46: (R_386_)?(dir)?32   xxx
-  4c:  eb b2 [         ]*jmp    (0x0|0 <.text>)
-  4e:  ff 26 00 00 [   ]*jmp    \*0x0  50: (R_386_)?(dir)?16   xxx
-  52:  ff e7 [         ]*jmp    \*%di
-  54:  ff 25 [         ]*jmp    \*\(%di\)
-  56:  ff ad 00 00 [   ]*ljmp   \*0x0\(%di\)   58: (R_386_)?(dir)?16   xxx
-  5a:  ff 2e 00 00 [   ]*ljmp   \*0x0  5c: (R_386_)?(dir)?16   xxx
-  5e:  ea 00 00 34 12 [        ]*ljmp   \$0x1234,\$0x0 5f: (R_386_)?(dir)?16   xxx
-  63:  e8 9a ff [      ]*call   (0x0|0 <.text>)
-  66:  e8 (fe|97) ff [         ]*call   (0x67|0x0|0 <.text>)   67: (R_386_PC)?(DISP)?16        xxx
-  69:  ff 16 00 00 [   ]*call   \*0x0  6b: (R_386_)?(dir)?16   xxx
-  6d:  ff d7 [         ]*call   \*%di
-  6f:  ff 15 [         ]*call   \*\(%di\)
-  71:  ff 9d 00 00 [   ]*lcall  \*0x0\(%di\)   73: (R_386_)?(dir)?16   xxx
-  75:  ff 1e 00 00 [   ]*lcall  \*0x0  77: (R_386_)?(dir)?16   xxx
-  79:  9a 00 00 34 12 [        ]*lcall  \$0x1234,\$0x0 7a: (R_386_)?(dir)?16   xxx
-       ...
+0+ <.text>:
+[      ]*[a-f0-9]+:    eb fe                   jmp    0x0
+[      ]*[a-f0-9]+:    e9 fe ff                jmp    0x3      3: R_386_PC16   xxx
+[      ]*[a-f0-9]+:    ff 26 00 00             jmp    \*0x0    7: R_386_16     xxx
+[      ]*[a-f0-9]+:    66 ff e7                jmpl   \*%edi
+[      ]*[a-f0-9]+:    67 ff 27                addr32 jmp \*\(%edi\)
+[      ]*[a-f0-9]+:    67 ff af 00 00 00 00    addr32 ljmp \*0x0\(%edi\)       12: R_386_32    xxx
+[      ]*[a-f0-9]+:    ff 2e 00 00             ljmp   \*0x0    18: R_386_16    xxx
+[      ]*[a-f0-9]+:    ea 00 00 34 12          ljmp   \$0x1234,\$0x0   1b: R_386_16    xxx
+[      ]*[a-f0-9]+:    66 e8 db ff ff ff       calll  0x0
+[      ]*[a-f0-9]+:    66 e8 fc ff ff ff       calll  0x27     27: R_386_PC32  xxx
+[      ]*[a-f0-9]+:    66 ff 16 00 00          calll  \*0x0    2e: R_386_16    xxx
+[      ]*[a-f0-9]+:    66 ff d7                calll  \*%edi
+[      ]*[a-f0-9]+:    67 66 ff 17             addr32 calll \*\(%edi\)
+[      ]*[a-f0-9]+:    67 66 ff 9f 00 00 00 00         addr32 lcalll \*0x0\(%edi\)     3b: R_386_32    xxx
+[      ]*[a-f0-9]+:    66 ff 1e 00 00          lcalll \*0x0    42: R_386_16    xxx
+[      ]*[a-f0-9]+:    66 9a 00 00 00 00 34 12         lcalll \$0x1234,\$0x0   46: R_386_32    xxx
+[      ]*[a-f0-9]+:    eb b2                   jmp    0x0
+[      ]*[a-f0-9]+:    ff 26 00 00             jmp    \*0x0    50: R_386_16    xxx
+[      ]*[a-f0-9]+:    ff e7                   jmp    \*%di
+[      ]*[a-f0-9]+:    ff 25                   jmp    \*\(%di\)
+[      ]*[a-f0-9]+:    ff ad 00 00             ljmp   \*0x0\(%di\)     58: R_386_16    xxx
+[      ]*[a-f0-9]+:    66 ff ad 00 00          ljmpl  \*0x0\(%di\)     5d: R_386_16    xxx
+[      ]*[a-f0-9]+:    ff 2e 00 00             ljmp   \*0x0    61: R_386_16    xxx
+[      ]*[a-f0-9]+:    66 ff 2e 00 00          ljmpl  \*0x0    66: R_386_16    xxx
+[      ]*[a-f0-9]+:    ea 00 00 34 12          ljmp   \$0x1234,\$0x0   69: R_386_16    xxx
+[      ]*[a-f0-9]+:    e8 90 ff                call   0x0
+[      ]*[a-f0-9]+:    e8 fe ff                call   0x71     71: R_386_PC16  xxx
+[      ]*[a-f0-9]+:    ff 16 00 00             call   \*0x0    75: R_386_16    xxx
+[      ]*[a-f0-9]+:    ff d7                   call   \*%di
+[      ]*[a-f0-9]+:    ff 15                   call   \*\(%di\)
+[      ]*[a-f0-9]+:    ff 9d 00 00             lcall  \*0x0\(%di\)     7d: R_386_16    xxx
+[      ]*[a-f0-9]+:    66 ff 9d 00 00          lcalll \*0x0\(%di\)     82: R_386_16    xxx
+[      ]*[a-f0-9]+:    ff 1e 00 00             lcall  \*0x0    86: R_386_16    xxx
+[      ]*[a-f0-9]+:    66 ff 1e 00 00          lcalll \*0x0    8b: R_386_16    xxx
+[      ]*[a-f0-9]+:    9a 00 00 34 12          lcall  \$0x1234,\$0x0   8e: R_386_16    xxx
+[      ]*[a-f0-9]+:    ff 17                   call   \*\(%bx\)
+[      ]*[a-f0-9]+:    ff 1f                   lcall  \*\(%bx\)
+[      ]*[a-f0-9]+:    66 ff 1f                lcalll \*\(%bx\)
+[      ]*[a-f0-9]+:    ff 27                   jmp    \*\(%bx\)
+[      ]*[a-f0-9]+:    ff 2f                   ljmp   \*\(%bx\)
+[      ]*[a-f0-9]+:    66 ff 2f                ljmpl  \*\(%bx\)
+#pass
index 1eee2427339d4be38dada7a9cb3985ad7fccc97d..d6238b8639a1d492e2c56fd8416454f363c1e1fd 100644 (file)
@@ -27,7 +27,9 @@
        jmp     *%di
        jmp     *(%di)
        ljmp    *xxx(%di)
+       ljmpl   *xxx(%di)
        ljmp    *xxx
+       ljmpl   *xxx
        ljmp    $0x1234,$xxx
 
        call    1b
        call    *%di
        call    *(%di)
        lcall   *xxx(%di)
+       lcalll  *xxx(%di)
        lcall   *xxx
+       lcalll  *xxx
        lcall   $0x1234,$xxx
 
-       # Force a good alignment.
-       .p2align        4,0
+       .intel_syntax noprefix
+       call    word ptr [bx]
+       call    dword ptr [bx]
+       call    fword ptr [bx]
+       jmp     word ptr [bx]
+       jmp     dword ptr [bx]
+       jmp     fword ptr [bx]
index fe684d78833654b8c2afc843c0f0267657587519..c663a12df4507dbba2b0a92a91da6895adcc6055 100644 (file)
@@ -58,6 +58,8 @@
 .*:59: Error: .*
 .*:60: Error: .*
 .*:61: Error: .*
+.*:62: Error: .*
+.*:63: Error: .*
 .*:64: Error: .*
 .*:65: Error: .*
 .*:66: Error: .*
@@ -69,8 +71,6 @@
 .*:72: Error: .*
 .*:73: Error: .*
 .*:74: Error: .*
-.*:75: Error: .*
-.*:76: Error: .*
 .*:77: Error: .*
 .*:78: Error: .*
 .*:79: Error: .*
 .*:83: Error: .*
 .*:84: Error: .*
 .*:85: Error: .*
+.*:86: Error: .*
+.*:87: Error: .*
+.*:88: Error: .*
+.*:89: Error: .*
+.*:90: Error: .*
+.*:91: Error: .*
+.*:92: Error: .*
+.*:93: Error: .*
+.*:94: Error: .*
+.*:95: Error: .*
+.*:96: Error: .*
+.*:97: Error: .*
+.*:98: Error: .*
+.*:99: Error: .*
+.*:100: Error: .*
+.*:101: Error: .*
+.*:102: Error: .*
+.*:103: Error: .*
+.*:104: Error: .*
+.*:105: Error: .*
+.*:106: Error: .*
+.*:107: Error: .*
+.*:108: Error: .*
+.*:109: Error: .*
+.*:110: Error: .*
+.*:111: Error: .*
+.*:112: Error: .*
+.*:113: Error: .*
+.*:114: Error: .*
+.*:115: Error: .*
+.*:116: Error: .*
+.*:117: Error: .*
+.*:118: Error: .*
+.*:119: Error: .*
+.*:120: Error: .*
 GAS LISTING .*
 
 
@@ -96,78 +131,116 @@ GAS LISTING .*
 [      ]*11[   ]+calll \*\(%eax\)      \# 32-bit data size not allowed
 [      ]*12[   ]+calll \*\(%r8\)       \# 32-bit data size not allowed
 [      ]*13[   ]+calll \*\(%rax\)      \# 32-bit data size not allowed
-[      ]*14[   ]+callq \*\(%ax\)       \# 32-bit data size not allowed
-[      ]*15[   ]+callw \*\(%ax\)       \# no 16-bit addressing
-[      ]*16[   ]+daa           \# illegal
-[      ]*17[   ]+das           \# illegal
-[      ]*18[   ]+enterl \$0,\$0        \# can't have 32-bit stack operands
-[      ]*19[   ]+into          \# illegal
-[      ]*20[   ]+foo:  jcxz foo        \# No prefix exists to select CX as a counter
-[      ]*21[   ]+jmpl \*%eax   \# 32-bit data size not allowed
-[      ]*22[   ]+jmpl \*\(%rax\)       \# 32-bit data size not allowed
-[      ]*23[   ]+lcalll \$0,\$0        \# illegal
-[      ]*24[   ]+lcallq \$0,\$0        \# illegal
-[      ]*25[   ]+ldsl %eax,\(%rax\) \# illegal
-[      ]*26[   ]+ldsq %rax,\(%rax\) \# illegal
-[      ]*27[   ]+lesl %eax,\(%rax\) \# illegal
-[      ]*28[   ]+lesq %rax,\(%rax\) \# illegal
-[      ]*29[   ]+ljmpl \$0,\$0 \# illegal
-[      ]*30[   ]+ljmpq \$0,\$0 \# illegal
-[      ]*31[   ]+ljmpq \*\(%rax\)      \# 64-bit data size not allowed
-[      ]*32[   ]+loopw foo     \# No prefix exists to select CX as a counter
-[      ]*33[   ]+loopew foo    \# No prefix exists to select CX as a counter
-[      ]*34[   ]+loopnew foo   \# No prefix exists to select CX as a counter
-[      ]*35[   ]+loopnzw foo   \# No prefix exists to select CX as a counter
-[      ]*36[   ]+loopzw foo    \# No prefix exists to select CX as a counter
-[      ]*37[   ]+leavel                \# can't have 32-bit stack operands
-[      ]*38[   ]+pop %ds               \# illegal
-[      ]*39[   ]+pop %es               \# illegal
-[      ]*40[   ]+pop %ss               \# illegal
-[      ]*41[   ]+popa          \# illegal
-[      ]*42[   ]+popl %eax     \# can't have 32-bit stack operands
-[      ]*43[   ]+push %cs      \# illegal
-[      ]*44[   ]+push %ds      \# illegal
-[      ]*45[   ]+push %es      \# illegal
-[      ]*46[   ]+push %ss      \# illegal
-[      ]*47[   ]+pusha         \# illegal
-[      ]*48[   ]+pushl %eax    \# can't have 32-bit stack operands
-[      ]*49[   ]+pushfl                \# can't have 32-bit stack operands
-[      ]*50[   ]+popfl         \# can't have 32-bit stack operands
-[      ]*51[   ]+retl          \# can't have 32-bit stack operands
-[      ]*52[   ]+insertq \$4,\$2,%xmm2,%ebx \# The last operand must be XMM register\.
-[      ]*53[   ]+fnstsw %eax
-[      ]*54[   ]+fnstsw %al
-[      ]*55[   ]+fstsw %eax
-[      ]*56[   ]+fstsw %al
-[      ]*57[   ]+in \$8,%rax
+[      ]*14[   ]+callw \*%ax   \# 16-bit data size not allowed
+[      ]*15[   ]+callw \*\(%ax\)       \# 16-bit data size not allowed
+[      ]*16[   ]+callw \*\(%eax\)      \# 16-bit data size not allowed
+[      ]*17[   ]+callw \*\(%r8\)       \# 16-bit data size not allowed
+[      ]*18[   ]+callw \*\(%rax\)      \# 16-bit data size not allowed
+[      ]*19[   ]+callq \*\(%ax\)       \# no 16-bit addressing
+[      ]*20[   ]+daa           \# illegal
+[      ]*21[   ]+das           \# illegal
+[      ]*22[   ]+enterl \$0,\$0        \# can't have 32-bit stack operands
+[      ]*23[   ]+into          \# illegal
+[      ]*24[   ]+foo:  jcxz foo        \# No prefix exists to select CX as a counter
+[      ]*25[   ]+jmpl \*%eax   \# 32-bit data size not allowed
+[      ]*26[   ]+jmpl \*\(%ax\)        \# 32-bit data size not allowed
+[      ]*27[   ]+jmpl \*\(%eax\)       \# 32-bit data size not allowed
+[      ]*28[   ]+jmpl \*\(%r8\)        \# 32-bit data size not allowed
+[      ]*29[   ]+jmpl \*\(%rax\)       \# 32-bit data size not allowed
+[      ]*30[   ]+jmpw \*%ax    \# 16-bit data size not allowed
+[      ]*31[   ]+jmpw \*\(%ax\)        \# 16-bit data size not allowed
+[      ]*32[   ]+jmpw \*\(%eax\)       \# 16-bit data size not allowed
+[      ]*33[   ]+jmpw \*\(%r8\)        \# 16-bit data size not allowed
+[      ]*34[   ]+jmpw \*\(%rax\)       \# 16-bit data size not allowed
+[      ]*35[   ]+jmpq \*\(%ax\)        \# no 16-bit addressing
+[      ]*36[   ]+lcalll \$0,\$0        \# illegal
+[      ]*37[   ]+lcallq \$0,\$0        \# illegal
+[      ]*38[   ]+ldsl %eax,\(%rax\) \# illegal
+[      ]*39[   ]+ldsq %rax,\(%rax\) \# illegal
+[      ]*40[   ]+lesl %eax,\(%rax\) \# illegal
+[      ]*41[   ]+lesq %rax,\(%rax\) \# illegal
+[      ]*42[   ]+ljmpl \$0,\$0 \# illegal
+[      ]*43[   ]+ljmpq \$0,\$0 \# illegal
+[      ]*44[   ]+ljmpq \*\(%rax\)      \# 64-bit data size not allowed
+[      ]*45[   ]+loopw foo     \# No prefix exists to select CX as a counter
+[      ]*46[   ]+loopew foo    \# No prefix exists to select CX as a counter
+[      ]*47[   ]+loopnew foo   \# No prefix exists to select CX as a counter
+[      ]*48[   ]+loopnzw foo   \# No prefix exists to select CX as a counter
+[      ]*49[   ]+loopzw foo    \# No prefix exists to select CX as a counter
+[      ]*50[   ]+leavel                \# can't have 32-bit stack operands
+[      ]*51[   ]+pop %ds               \# illegal
+[      ]*52[   ]+pop %es               \# illegal
+[      ]*53[   ]+pop %ss               \# illegal
+[      ]*54[   ]+popa          \# illegal
+[      ]*55[   ]+popl %eax     \# can't have 32-bit stack operands
+[      ]*56[   ]+push %cs      \# illegal
+[      ]*57[   ]+push %ds      \# illegal
 \fGAS LISTING .*
 
 
-[      ]*58[   ]+out %rax,\$8
-[      ]*59[   ]+movzxl \(%rax\),%rax
-[      ]*60[   ]+movnti %ax, \(%rax\)
-[      ]*61[   ]+movntiw %ax, \(%rax\)
-[      ]*62[   ]+
-[      ]*63[   ]+\.intel_syntax noprefix
-[      ]*64[   ]+cmpxchg16b dword ptr \[rax\] \# Must be oword
-[      ]*65[   ]+movq xmm1, XMMWORD PTR \[rsp\]
-[      ]*66[   ]+movq xmm1, DWORD PTR \[rsp\]
-[      ]*67[   ]+movq xmm1, WORD PTR \[rsp\]
-[      ]*68[   ]+movq xmm1, BYTE PTR \[rsp\]
-[      ]*69[   ]+movq XMMWORD PTR \[rsp\],xmm1
-[      ]*70[   ]+movq DWORD PTR \[rsp\],xmm1
-[      ]*71[   ]+movq WORD PTR \[rsp\],xmm1
-[      ]*72[   ]+movq BYTE PTR \[rsp\],xmm1
-[      ]*73[   ]+fnstsw eax
-[      ]*74[   ]+fnstsw al
-[      ]*75[   ]+fstsw eax
-[      ]*76[   ]+fstsw al
-[      ]*77[   ]+in rax,8
-[      ]*78[   ]+out 8,rax
-[      ]*79[   ]+movsx ax, \[rax\]
-[      ]*80[   ]+movsx eax, \[rax\]
-[      ]*81[   ]+movsx rax, \[rax\]
-[      ]*82[   ]+movzx ax, \[rax\]
-[      ]*83[   ]+movzx eax, \[rax\]
-[      ]*84[   ]+movzx rax, \[rax\]
-[      ]*85[   ]+movnti word ptr \[rax\], ax
+[      ]*58[   ]+push %es      \# illegal
+[      ]*59[   ]+push %ss      \# illegal
+[      ]*60[   ]+pusha         \# illegal
+[      ]*61[   ]+pushl %eax    \# can't have 32-bit stack operands
+[      ]*62[   ]+pushfl                \# can't have 32-bit stack operands
+[      ]*63[   ]+popfl         \# can't have 32-bit stack operands
+[      ]*64[   ]+retl          \# can't have 32-bit stack operands
+[      ]*65[   ]+insertq \$4,\$2,%xmm2,%ebx \# The last operand must be XMM register\.
+[      ]*66[   ]+fnstsw %eax
+[      ]*67[   ]+fnstsw %al
+[      ]*68[   ]+fstsw %eax
+[      ]*69[   ]+fstsw %al
+[      ]*70[   ]+in \$8,%rax
+[      ]*71[   ]+out %rax,\$8
+[      ]*72[   ]+movzxl \(%rax\),%rax
+[      ]*73[   ]+movnti %ax, \(%rax\)
+[      ]*74[   ]+movntiw %ax, \(%rax\)
+[      ]*75[   ]+
+[      ]*76[   ]+\.intel_syntax noprefix
+[      ]*77[   ]+cmpxchg16b dword ptr \[rax\] \# Must be oword
+[      ]*78[   ]+movq xmm1, XMMWORD PTR \[rsp\]
+[      ]*79[   ]+movq xmm1, DWORD PTR \[rsp\]
+[      ]*80[   ]+movq xmm1, WORD PTR \[rsp\]
+[      ]*81[   ]+movq xmm1, BYTE PTR \[rsp\]
+[      ]*82[   ]+movq XMMWORD PTR \[rsp\],xmm1
+[      ]*83[   ]+movq DWORD PTR \[rsp\],xmm1
+[      ]*84[   ]+movq WORD PTR \[rsp\],xmm1
+[      ]*85[   ]+movq BYTE PTR \[rsp\],xmm1
+[      ]*86[   ]+fnstsw eax
+[      ]*87[   ]+fnstsw al
+[      ]*88[   ]+fstsw eax
+[      ]*89[   ]+fstsw al
+[      ]*90[   ]+in rax,8
+[      ]*91[   ]+out 8,rax
+[      ]*92[   ]+movsx ax, \[rax\]
+[      ]*93[   ]+movsx eax, \[rax\]
+[      ]*94[   ]+movsx rax, \[rax\]
+[      ]*95[   ]+movzx ax, \[rax\]
+[      ]*96[   ]+movzx eax, \[rax\]
+[      ]*97[   ]+movzx rax, \[rax\]
+[      ]*98[   ]+movnti word ptr \[rax\], ax
+[      ]*99[   ]+calld eax     \# 32-bit data size not allowed
+[      ]*100[  ]+calld \[ax\]  \# 32-bit data size not allowed
+[      ]*101[  ]+calld \[eax\] \# 32-bit data size not allowed
+[      ]*102[  ]+calld \[r8\]  \# 32-bit data size not allowed
+[      ]*103[  ]+calld \[rax\] \# 32-bit data size not allowed
+[      ]*104[  ]+callw ax      \# 16-bit data size not allowed
+[      ]*105[  ]+callw \[ax\]  \# 16-bit data size not allowed
+[      ]*106[  ]+callw \[eax\] \# 16-bit data size not allowed
+[      ]*107[  ]+callw \[r8\]  \# 16-bit data size not allowed
+[      ]*108[  ]+callw \[rax\] \# 16-bit data size not allowed
+[      ]*109[  ]+callq \[ax\]  \# no 16-bit addressing
+[      ]*110[  ]+jmpd eax      \# 32-bit data size not allowed
+[      ]*111[  ]+jmpd \[ax\]   \# 32-bit data size not allowed
+[      ]*112[  ]+jmpd \[eax\]  \# 32-bit data size not allowed
+[      ]*113[  ]+jmpd \[r8\]   \# 32-bit data size not allowed
+[      ]*114[  ]+jmpd \[rax\]  \# 32-bit data size not allowed
+\fGAS LISTING .*
+
+
+[      ]*115[  ]+jmpw ax               \# 16-bit data size not allowed
+[      ]*116[  ]+jmpw \[ax\]   \# 16-bit data size not allowed
+[      ]*117[  ]+jmpw \[eax\]  \# 16-bit data size not allowed
+[      ]*118[  ]+jmpw \[r8\]   \# 16-bit data size not allowed
+[      ]*119[  ]+jmpw \[rax\]  \# 16-bit data size not allowed
+[      ]*120[  ]+jmpq \[ax\]   \# no 16-bit addressing
index b604e46259ba83d8530f8662f58ba45e3298e0fa..2688ace090414171ffe6148fc26c4bca51d8f9c6 100644 (file)
         calll *(%eax)  # 32-bit data size not allowed
         calll *(%r8)   # 32-bit data size not allowed
         calll *(%rax)  # 32-bit data size not allowed
-        callq *(%ax)   # 32-bit data size not allowed
-        callw *(%ax)   # no 16-bit addressing
+       callw *%ax      # 16-bit data size not allowed
+       callw *(%ax)    # 16-bit data size not allowed
+       callw *(%eax)   # 16-bit data size not allowed
+       callw *(%r8)    # 16-bit data size not allowed
+       callw *(%rax)   # 16-bit data size not allowed
+       callq *(%ax)    # no 16-bit addressing
         daa            # illegal
         das            # illegal
         enterl $0,$0   # can't have 32-bit stack operands
         into           # illegal
 foo:   jcxz foo        # No prefix exists to select CX as a counter
        jmpl *%eax      # 32-bit data size not allowed
-        jmpl *(%rax)   # 32-bit data size not allowed
+       jmpl *(%ax)     # 32-bit data size not allowed
+       jmpl *(%eax)    # 32-bit data size not allowed
+       jmpl *(%r8)     # 32-bit data size not allowed
+       jmpl *(%rax)    # 32-bit data size not allowed
+       jmpw *%ax       # 16-bit data size not allowed
+       jmpw *(%ax)     # 16-bit data size not allowed
+       jmpw *(%eax)    # 16-bit data size not allowed
+       jmpw *(%r8)     # 16-bit data size not allowed
+       jmpw *(%rax)    # 16-bit data size not allowed
+       jmpq *(%ax)     # no 16-bit addressing
         lcalll $0,$0   # illegal
         lcallq $0,$0   # illegal
         ldsl %eax,(%rax) # illegal
@@ -83,3 +96,25 @@ movzx ax, [rax]
 movzx eax, [rax]
 movzx rax, [rax]
 movnti word ptr [rax], ax
+       calld eax       # 32-bit data size not allowed
+       calld [ax]      # 32-bit data size not allowed
+       calld [eax]     # 32-bit data size not allowed
+       calld [r8]      # 32-bit data size not allowed
+       calld [rax]     # 32-bit data size not allowed
+       callw ax        # 16-bit data size not allowed
+       callw [ax]      # 16-bit data size not allowed
+       callw [eax]     # 16-bit data size not allowed
+       callw [r8]      # 16-bit data size not allowed
+       callw [rax]     # 16-bit data size not allowed
+       callq [ax]      # no 16-bit addressing
+       jmpd eax        # 32-bit data size not allowed
+       jmpd [ax]       # 32-bit data size not allowed
+       jmpd [eax]      # 32-bit data size not allowed
+       jmpd [r8]       # 32-bit data size not allowed
+       jmpd [rax]      # 32-bit data size not allowed
+       jmpw ax         # 16-bit data size not allowed
+       jmpw [ax]       # 16-bit data size not allowed
+       jmpw [eax]      # 16-bit data size not allowed
+       jmpw [r8]       # 16-bit data size not allowed
+       jmpw [rax]      # 16-bit data size not allowed
+       jmpq [ax]       # no 16-bit addressing
index 620fb808550af9aa9d678fe57ba980d5361a948d..c0a83c45b0bdcda372d5fb0dd6e27ab8cd7af2e9 100644 (file)
@@ -1,3 +1,9 @@
+2008-02-23  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * i386-opc.tbl: Disallow 16-bit near indirect branches for
+       x86-64.
+       * i386-tbl.h: Regenerated.
+
 2008-02-21  Jan Beulich  <jbeulich@novell.com>
 
        * i386-opc.tbl: Allow Dword for far indirect call. Allow Dword
index cfb31f1b2a428defed46149db65d678c2bb1e04b..2fec30aab04c3ffec69009f0318d2941831ff0ee 100644 (file)
@@ -318,7 +318,7 @@ shrd, 2, 0xfad, None, 2, Cpu386, Modrm|No_bSuf|No_sSuf|No_ldSuf, { Reg16|Reg32|R
 call, 1, 0xe8, None, 1, CpuNo64, JumpDword|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp16|Disp32 }
 call, 1, 0xe8, None, 1, Cpu64, JumpDword|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Disp16|Disp32 }
 call, 1, 0xff, 0x2, 1, CpuNo64, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|JumpAbsolute }
-call, 1, 0xff, 0x2, 1, Cpu64, Modrm|DefaultSize|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute }
+call, 1, 0xff, 0x2, 1, Cpu64, Modrm|DefaultSize|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg64|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute }
 // Intel Syntax
 call, 2, 0x9a, None, 1, CpuNo64, JumpInterSegment|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 }
 // Intel Syntax
@@ -328,7 +328,7 @@ lcall, 1, 0xff, 0x3, 1, 0, Modrm|DefaultSize|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, {
 
 jmp, 1, 0xeb, None, 1, 0, Jump|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Disp8|Disp16|Disp32|Disp32S|Disp64 }
 jmp, 1, 0xff, 0x4, 1, CpuNo64, Modrm|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg16|Reg32|Word|Dword|Unspecified|BaseIndex|Disp8|Disp16|Disp32|JumpAbsolute }
-jmp, 1, 0xff, 0x4, 1, Cpu64, Modrm|No_bSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg16|Reg64|Word|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute }
+jmp, 1, 0xff, 0x4, 1, Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_ldSuf|NoRex64, { Reg64|Qword|Unspecified|BaseIndex|Disp8|Disp32|Disp32S|JumpAbsolute }
 // Intel Syntax.
 jmp, 2, 0xea, None, 1, CpuNo64, JumpInterSegment|No_bSuf|No_sSuf|No_qSuf|No_ldSuf, { Imm16, Imm16|Imm32 }
 // Intel Syntax.
index 3ca4bed334d4f6412fea204f8f05cd42d5cb60ab..5588ab2becf9cbce11ebc102e36fb76c59e1684c 100644 (file)
@@ -2335,11 +2335,11 @@ const template i386_optab[] =
   { "call", 1, 0xff, 0x2, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
-    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 
+    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 
       0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
       0, 0 },
-    { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-         0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 
+    { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+         0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
          1, 0, 0 } } } },
   { "call", 2, 0x9a, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -2404,11 +2404,11 @@ const template i386_optab[] =
   { "jmp", 1, 0xff, 0x4, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
         0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
-    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 
+    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 
       0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 
       0, 0 },
-    { { { 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
-         0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 
+    { { { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
+         0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
          1, 0, 0 } } } },
   { "jmp", 2, 0xea, None, 1,
     { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,