@@ -333,14 +333,14 @@ const enum reg_class riscv_regno_to_class[FIRST_PSEUDO_REGISTER] = {
333
333
JALR_REGS, JALR_REGS, JALR_REGS, JALR_REGS,
334
334
JALR_REGS, JALR_REGS, JALR_REGS, JALR_REGS,
335
335
SIBCALL_REGS, SIBCALL_REGS, SIBCALL_REGS, SIBCALL_REGS,
336
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
337
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
338
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
339
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
340
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
341
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
342
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
343
- FP_REGS, FP_REGS, FP_REGS, FP_REGS ,
336
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
337
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
338
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
339
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
340
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
341
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
342
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
343
+ RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS, RVC_FP_REGS ,
344
344
FRAME_REGS, FRAME_REGS, NO_REGS, NO_REGS,
345
345
NO_REGS, NO_REGS, NO_REGS, NO_REGS,
346
346
NO_REGS, NO_REGS, NO_REGS, NO_REGS,
@@ -8425,9 +8425,11 @@ static bool
8425
8425
riscv_secondary_memory_needed (machine_mode mode, reg_class_t class1,
8426
8426
reg_class_t class2)
8427
8427
{
8428
+ bool class1_is_fpr = class1 == FP_REGS || class1 == RVC_FP_REGS;
8429
+ bool class2_is_fpr = class2 == FP_REGS || class2 == RVC_FP_REGS;
8428
8430
return (!riscv_v_ext_mode_p (mode)
8429
8431
&& GET_MODE_SIZE (mode).to_constant () > UNITS_PER_WORD
8430
- && (class1 == FP_REGS) != (class2 == FP_REGS )
8432
+ && (class1_is_fpr != class2_is_fpr )
8431
8433
&& !TARGET_XTHEADFMV
8432
8434
&& !TARGET_ZFA);
8433
8435
}
@@ -8438,8 +8440,12 @@ static int
8438
8440
riscv_register_move_cost (machine_mode mode,
8439
8441
reg_class_t from, reg_class_t to)
8440
8442
{
8441
- if ((from == FP_REGS && to == GR_REGS) ||
8442
- (from == GR_REGS && to == FP_REGS))
8443
+ bool from_is_fpr = from == FP_REGS || from == RVC_FP_REGS;
8444
+ bool from_is_gpr = from == GR_REGS || from == RVC_GR_REGS;
8445
+ bool to_is_fpr = to == FP_REGS || to == RVC_FP_REGS;
8446
+ bool to_is_gpr = to == GR_REGS || to == RVC_GR_REGS;
8447
+ if ((from_is_fpr && to == to_is_gpr) ||
8448
+ (from_is_gpr && to_is_fpr))
8443
8449
return tune_param->fmv_cost ;
8444
8450
8445
8451
return riscv_secondary_memory_needed (mode, from, to) ? 8 : 2 ;
0 commit comments