]> git.ipfire.org Git - thirdparty/gcc.git/commit
x86: Don't use address override with segment regsiter
authorH.J. Lu <hjl.tools@gmail.com>
Wed, 25 Sep 2024 08:39:04 +0000 (16:39 +0800)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 25 Sep 2024 18:10:52 +0000 (02:10 +0800)
commitc79cc30862d7255ca15884aa956d1ccfa279d86a
tree2c1f10426f43594c1215a20028ad5620c67c290b
parented6dccd00d8eedc8f671133f90e6a0cd12f1f05d
x86: Don't use address override with segment regsiter

Address override only applies to the (reg32) part in the thread address
fs:(reg32).  Don't rewrite thread address like

(set (reg:CCZ 17 flags)
    (compare:CCZ (reg:SI 98 [ __gmpfr_emax.0_1 ])
        (mem/c:SI (plus:SI (plus:SI (unspec:SI [
                            (const_int 0 [0])
                        ] UNSPEC_TP)
                    (reg:SI 107))
                (const:SI (unspec:SI [
                            (symbol_ref:SI ("previous_emax") [flags 0x1a] <var_decl 0x7fffe9a11cf0 previous_emax>)
                        ] UNSPEC_DTPOFF))) [1 previous_emax+0 S4 A32])))

if address override is used to avoid the invalid memory operand like

cmpl %fs:previous_emax@dtpoff(%eax), %r12d

gcc/

PR target/116839
* config/i386/i386.cc (ix86_rewrite_tls_address_1): Make it
static.  Return if TLS address is thread register plus an integer
register.

gcc/testsuite/

PR target/116839
* gcc.target/i386/pr116839.c: New file.

Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
gcc/config/i386/i386.cc
gcc/testsuite/gcc.target/i386/pr116839.c [new file with mode: 0644]