On Fri, 2023-06-30 at 10:16 +0800, Chenghui Pan wrote:
>  
> +  int use_vecarg_p = TARGET_VECARG
> +    && LSX_SUPPORTED_MODE_P (mode);
> +
>    memset (info, 0, sizeof (*info));
>    info->gpr_offset = cum->num_gprs;
>    info->fpr_offset = cum->num_fprs;
> @@ -535,7 +546,7 @@ loongarch_get_arg_info (struct loongarch_arg_info *info,
>  
>        /* Pass one- or two-element floating-point aggregates in FPRs.  */
>        if ((info->num_fprs
> -          = loongarch_pass_aggregate_num_fpr (type, fields))
> +          = loongarch_pass_aggregate_num_fpr (type, fields, use_vecarg_p))
>           && info->fpr_offset + info->num_fprs <= MAX_ARGS_IN_REGISTERS)
>         switch (info->num_fprs)
>           {

No, this is breaking ABI.  use_vecarg_p can be only set if we invent a
new ABI (it won't be LP64D anymore), or we add some special switch for
it (like x86's -msseregparm and sseregparm attribute).

-- 
Xi Ruoyao <xry...@xry111.site>
School of Aerospace Science and Technology, Xidian University

Reply via email to