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.

Reply via email to