committed :)
On Mon, Apr 14, 2025 at 6:01 PM Kito Cheng <kito.ch...@sifive.com> wrote: > > This patch will be committed this week if CI passes and not strong > objections since it's bug to large code model, also change is small > > On Mon, Apr 14, 2025 at 6:00 PM Kito Cheng <kito.ch...@sifive.com> wrote: > > > > Large code model assume the data or rodata may put far away from > > text section. So we need to put jump table in text section for > > large code model. > > > > gcc/ChangeLog: > > > > * config/riscv/riscv.h (JUMP_TABLES_IN_TEXT_SECTION): Check if > > large code model. > > > > gcc/testsuite/ChangeLog: > > > > * gcc.target/riscv/jump-table-large-code-model.c: New test. > > --- > > gcc/config/riscv/riscv.h | 2 +- > > .../riscv/jump-table-large-code-model.c | 24 +++++++++++++++++++ > > 2 files changed, 25 insertions(+), 1 deletion(-) > > create mode 100644 > > gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c > > > > diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h > > index 2bcabd03517..2759a4cb1c9 100644 > > --- a/gcc/config/riscv/riscv.h > > +++ b/gcc/config/riscv/riscv.h > > @@ -888,7 +888,7 @@ extern enum riscv_cc get_riscv_cc (const rtx use); > > #define ASM_OUTPUT_OPCODE(STREAM, PTR) \ > > (PTR) = riscv_asm_output_opcode(STREAM, PTR) > > > > -#define JUMP_TABLES_IN_TEXT_SECTION 0 > > +#define JUMP_TABLES_IN_TEXT_SECTION (riscv_cmodel == CM_LARGE) > > #define CASE_VECTOR_MODE SImode > > #define CASE_VECTOR_PC_RELATIVE (riscv_cmodel != CM_MEDLOW) > > > > diff --git a/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c > > b/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c > > new file mode 100644 > > index 00000000000..1ee7f6c07d3 > > --- /dev/null > > +++ b/gcc/testsuite/gcc.target/riscv/jump-table-large-code-model.c > > @@ -0,0 +1,24 @@ > > +/* { dg-do compile } */ > > +/* { dg-options "-march=rv64gc -mabi=lp64 -mcmodel=large" } */ > > + > > +int foo(int x, int y) > > +{ > > + switch(x){ > > + case 0: > > + return 123 + y; > > + case 1: > > + return 456 + y; > > + case 2: > > + return 789 - y; > > + case 3: > > + return 12 * y; > > + case 4: > > + return 13 % y; > > + case 5: > > + return 11 *y; > > + } > > + return 0; > > +} > > + > > + > > +/* { dg-final { scan-assembler-not "\.section \.rodata" } } */ > > -- > > 2.34.1 > >