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.