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;