[PATCH] C-SKY: Support -mfloat-abi=hard.

Xianmiao Qu xianmiao_qu@c-sky.com
Mon Aug 17 06:07:15 GMT 2020


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.


More information about the Gcc-patches mailing list