[PATCH 06/10] x86: improve handling of insns with ambiguous operand sizes

H.J. Lu hjl.tools@gmail.com
Tue Aug 6 20:27:00 GMT 2019


On Tue, Aug 6, 2019 at 7:27 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> Commit b76bc5d54e ("x86: don't default variable shift count insns to
> 8-bit operand size") pointed out a very bad case, but the underlying
> problem is, as mentioned on various occasions, much larger: Silently
> selecting a (nowhere documented afaict) certain default operand size
> when there's no "sizing" suffix and no suitable register operand(s) is
> simply dangerous (for the programmer to make mistakes).

If there may be an ambiguity, a size suffix can be used.  Assembler isn't
responsible for programmer's errors.

> While in Intel syntax mode such mistakes already lead to an error (which
> is going to remain that way), AT&T syntax mode now gains warnings in
> such cases by default, which can be suppressed or promoted to an error

This punishes the perfectly good assembly sources.

> if so desired by the programmer. Furthermore at least general purpose
> insns now consistently have a default applied (alongside the warning
> emission), rather than accepting some and refusing others.
>
> No warnings are (as before) to be generated for "DefaultSize" insns as
> well as ones acting on selector and other fixed-width values. The set of
> "DefaultSize" one gets slightly widened for the purposes here.

Widen the default size set avoids generate warnings.  It sounds to
me these warnings isn't really necessary.

> As set forth as a prereq when I first mentioned this intended change a
> few years back, Linux as well as gcc have meanwhile been patched to
> avoid emitting of ambiguous operands (and hence triggering of the new
> warning).
>
> Note that floating point operations with integer operands are an
> exception for now: They continue to use short (16-bit) operands by
> default even in 32- and 64-bit modes.
>
> gas/
> 2019-08-XX  Jan Beulich  <jbeulich@suse.com>
>
>         * config/tc-i386.c (process_suffix): Extend exclusion set for
>         "defaultsize" processing. Re-write lack-of-suffix processing
>         logic.
>         * testsuite/gas/i386/bundle.s, testsuite/gas/i386/lock-1.s,
>         testsuite/gas/i386/opcode.s, testsuite/gas/i386/sse3.s,
>         testsuite/gas/i386/x86-64-avx-scalar.s,
>         testsuite/gas/i386/x86-64-avx.s,
>         testsuite/gas/i386/x86-64-bundle.s,
>         testsuite/gas/i386/x86-64-lock-1.s,
>         testsuite/gas/i386/x86-64-opcode.s,
>         testsuite/gas/i386/x86-64-sse2avx.s,
>         testsuite/gas/i386/x86-64-sse3.s: Add missing suffixes.
>         * testsuite/gas/i386/nops.s, testsuite/gas/i386/sse-noavx.s,
>         testsuite/gas/i386/x86-64-nops.s,
>         testsuite/gas/i386/x86-64-ptwrite.s,
>         testsuite/gas/i386/x86-64-simd.s,
>         testsuite/gas/i386/x86-64-sse-noavx.s Drop bogus suffix-less
>         insns.
>         * testsuite/gas/i386/noreg16.s, testsuite/gas/i386/noreg32.s,
>         testsuite/gas/i386/noreg64.s: Add further tests.
>         * testsuite/gas/i386/ilp32/x86-64-nops.d,
>         testsuite/gas/i386/ilp32/x86-64-sse-noavx.d,
>         testsuite/gas/i386/nops.d, testsuite/gas/i386/noreg16.d,
>         testsuite/gas/i386/noreg32.d, testsuite/gas/i386/noreg64.d,
>         testsuite/gas/i386/sse-noavx.d,
>         testsuite/gas/i386/x86-64-nops.d,
>         testsuite/gas/i386/x86-64-ptwrite-intel.d,
>         testsuite/gas/i386/x86-64-ptwrite.d,
>         testsuite/gas/i386/x86-64-simd-intel.d,
>         testsuite/gas/i386/x86-64-simd-suffix.d,
>         testsuite/gas/i386/x86-64-simd.d,
>         testsuite/gas/i386/x86-64-sse-noavx.d: Adjust expectations.
>         * testsuite/gas/i386/noreg16.l, testsuite/gas/i386/noreg32.l,
>         testsuite/gas/i386/noreg64.l: New.
>         * testsuite/gas/i386/i386.exp: Run new tests.
>
> opcodes/
> 2019-08-XX  Jan Beulich  <jbeulich@suse.com>
>
>         * i386-opc.tbl (jmp, ljmp): Add DefaultSize to indirect forms.
>         (loop, loopz, loope, loopnz, loopne, lgdt, lidt, sgdt, sidt):
>         Add DefaultSize.
>         * i386-tbl.h: Re-generate.
>

-- 
H.J.



More information about the Binutils mailing list