x86: -mfence-as-lock-add=yes doesn't work for 16-bit mode
authorJan Beulich <jbeulich@suse.com>
Tue, 21 Dec 2021 08:31:04 +0000 (09:31 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 21 Dec 2021 08:31:04 +0000 (09:31 +0100)
Rather than trying to fix this (which would require making an assumption
on the upper half of %esp being zero), simply issue an error. While at
it, since the generated code is in conflict with -momit-lock-prefix=yes,
issue an error in that case as well.

gas/config/tc-i386.c

index 9674ec4368b4d4c34e319db5adde4222ded70511..dd12a0e9e226ecd315cc44f9982775eb6d2a2930 100644 (file)
@@ -9632,7 +9632,12 @@ output_insn (void)
        {
          /* Encode lfence, mfence, and sfence as
             f0 83 04 24 00   lock addl $0x0, (%{re}sp).  */
-         if (now_seg != absolute_section)
+         if (flag_code == CODE_16BIT)
+           as_bad (_("Cannot convert `%s' in 16-bit mode"), i.tm.name);
+         else if (omit_lock_prefix)
+           as_bad (_("Cannot convert `%s' with `-momit-lock-prefix=yes' in effect"),
+                   i.tm.name);
+         else if (now_seg != absolute_section)
            {
              offsetT val = 0x240483f0ULL;