@@ -333,14 +333,14 @@ const enum reg_class riscv_regno_to_class[FIRST_PSEUDO_REGISTER] = {
333333 JALR_REGS, JALR_REGS, JALR_REGS, JALR_REGS,
334334 JALR_REGS, JALR_REGS, JALR_REGS, JALR_REGS,
335335 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 ,
344344 FRAME_REGS, FRAME_REGS, NO_REGS, NO_REGS,
345345 NO_REGS, NO_REGS, NO_REGS, NO_REGS,
346346 NO_REGS, NO_REGS, NO_REGS, NO_REGS,
@@ -8425,9 +8425,11 @@ static bool
84258425riscv_secondary_memory_needed (machine_mode mode, reg_class_t class1,
84268426 reg_class_t class2)
84278427{
8428+ bool class1_is_fpr = class1 == FP_REGS || class1 == RVC_FP_REGS;
8429+ bool class2_is_fpr = class2 == FP_REGS || class2 == RVC_FP_REGS;
84288430 return (!riscv_v_ext_mode_p (mode)
84298431 && GET_MODE_SIZE (mode).to_constant () > UNITS_PER_WORD
8430- && (class1 == FP_REGS) != (class2 == FP_REGS )
8432+ && (class1_is_fpr != class2_is_fpr )
84318433 && !TARGET_XTHEADFMV
84328434 && !TARGET_ZFA);
84338435}
@@ -8438,8 +8440,12 @@ static int
84388440riscv_register_move_cost (machine_mode mode,
84398441 reg_class_t from, reg_class_t to)
84408442{
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))
84438449 return tune_param->fmv_cost ;
84448450
84458451 return riscv_secondary_memory_needed (mode, from, to) ? 8 : 2 ;
0 commit comments