The current SIBCALL_REGS are x6, x7, and x28 to x31. These are all caller saved registers, however, they are not all of the caller saved registers.
I don't see any reason why we couldn't add t1, and a0 to a7 into this set, and this is what this patch does. gcc/ChangeLog: * config/riscv/riscv.h (REG_CLASS_CONTENTS): Update SIBCALL_REGS. --- gcc/ChangeLog | 4 ++++ gcc/config/riscv/riscv.h | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index 5fc9be8edbf2..bb8240bb849a 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -400,7 +400,7 @@ enum reg_class #define REG_CLASS_CONTENTS \ { \ { 0x00000000, 0x00000000, 0x00000000 }, /* NO_REGS */ \ - { 0xf00000c0, 0x00000000, 0x00000000 }, /* SIBCALL_REGS */ \ + { 0xf003fce0, 0x00000000, 0x00000000 }, /* SIBCALL_REGS */ \ { 0xffffffc0, 0x00000000, 0x00000000 }, /* JALR_REGS */ \ { 0xffffffff, 0x00000000, 0x00000000 }, /* GR_REGS */ \ { 0x00000000, 0xffffffff, 0x00000000 }, /* FP_REGS */ \ -- 2.14.5