On 27/10/15 20:57, Jeff Law wrote:
>> a
>>
>> * config/aarch64/aarch64.md (call, call_value): Handle noplt.
> FWIW -ENOPATCH.
> 
> jeff


Bah - finger trouble. Sorry about that. Here it is and also handling sibcall 
patterns. Tested aarch64-none-elf with no regressions.



2015-10-28  Ramana Radhakrishnan  <ramana.radhakrish...@arm.com>

        * config/aarch64/aarch64.md (call_value, call, sibcall_value,
        sibcall): Handle noplt.
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index baa97fd..1bc6237 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -696,7 +696,8 @@
        the branch-and-link.  */
     callee = XEXP (operands[0], 0);
     if (GET_CODE (callee) == SYMBOL_REF
-       ? aarch64_is_long_call_p (callee)
+       ? (aarch64_is_long_call_p (callee)
+          || aarch64_is_noplt_call_p (callee))
        : !REG_P (callee))
       XEXP (operands[0], 0) = force_reg (Pmode, callee);
 
@@ -755,7 +756,8 @@
        the branch-and-link.  */
     callee = XEXP (operands[1], 0);
     if (GET_CODE (callee) == SYMBOL_REF
-       ? aarch64_is_long_call_p (callee)
+       ? (aarch64_is_long_call_p (callee)
+          || aarch64_is_noplt_call_p (callee))
        : !REG_P (callee))
       XEXP (operands[1], 0) = force_reg (Pmode, callee);
 
@@ -805,10 +807,12 @@
   ""
   {
     rtx pat;
-
-    if (!REG_P (XEXP (operands[0], 0))
-       && (GET_CODE (XEXP (operands[0], 0)) != SYMBOL_REF))
-     XEXP (operands[0], 0) = force_reg (Pmode, XEXP (operands[0], 0));
+    rtx callee = XEXP (operands[0], 0);
+    if (!REG_P (callee)
+       && ((GET_CODE (callee) != SYMBOL_REF)
+          || (GET_CODE (callee) == SYMBOL_REF
+             && aarch64_is_noplt_call_p (callee))))
+      XEXP (operands[0], 0) = force_reg (Pmode, callee);
 
     if (operands[2] == NULL_RTX)
       operands[2] = const0_rtx;
@@ -835,10 +839,12 @@
   ""
   {
     rtx pat;
-
-    if (!REG_P (XEXP (operands[1], 0))
-       && (GET_CODE (XEXP (operands[1], 0)) != SYMBOL_REF))
-     XEXP (operands[1], 0) = force_reg (Pmode, XEXP (operands[1], 0));
+    rtx callee = XEXP (operands[1], 0);
+    if (!REG_P (callee)
+       && ((GET_CODE (callee) != SYMBOL_REF)
+          || (GET_CODE (callee) == SYMBOL_REF
+             && aarch64_is_noplt_call_p (callee))))
+      XEXP (operands[1], 0) = force_reg (Pmode, callee);
 
     if (operands[3] == NULL_RTX)
       operands[3] = const0_rtx;

Reply via email to