+2017-11-20 Thomas Preud'homme <thomas.preudhomme@arm.com>
+
+ * config/arm/arm.md (R4_REGNUM): Define constant.
+ (nonsecure_call_internal): Remove r4 clobber.
+ (nonsecure_call_value_internal): Likewise.
+ * config/arm/thumb1.md (nonsecure_call_reg_thumb1_v5): Remove second
+ clobber and resequence match_operands.
+ (nonsecure_call_value_reg_thumb1_v5): Likewise.
+ * config/arm/thumb2.md (nonsecure_call_reg_thumb2): Likewise.
+ (nonsecure_call_value_reg_thumb2): Likewise.
+
2017-11-20 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/78821
(define_constants
[(R0_REGNUM 0) ; First CORE register
(R1_REGNUM 1) ; Second CORE register
+ (R4_REGNUM 4) ; Fifth CORE register
(IP_REGNUM 12) ; Scratch register
(SP_REGNUM 13) ; Stack pointer
(LR_REGNUM 14) ; Return address register
UNSPEC_NONSECURE_MEM)
(match_operand 1 "general_operand" ""))
(use (match_operand 2 "" ""))
- (clobber (reg:SI LR_REGNUM))
- (clobber (reg:SI 4))])]
+ (clobber (reg:SI LR_REGNUM))])]
"use_cmse"
"
{
rtx tmp;
tmp = copy_to_suggested_reg (XEXP (operands[0], 0),
- gen_rtx_REG (SImode, 4),
+ gen_rtx_REG (SImode, R4_REGNUM),
SImode);
operands[0] = replace_equiv_address (operands[0], tmp);
UNSPEC_NONSECURE_MEM)
(match_operand 2 "general_operand" "")))
(use (match_operand 3 "" ""))
- (clobber (reg:SI LR_REGNUM))
- (clobber (reg:SI 4))])]
+ (clobber (reg:SI LR_REGNUM))])]
"use_cmse"
"
{
rtx tmp;
tmp = copy_to_suggested_reg (XEXP (operands[1], 0),
- gen_rtx_REG (SImode, 4),
+ gen_rtx_REG (SImode, R4_REGNUM),
SImode);
operands[1] = replace_equiv_address (operands[1], tmp);
)
(define_insn "*nonsecure_call_reg_thumb1_v5"
- [(call (unspec:SI [(mem:SI (match_operand:SI 0 "register_operand" "l*r"))]
+ [(call (unspec:SI [(mem:SI (reg:SI R4_REGNUM))]
UNSPEC_NONSECURE_MEM)
- (match_operand 1 "" ""))
- (use (match_operand 2 "" ""))
- (clobber (reg:SI LR_REGNUM))
- (clobber (match_dup 0))]
+ (match_operand 0 "" ""))
+ (use (match_operand 1 "" ""))
+ (clobber (reg:SI LR_REGNUM))]
"TARGET_THUMB1 && use_cmse && !SIBLING_CALL_P (insn)"
"bl\\t__gnu_cmse_nonsecure_call"
[(set_attr "length" "4")
(define_insn "*nonsecure_call_value_reg_thumb1_v5"
[(set (match_operand 0 "" "")
(call (unspec:SI
- [(mem:SI (match_operand:SI 1 "register_operand" "l*r"))]
+ [(mem:SI (reg:SI R4_REGNUM))]
UNSPEC_NONSECURE_MEM)
- (match_operand 2 "" "")))
- (use (match_operand 3 "" ""))
- (clobber (reg:SI LR_REGNUM))
- (clobber (match_dup 1))]
+ (match_operand 1 "" "")))
+ (use (match_operand 2 "" ""))
+ (clobber (reg:SI LR_REGNUM))]
"TARGET_THUMB1 && use_cmse"
"bl\\t__gnu_cmse_nonsecure_call"
[(set_attr "length" "4")
)
(define_insn "*nonsecure_call_reg_thumb2"
- [(call (unspec:SI [(mem:SI (match_operand:SI 0 "s_register_operand" "r"))]
+ [(call (unspec:SI [(mem:SI (reg:SI R4_REGNUM))]
UNSPEC_NONSECURE_MEM)
- (match_operand 1 "" ""))
- (use (match_operand 2 "" ""))
- (clobber (reg:SI LR_REGNUM))
- (clobber (match_dup 0))]
+ (match_operand 0 "" ""))
+ (use (match_operand 1 "" ""))
+ (clobber (reg:SI LR_REGNUM))]
"TARGET_THUMB2 && use_cmse"
"bl\\t__gnu_cmse_nonsecure_call"
[(set_attr "length" "4")
(define_insn "*nonsecure_call_value_reg_thumb2"
[(set (match_operand 0 "" "")
(call
- (unspec:SI [(mem:SI (match_operand:SI 1 "register_operand" "l*r"))]
+ (unspec:SI [(mem:SI (reg:SI R4_REGNUM))]
UNSPEC_NONSECURE_MEM)
- (match_operand 2 "" "")))
- (use (match_operand 3 "" ""))
- (clobber (reg:SI LR_REGNUM))
- (clobber (match_dup 1))]
+ (match_operand 1 "" "")))
+ (use (match_operand 2 "" ""))
+ (clobber (reg:SI LR_REGNUM))]
"TARGET_THUMB2 && use_cmse"
"bl\t__gnu_cmse_nonsecure_call"
[(set_attr "length" "4")