diff options
Diffstat (limited to 'gcc/config/i386/predicates.md')
-rw-r--r-- | gcc/config/i386/predicates.md | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md index 2ef1384246e..efc3a090d08 100644 --- a/gcc/config/i386/predicates.md +++ b/gcc/config/i386/predicates.md @@ -71,6 +71,12 @@ return ANY_QI_REG_P (op); }) +(define_predicate "sibcall_memory_operand" + (match_operand 0 "memory_operand") +{ + return CONSTANT_P (XEXP (op, 0)); +}) + ;; Match an SI or HImode register for a zero_extract. (define_special_predicate "ext_register_operand" (match_operand 0 "register_operand") @@ -600,7 +606,9 @@ (define_special_predicate "sibcall_insn_operand" (ior (match_test "constant_call_address_operand (op, mode == VOIDmode ? mode : Pmode)") - (match_operand 0 "register_no_elim_operand"))) + (match_operand 0 "register_no_elim_operand") + (and (not (match_test "TARGET_X32")) + (match_operand 0 "sibcall_memory_operand")))) ;; Return true if OP is a call from MS ABI to SYSV ABI function. (define_predicate "call_rex64_ms_sysv_operation" |