diff options
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r-- | gcc/config/i386/i386.md | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 353a70b..47f2ce6 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -15536,14 +15536,12 @@ [(set_attr "type" "call")]) (define_insn "*sibcall_1" - [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "s,c,d,a")) + [(call (mem:QI (match_operand:SI 0 "sibcall_insn_operand" "s,U")) (match_operand 1 "" ""))] "SIBLING_CALL_P (insn) && !TARGET_64BIT" -{ - if (constant_call_address_operand (operands[0], Pmode)) - return "jmp\t%P0"; - return "jmp\t%A0"; -} + "@ + jmp\t%P0 + jmp\t%A0" [(set_attr "type" "call")]) (define_insn "*call_1_rex64" @@ -15590,22 +15588,15 @@ [(set_attr "type" "call")]) (define_insn "*sibcall_1_rex64" - [(call (mem:QI (match_operand:DI 0 "constant_call_address_operand" "")) + [(call (mem:QI (match_operand:DI 0 "sibcall_insn_operand" "s,U")) (match_operand 1 "" ""))] "SIBLING_CALL_P (insn) && TARGET_64BIT" - "jmp\t%P0" - [(set_attr "type" "call")]) - -(define_insn "*sibcall_1_rex64_v" - [(call (mem:QI (reg:DI R11_REG)) - (match_operand 0 "" ""))] - "SIBLING_CALL_P (insn) && TARGET_64BIT" - "jmp\t{*%%}r11" + "@ + jmp\t%P0 + jmp\t%A0" [(set_attr "type" "call")]) - ;; Call subroutine, returning value in operand 0 - (define_expand "call_value_pop" [(parallel [(set (match_operand 0 "" "") (call (match_operand:QI 1 "" "") @@ -22183,14 +22174,12 @@ (define_insn "*sibcall_value_1" [(set (match_operand 0 "" "") - (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "s,c,d,a")) + (call (mem:QI (match_operand:SI 1 "sibcall_insn_operand" "s,U")) (match_operand:SI 2 "" "")))] "SIBLING_CALL_P (insn) && !TARGET_64BIT" -{ - if (constant_call_address_operand (operands[1], Pmode)) - return "jmp\t%P1"; - return "jmp\t%A1"; -} + "@ + jmp\t%P1 + jmp\t%A1" [(set_attr "type" "callv")]) (define_insn "*call_value_1_rex64" @@ -22241,18 +22230,12 @@ (define_insn "*sibcall_value_1_rex64" [(set (match_operand 0 "" "") - (call (mem:QI (match_operand:DI 1 "constant_call_address_operand" "")) + (call (mem:QI (match_operand:DI 1 "sibcall_insn_operand" "s,U")) (match_operand:DI 2 "" "")))] "SIBLING_CALL_P (insn) && TARGET_64BIT" - "jmp\t%P1" - [(set_attr "type" "callv")]) - -(define_insn "*sibcall_value_1_rex64_v" - [(set (match_operand 0 "" "") - (call (mem:QI (reg:DI R11_REG)) - (match_operand:DI 1 "" "")))] - "SIBLING_CALL_P (insn) && TARGET_64BIT" - "jmp\t{*%%}r11" + "@ + jmp\t%P1 + jmp\t%A1" [(set_attr "type" "callv")]) ;; We used to use "int $5", in honor of #BR which maps to interrupt vector 5. |