diff options
Diffstat (limited to 'gcc/config/riscv')
-rw-r--r-- | gcc/config/riscv/riscv-protos.h | 1 | ||||
-rw-r--r-- | gcc/config/riscv/riscv.c | 26 | ||||
-rw-r--r-- | gcc/config/riscv/riscv.h | 2 |
3 files changed, 14 insertions, 15 deletions
diff --git a/gcc/config/riscv/riscv-protos.h b/gcc/config/riscv/riscv-protos.h index 0d3c21ea9e0..ae551fb3977 100644 --- a/gcc/config/riscv/riscv-protos.h +++ b/gcc/config/riscv/riscv-protos.h @@ -68,7 +68,6 @@ extern void riscv_expand_prologue (void); extern void riscv_expand_epilogue (bool); extern bool riscv_can_use_return_insn (void); extern rtx riscv_function_value (const_tree, const_tree, machine_mode); -extern unsigned int riscv_hard_regno_nregs (int, machine_mode); /* Routines implemented in riscv-c.c. */ void riscv_cpu_cpp_builtins (cpp_reader *); 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 diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index d851fd861a2..4e672119ce9 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -292,8 +292,6 @@ along with GCC; see the file COPYING3. If not see #define FP_REG_RTX_P(X) (REG_P (X) && FP_REG_P (REGNO (X))) -#define HARD_REGNO_NREGS(REGNO, MODE) riscv_hard_regno_nregs (REGNO, MODE) - /* Use s0 as the frame pointer if it is so requested. */ #define HARD_FRAME_POINTER_REGNUM 8 #define STACK_POINTER_REGNUM 2 |