aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-01 10:36:55 +0000
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2014-06-01 10:36:55 +0000
commit31916c591a270eaf6a63345071a41e878a400160 (patch)
tree7477949fe5340896723a29dcb3714883d5f1ee85
parent6d13fedae66e854e48785517e4f442664d7166c2 (diff)
PR target/61377
* constrains.md (define_constrain): New 'Bs' constraint. * i386.md (sibcall_insn_operand): Use Bs instead of m constraint. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211112 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/constraints.md10
-rw-r--r--gcc/config/i386/i386.md8
3 files changed, 19 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 60ef5c6a5ba..29ce4be553f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2014-06-01 Kai Tietz <ktietz@redhat.com>
+
+ PR target/61377
+ * constrains.md (define_constrain): New 'Bs' constraint.
+ * i386.md (sibcall_insn_operand): Use Bs instead of m constraint.
+
2014-05-31 Andreas Schwab <schwab@linux-m68k.org>
* config/m68k/m68k.md (beq0_di, bne0_di): Make the "o" constraint
diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
index 567e705646a..b142c191378 100644
--- a/gcc/config/i386/constraints.md
+++ b/gcc/config/i386/constraints.md
@@ -18,7 +18,7 @@
;; <http://www.gnu.org/licenses/>.
;;; Unused letters:
-;;; B H
+;;; H
;;; h j
;; Integer register constraints.
@@ -144,6 +144,14 @@
"(ix86_fpmath & FPMATH_387) ? FLOAT_REGS : NO_REGS"
"@internal Any x87 register when 80387 FP arithmetic is enabled.")
+;; We use the B prefix to denote any number of internal memory operands:
+;; s Sibling memory operand.
+
+(define_constraint "Bs"
+ "@internal Sibcall memory operand."
+ (and (not (match_test "TARGET_X32"))
+ (match_operand 0 "sibcall_memory_operand")))
+
(define_register_constraint "v" "TARGET_SSE ? ALL_SSE_REGS : NO_REGS"
"Any EVEX encodable SSE register (@code{%xmm0-%xmm31}).")
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 8d363bda0b3..6fc69ff163e 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -11376,7 +11376,7 @@
[(set_attr "type" "call")])
(define_insn "*sibcall"
- [(call (mem:QI (match_operand:W 0 "sibcall_insn_operand" "Uzm"))
+ [(call (mem:QI (match_operand:W 0 "sibcall_insn_operand" "UzBs"))
(match_operand 1))]
"SIBLING_CALL_P (insn)"
"* return ix86_output_call_insn (insn, operands[0]);"
@@ -11406,7 +11406,7 @@
[(set_attr "type" "call")])
(define_insn "*sibcall_pop"
- [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "Uzm"))
+ [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "UzBs"))
(match_operand 1))
(set (reg:SI SP_REG)
(plus:SI (reg:SI SP_REG)
@@ -11451,7 +11451,7 @@
(define_insn "*sibcall_value"
[(set (match_operand 0)
- (call (mem:QI (match_operand:W 1 "sibcall_insn_operand" "Uzm"))
+ (call (mem:QI (match_operand:W 1 "sibcall_insn_operand" "UzBs"))
(match_operand 2)))]
"SIBLING_CALL_P (insn)"
"* return ix86_output_call_insn (insn, operands[1]);"
@@ -11494,7 +11494,7 @@
(define_insn "*sibcall_value_pop"
[(set (match_operand 0)
- (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "Uzm"))
+ (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "UzBs"))
(match_operand 2)))
(set (reg:SI SP_REG)
(plus:SI (reg:SI SP_REG)