diff options
Diffstat (limited to 'gcc/config/riscv/riscv.c')
-rw-r--r-- | gcc/config/riscv/riscv.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/gcc/config/riscv/riscv.c b/gcc/config/riscv/riscv.c index 0e440f7a0d3..999f93e1f1e 100644 --- a/gcc/config/riscv/riscv.c +++ b/gcc/config/riscv/riscv.c @@ -3519,6 +3519,18 @@ riscv_register_move_cost (machine_mode mode, return SECONDARY_MEMORY_NEEDED (from, to, mode) ? 8 : 2; } +/* Implement TARGET_HARD_REGNO_NREGS. */ + +static unsigned int +riscv_hard_regno_nregs (unsigned int regno, machine_mode mode) +{ + if (FP_REG_P (regno)) + return (GET_MODE_SIZE (mode) + UNITS_PER_FP_REG - 1) / UNITS_PER_FP_REG; + + /* All other registers are word-sized. */ + return (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD; +} + /* Implement TARGET_HARD_REGNO_MODE_OK. */ static bool @@ -3571,18 +3583,6 @@ riscv_modes_tieable_p (machine_mode mode1, machine_mode mode2) && GET_MODE_CLASS (mode2) == MODE_FLOAT)); } -/* Implement HARD_REGNO_NREGS. */ - -unsigned int -riscv_hard_regno_nregs (int regno, machine_mode mode) -{ - if (FP_REG_P (regno)) - return (GET_MODE_SIZE (mode) + UNITS_PER_FP_REG - 1) / UNITS_PER_FP_REG; - - /* All other registers are word-sized. */ - return (GET_MODE_SIZE (mode) + UNITS_PER_WORD - 1) / UNITS_PER_WORD; -} - /* Implement CLASS_MAX_NREGS. */ static unsigned char @@ -4104,6 +4104,8 @@ riscv_slow_unaligned_access (machine_mode, unsigned int) #undef TARGET_EXPAND_BUILTIN #define TARGET_EXPAND_BUILTIN riscv_expand_builtin +#undef TARGET_HARD_REGNO_NREGS +#define TARGET_HARD_REGNO_NREGS riscv_hard_regno_nregs #undef TARGET_HARD_REGNO_MODE_OK #define TARGET_HARD_REGNO_MODE_OK riscv_hard_regno_mode_ok |