https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95238

            Bug ID: 95238
           Summary: [11 Regression] Invalid *pushsi2_rex64
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hjl.tools at gmail dot com
                CC: ubizjak at gmail dot com
  Target Milestone: ---
            Target: x86-64

In 64-bit mode, we can only push 16-bit or 64-bit memory/register.

commit 75514d157e9e28616c6de4e8c2740d8c87b6857d
Author: Uros Bizjak <ubiz...@gmail.com>
Date:   Fri May 15 16:22:19 2020 +0200

    i386: Allow SI, DI and TImode pushes from XMM registers

    Also change XMM register constraint from "x" to "v" in FP push insns.

added

+;; For TARGET_64BIT we always round up to 8 bytes.
+(define_insn "*pushsi2_rex64"
+  [(set (match_operand:SI 0 "push_operand" "=X,X")
+       (match_operand:SI 1 "nonmemory_no_elim_operand" "ri,*v"))]
+  "TARGET_64BIT"
+  "@
+   push{q}\t%q1
+   #"
+  [(set_attr "type" "push,multi")
+   (set_attr "mode" "DI")])

The "i" constraint should be "n" since symbolic constant is invalid for PIC
or PIE.

Reply via email to