x86: make code size vs CPU arch checking consistent

While update_code_flag() checks for LM / i386, set_cpu_arch() so far
didn't, allowing e.g. 64-bit code to be emitted after ".arch generic32".

Oddly enough a few of our testcases actually exhibit bad behavior (and
hence need minor adjustments).
This commit is contained in:
Jan Beulich 2023-09-15 09:56:02 +02:00
parent b44fef84a9
commit 1d07cfb440
8 changed files with 25 additions and 6 deletions

View file

@ -2928,6 +2928,24 @@ set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
{
check_cpu_arch_compatible (string, cpu_arch[j].enable);
if (flag_code == CODE_64BIT && !cpu_arch[j].enable.bitfield.cpulm )
{
as_bad (_("64bit mode not supported on `%s'."),
cpu_arch[j].name);
(void) restore_line_pointer (e);
ignore_rest_of_line ();
return;
}
if (flag_code == CODE_32BIT && !cpu_arch[j].enable.bitfield.cpui386)
{
as_bad (_("32bit mode not supported on `%s'."),
cpu_arch[j].name);
(void) restore_line_pointer (e);
ignore_rest_of_line ();
return;
}
cpu_arch_name = cpu_arch[j].name;
free (cpu_sub_arch_name);
cpu_sub_arch_name = NULL;

View file

@ -1,9 +1,9 @@
# Check 287-only instructions.
.text
.code16
.arch i286
.arch .287
.code16
_8087:
fnsetpm
frstpm

View file

@ -1,9 +1,9 @@
# Check 8087-only instructions.
.text
.code16
.arch i8086
.arch .8087
.code16
_8087:
fdisi
feni

View file

@ -1,8 +1,8 @@
.text
.att_syntax noprefix
.arch i286
.code16
.arch i286
mov eax, ax ; add al, (bx,si)
mov rax, ax ; add al, (bx,si)
mov axl, ax ; add al, (bx,si)

View file

@ -3,8 +3,8 @@
mov eax, tmm1
.arch i286
.code16
.arch i286
mov ax, eax ; add [bx+si], al
mov ax, rax ; add [bx+si], al
mov ax, axl ; add [bx+si], al

View file

@ -10,7 +10,7 @@ GAS LISTING .*
[ ]*1[ ]+\.text
[ ]*2[ ]+\.arch i186; \.code16
[ ]*2[ ]+\.code16; \.arch i186
[ ]*3[ ]+vmovapd %xmm0,%xmm1
[ ]*4[ ]+vaddsd %xmm4, %xmm5, %xmm6\{%k7\}
[ ]*5[ ]+vfrczpd %xmm7,%xmm7

View file

@ -1,5 +1,5 @@
.text
.arch i186; .code16
.code16; .arch i186
vmovapd %xmm0,%xmm1
vaddsd %xmm4, %xmm5, %xmm6{%k7}
vfrczpd %xmm7,%xmm7

View file

@ -1,4 +1,5 @@
.text
.code32
.arch i386
i386:
movsbl %al,%esi