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