diff --git a/gas/ChangeLog b/gas/ChangeLog index 54ede43421..f198b01a44 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2019-12-09 Jan Beulich + + * config/tc-i386-intel.c (i386_intel_operand): Set "byte" + attribute suffix instead of suffix for floating point insns when + handling O_near_ptr / O_far_ptr. + * testsuite/gas/i386/intelbad.s: Add FPU tests. + * testsuite/gas/i386/intelbad.l: Adjust expectations. + 2019-12-09 Jan Beulich * config/tc-i386-intel.c (i386_intel_operand): Set "byte" diff --git a/gas/config/tc-i386-intel.c b/gas/config/tc-i386-intel.c index 7d0a5b8d85..8eb587b233 100644 --- a/gas/config/tc-i386-intel.c +++ b/gas/config/tc-i386-intel.c @@ -718,9 +718,12 @@ i386_intel_operand (char *operand_string, int got_a_float) case O_near_ptr: if (current_templates->start->opcode_modifier.jump != JUMP && current_templates->start->opcode_modifier.jump != JUMP_DWORD) - suffix = got_a_float /* so it will cause an error */ - ? BYTE_MNEM_SUFFIX - : LONG_DOUBLE_MNEM_SUFFIX; + { + /* cause an error */ + i.types[this_operand].bitfield.byte = 1; + i.types[this_operand].bitfield.tbyte = 1; + suffix = i.suffix; + } break; default: diff --git a/gas/testsuite/gas/i386/intelbad.l b/gas/testsuite/gas/i386/intelbad.l index 4dc091741f..20809136fe 100644 --- a/gas/testsuite/gas/i386/intelbad.l +++ b/gas/testsuite/gas/i386/intelbad.l @@ -157,3 +157,7 @@ .*:176: Warning: .* .*:177: Error: .* .*:178: Error: .* +.*:180: Error: .* +.*:181: Error: .* +.*:183: Error: .* +.*:184: Error: .* diff --git a/gas/testsuite/gas/i386/intelbad.s b/gas/testsuite/gas/i386/intelbad.s index 93e1c44e84..afbb6035da 100644 --- a/gas/testsuite/gas/i386/intelbad.s +++ b/gas/testsuite/gas/i386/intelbad.s @@ -176,3 +176,9 @@ start: lfs eax, dword ptr [eax] lgs eax, qword ptr [eax] lss eax, tbyte ptr [eax] + + fld near ptr [ebx] + fst far ptr [ebx] + + fild far ptr [ebx] + fist near ptr [ebx]