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 <[email protected]>
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.