Hi Jojo,
On 8/17/20 9:52 AM, Jojo R wrote:
--- a/gcc/config/csky/csky.c
+++ b/gcc/config/csky/csky.c
@@ -328,6 +328,10 @@ csky_cpu_cpp_builtins (cpp_reader *pfile)
{
builtin_define ("__csky_hard_float__");
builtin_define ("__CSKY_HARD_FLOAT__");
+ if (TARGET_HARD_FLOAT_ABI)
+ builtin_define ("__CSKY_HARD_FLOAT_ABI__");
+ if (TARGET_SINGLE_FPU)
+ builtin_define ("__CSKY_HARD_FLOAT_FPU_SF__");
}
These two builtin definitions should also support lowercase.
diff --git a/gcc/config/csky/csky.md b/gcc/config/csky/csky.md
@@ -3310,6 +3312,88 @@
force_reg (Pmode, XEXP (operands[1], 0)));
}")
+;; Call subroutine returning any type.
+
+(define_expand "untyped_call"
+ [(parallel [(call (match_operand 0 "" "")
+ (const_int 0))
+ (match_operand 1 "" "")
+ (match_operand 2 "" "")])]
+ "TARGET_HARD_FLOAT_ABI"
+{
+ int i;
+
+ emit_call_insn (gen_call (operands[0], const0_rtx));
+
+ for (i = 0; i < XVECLEN (operands[2], 0); i++)
+ {
+ rtx set = XVECEXP (operands[2], 0, i);
+ emit_move_insn (SET_DEST (set), SET_SRC (set));
+ }
+
+ /* The optimizer does not know that the call sets the function value
+ registers we stored in the result block. We avoid problems by
+ claiming that all hard registers are used and clobbered at this
+ point. */
+ emit_insn (gen_blockage ());
+
+ DONE;
+})
Why does untyped_call only supported when the -mfloat-abi=hard? I think
this should be supported in any float abis.