From 47f4115a1b17f0918a484b935ffd0adcee1555a5 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 21 Dec 2021 09:31:04 +0100 Subject: [PATCH] x86: -mfence-as-lock-add=yes doesn't work for 16-bit mode 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 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 9674ec4368b..dd12a0e9e22 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -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; -- 2.30.2