diff options
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 14 | ||||
-rw-r--r-- | gas/config/tc-i386-intel.c | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/ilp32/x86-64-intel64.d | 10 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/intelbad.l | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/intelbad.s | 6 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-intel64.d | 13 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-intel64.s | 15 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-opcode.d | 12 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-opcode.s | 14 |
9 files changed, 90 insertions, 8 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index d309806..992be9b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,19 @@ 2019-12-04 Jan Beulich <jbeulich@suse.com> + * config/tc-i386-intel.c (i386_intel_operand): Handle LFS et al + as well as LGDT at al when processing O_tbyte_ptr. + * testsuite/gas/i386/intelbad.s: Add LDS et al cases. + * testsuite/gas/i386/x86-64-intel64.s, + * testsuite/gas/i386/x86-64-opcode.s: Add LFS et al cases. + * testsuite/gas/i386/ilp32/x86-64-intel64.d: Add -mintel64 + command line option and fold expectations with parent dir test. + * testsuite/gas/i386/x86-64-intel64.d: Add -mintel64 command + line option and adjust expectations. + * testsuite/gas/i386/intelbad.l, + testsuite/gas/i386/x86-64-opcode.d: Adjust expectations. + +2019-12-04 Jan Beulich <jbeulich@suse.com> + * config/tc-i386-intel.c (i386_intel_operand): Also handle DWORD with 64-bit mode branches. * testsuite/gas/i386/x86-64-jump.s: Extend Intel syntax branch diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c index 51fa38d..b639ab7 100644 --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -698,6 +698,15 @@ i386_intel_operand (char *operand_string, int got_a_float) i.types[this_operand].bitfield.tbyte = 1; if (got_a_float == 1) suffix = LONG_DOUBLE_MNEM_SUFFIX; + else if (current_templates->start->operand_types[0].bitfield.fword + || current_templates->start->operand_types[0].bitfield.tbyte) + { + /* l[defgs]s, [ls][gi]dt */ + if (flag_code == CODE_64BIT) + suffix = QWORD_MNEM_SUFFIX; + else + i.types[this_operand].bitfield.byte = 1; /* cause an error */ + } else suffix = BYTE_MNEM_SUFFIX; /* so it will cause an error */ break; diff --git a/gas/testsuite/gas/i386/ilp32/x86-64-intel64.d b/gas/testsuite/gas/i386/ilp32/x86-64-intel64.d index 74d863d..120e567 100644 --- a/gas/testsuite/gas/i386/ilp32/x86-64-intel64.d +++ b/gas/testsuite/gas/i386/ilp32/x86-64-intel64.d @@ -1,11 +1,5 @@ #source: ../x86-64-intel64.s +#as: -mintel64 #objdump: -dw #name: x86-64 (ILP32) Intel64 - -.*: +file format .* - -Disassembly of section .text: -0+ <_start>: -[ ]*[a-f0-9]+: 0f 05 syscall -[ ]*[a-f0-9]+: 0f 07 sysret -#pass +#dump: ../x86-64-intel64.d diff --git a/gas/testsuite/gas/i386/intelbad.l b/gas/testsuite/gas/i386/intelbad.l index 6321cc8..4dc0917 100644 --- a/gas/testsuite/gas/i386/intelbad.l +++ b/gas/testsuite/gas/i386/intelbad.l @@ -152,3 +152,8 @@ .*:168: Error: .* .*:169: Error: .* .*:172: Error: .* +.*:174: Error: .* +.*:175: Error: .* +.*:176: Warning: .* +.*:177: Error: .* +.*:178: Error: .* diff --git a/gas/testsuite/gas/i386/intelbad.s b/gas/testsuite/gas/i386/intelbad.s index b3d1f76..93e1c44 100644 --- a/gas/testsuite/gas/i386/intelbad.s +++ b/gas/testsuite/gas/i386/intelbad.s @@ -170,3 +170,9 @@ start: #XXX? movzx eax, byte ptr [1] mov eax, 3:5 + + lds eax, byte ptr [eax] + les eax, word ptr [eax] + lfs eax, dword ptr [eax] + lgs eax, qword ptr [eax] + lss eax, tbyte ptr [eax] diff --git a/gas/testsuite/gas/i386/x86-64-intel64.d b/gas/testsuite/gas/i386/x86-64-intel64.d index 13e7231..545fcdc 100644 --- a/gas/testsuite/gas/i386/x86-64-intel64.d +++ b/gas/testsuite/gas/i386/x86-64-intel64.d @@ -1,3 +1,4 @@ +#as: -mintel64 #objdump: -dw #name: x86-64 Intel64 @@ -5,6 +6,18 @@ Disassembly of section .text: 0+ <_start>: +[ ]*[a-f0-9]+: 48 0f b4 08 lfs \(%rax\),%rcx +[ ]*[a-f0-9]+: 48 0f b4 08 lfs \(%rax\),%rcx +[ ]*[a-f0-9]+: 48 0f b5 11 lgs \(%rcx\),%rdx +[ ]*[a-f0-9]+: 48 0f b5 11 lgs \(%rcx\),%rdx +[ ]*[a-f0-9]+: 48 0f b2 1a lss \(%rdx\),%rbx +[ ]*[a-f0-9]+: 48 0f b2 1a lss \(%rdx\),%rbx [ ]*[a-f0-9]+: 0f 05 syscall [ ]*[a-f0-9]+: 0f 07 sysret +[ ]*[a-f0-9]+: 48 0f b4 01 lfs \(%rcx\),%rax +[ ]*[a-f0-9]+: 48 0f b4 01 lfs \(%rcx\),%rax +[ ]*[a-f0-9]+: 48 0f b5 0a lgs \(%rdx\),%rcx +[ ]*[a-f0-9]+: 48 0f b5 0a lgs \(%rdx\),%rcx +[ ]*[a-f0-9]+: 48 0f b2 13 lss \(%rbx\),%rdx +[ ]*[a-f0-9]+: 48 0f b2 13 lss \(%rbx\),%rdx #pass diff --git a/gas/testsuite/gas/i386/x86-64-intel64.s b/gas/testsuite/gas/i386/x86-64-intel64.s index 1c2b455..233f6b7 100644 --- a/gas/testsuite/gas/i386/x86-64-intel64.s +++ b/gas/testsuite/gas/i386/x86-64-intel64.s @@ -3,5 +3,20 @@ .text .arch core2 _start: + lfs (%rax), %rcx + lfsq (%rax), %rcx + lgs (%rcx), %rdx + lgsq (%rcx), %rdx + lss (%rdx), %rbx + lssq (%rdx), %rbx + syscall sysret + + .intel_syntax noprefix + lfs rax, [rcx] + lfs rax, tbyte ptr [rcx] + lgs rcx, [rdx] + lgs rcx, tbyte ptr [rdx] + lss rdx, [rbx] + lss rdx, tbyte ptr [rbx] diff --git a/gas/testsuite/gas/i386/x86-64-opcode.d b/gas/testsuite/gas/i386/x86-64-opcode.d index d8a1e44..70e4030 100644 --- a/gas/testsuite/gas/i386/x86-64-opcode.d +++ b/gas/testsuite/gas/i386/x86-64-opcode.d @@ -45,6 +45,18 @@ Disassembly of section .text: [ ]*[a-f0-9]+: c7 00 00 00 00 70 movl \$0x70000000,\(%rax\) [ ]*[a-f0-9]+: 49 c7 00 00 00 00 70 movq \$0x70000000,\(%r8\) [ ]*[a-f0-9]+: 48 c7 00 00 00 00 70 movq \$0x70000000,\(%rax\) +[ ]*[a-f0-9]+: 0f b4 08 lfs \(%rax\),%ecx +[ ]*[a-f0-9]+: 0f b4 01 lfs \(%rcx\),%eax +[ ]*[a-f0-9]+: 66 0f b4 08 lfs \(%rax\),%cx +[ ]*[a-f0-9]+: 66 0f b4 01 lfs \(%rcx\),%ax +[ ]*[a-f0-9]+: 0f b5 11 lgs \(%rcx\),%edx +[ ]*[a-f0-9]+: 0f b5 0a lgs \(%rdx\),%ecx +[ ]*[a-f0-9]+: 66 0f b5 11 lgs \(%rcx\),%dx +[ ]*[a-f0-9]+: 66 0f b5 0a lgs \(%rdx\),%cx +[ ]*[a-f0-9]+: 0f b2 1a lss \(%rdx\),%ebx +[ ]*[a-f0-9]+: 0f b2 13 lss \(%rbx\),%edx +[ ]*[a-f0-9]+: 66 0f b2 1a lss \(%rdx\),%bx +[ ]*[a-f0-9]+: 66 0f b2 13 lss \(%rbx\),%dx [ ]*[a-f0-9]+: 41 0f c3 00 movnti %eax,\(%r8\) [ ]*[a-f0-9]+: 0f c3 00 movnti %eax,\(%rax\) [ ]*[a-f0-9]+: 49 0f c3 00 movnti %rax,\(%r8\) diff --git a/gas/testsuite/gas/i386/x86-64-opcode.s b/gas/testsuite/gas/i386/x86-64-opcode.s index caee124..f066e61 100644 --- a/gas/testsuite/gas/i386/x86-64-opcode.s +++ b/gas/testsuite/gas/i386/x86-64-opcode.s @@ -50,6 +50,20 @@ MOVq $0x70000000,(%r8) # -- -- -- 49 C7 00 00 00 00 70 ; REX for 64-bit operand size. REX to access upper reg. MOVq $0x70000000,(%rax) # -- -- -- 48 C7 00 00 00 00 70 ; REX for 64-bit operand size + # LFS etc + LFS (%rax), %ecx # -- -- -- -- 0F B4 .. + LFSl (%rcx), %eax # -- -- -- -- 0F B4 .. + LFS (%rax), %cx # 66 -- -- -- 0F B4 .. + LFSw (%rcx), %ax # 66 -- -- -- 0F B4 .. + LGS (%rcx), %edx # -- -- -- -- 0F B5 .. + LGSl (%rdx), %ecx # -- -- -- -- 0F B5 .. + LGS (%rcx), %dx # 66 -- -- -- 0F B5 .. + LGSw (%rdx), %cx # 66 -- -- -- 0F B5 .. + LSS (%rdx), %ebx # -- -- -- -- 0F B2 .. + LSSl (%rbx), %edx # -- -- -- -- 0F B2 .. + LSS (%rdx), %bx # 66 -- -- -- 0F B2 .. + LSSw (%rbx), %dx # 66 -- -- -- 0F B2 .. + # MOVNTI MOVNTI %eax,(%r8) # -- -- -- 41 0f c3 00 ; REX to access upper reg. MOVNTI %eax,(%rax) # -- -- -- -- 0f c3 00 |