Message ID | 20240802041658.3629522-1-hau.hsu@sifive.com |
---|---|
State | New |
Headers | show |
Series | RISC-V: Add --with-cmodel configure option | expand |
compact code mode is our downstream stuffs, so...it should drop it from the patch Hau Hsu <hau.hsu@sifive.com> 於 2024年8月2日 週五 12:17 寫道: > Sometimes we want to use default cmodel other than medlow. Add a GCC > configure option for that. > > gcc/ChangeLog: > > * config.gcc (riscv*-*-*): Add support for --with-cmodel configure > option. > * config/riscv/riscv.h (TARGET_RISCV_DEFAULT_CMODEL): Define default > cmodel. > * configure: Regenerate. > * configure.ac: Add --with-cmodel configure option. > * doc/install.texi: Document --with-cmodel configure option. > * doc/invoke.texi (-mcmodel): Mention --with-cmodel configure option. > --- > gcc/config.gcc | 19 +++++++++++++++++-- > gcc/config/riscv/riscv.h | 2 ++ > gcc/configure | 15 +++++++++++++-- > gcc/configure.ac | 5 +++++ > gcc/doc/install.texi | 4 ++++ > gcc/doc/invoke.texi | 6 ++++-- > 6 files changed, 45 insertions(+), 6 deletions(-) > > diff --git a/gcc/config.gcc b/gcc/config.gcc > index a36dd1bcbc6..a4537d4b940 100644 > --- a/gcc/config.gcc > +++ b/gcc/config.gcc > @@ -4723,7 +4723,7 @@ case "${target}" in > ;; > > riscv*-*-*) > - supported_defaults="abi arch tune riscv_attribute isa_spec > tls" > + supported_defaults="abi arch tune riscv_attribute isa_spec > tls cmodel" > > case "${target}" in > riscv-* | riscv32*) xlen=32 ;; > @@ -4879,6 +4879,21 @@ case "${target}" in > exit 1 > esac > fi > + > + # Handle --with-cmodel. > + if test "x${with_cmodel}" != xdefault; then > + # Make sure --with-cmodel is valid. If it was not > specified, > + # use medlow as the default value. > + case "${with_cmodel}" in > + medlow | medany | compact) > + ;; > + *) > + echo "invalid option for --with-cmodel: > '${with_cmodel}', available values are 'medlow' 'medany' 'compact'" 1>&2 > + exit 1 > + ;; > + esac > + tm_defines="${tm_defines} > TARGET_RISCV_DEFAULT_CMODEL=${with_cmodel}" > + fi > ;; > > mips*-*-*) > @@ -6071,7 +6086,7 @@ case ${target} in > esac > > t= > -all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 > tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt > synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa" > +all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 > tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt > synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa cmodel" > for option in $all_defaults > do > eval "val=\$with_"`echo $option | sed s/-/_/g` > diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h > index 6f040011864..68173ebccb4 100644 > --- a/gcc/config/riscv/riscv.h > +++ b/gcc/config/riscv/riscv.h > @@ -65,6 +65,7 @@ extern const char *riscv_arch_help (int argc, const char > **argv); > --with-tune is ignored if -mtune or -mcpu is specified. > --with-isa-spec is ignored if -misa-spec is specified. > --with-tls is ignored if -mtls-dialect is specified. > + --with-cmodel is ignored if -mcmodel is specified. > > But using default -march/-mtune value if -mcpu don't have valid > option. */ > #define OPTION_DEFAULT_SPECS \ > @@ -77,6 +78,7 @@ extern const char *riscv_arch_help (int argc, const char > **argv); > {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \ > {"isa_spec", "%{!misa-spec=*:-misa-spec=%(VALUE)}" }, > \ > {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"}, \ > + {"cmodel", "%{!mcmodel=*:-mcmodel=%(VALUE)}" }, \ > > #ifdef IN_LIBGCC2 > #undef TARGET_64BIT > diff --git a/gcc/configure b/gcc/configure > index 557ea5fa3ac..826caf8dc2c 100755 > --- a/gcc/configure > +++ b/gcc/configure > @@ -1000,6 +1000,7 @@ with_changes_root_url > enable_languages > with_multilib_list > with_multilib_generator > +with_cmodel > with_zstd > with_zstd_include > with_zstd_lib > @@ -1880,6 +1881,7 @@ Optional Packages: > SH and x86-64 only) > --with-multilib-generator > Multi-libs configuration string (RISC-V only) > + --with-cmodel Code model configuration string (RISC-V only) > --with-zstd=PATH specify prefix directory for installed zstd > library. > Equivalent to --with-zstd-include=PATH/include > plus > --with-zstd-lib=PATH/lib > @@ -8381,6 +8383,15 @@ else > fi > > > + > +# Check whether --with-cmodel was given. > +if test "${with_cmodel+set}" = set; then : > + withval=$with_cmodel; : > +else > + with_cmodel=medlow > +fi > + > + > # ------------------------- > # Checks for other programs > # ------------------------- > @@ -21406,7 +21417,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 21409 "configure" > +#line 21420 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > @@ -21512,7 +21523,7 @@ else > lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 > lt_status=$lt_dlunknown > cat > conftest.$ac_ext <<_LT_EOF > -#line 21515 "configure" > +#line 21526 "configure" > #include "confdefs.h" > > #if HAVE_DLFCN_H > diff --git a/gcc/configure.ac b/gcc/configure.ac > index eaa01d0d7e5..1339bb2ba3b 100644 > --- a/gcc/configure.ac > +++ b/gcc/configure.ac > @@ -1212,6 +1212,11 @@ AC_ARG_WITH(multilib-generator, > :, > with_multilib_generator=default) > > +AC_ARG_WITH(cmodel, > +[AS_HELP_STRING([--with-cmodel], [Code model configuration string (RISC-V > only)])], > +:, > +with_cmodel=medlow) > + > # ------------------------- > # Checks for other programs > # ------------------------- > diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi > index 4973f195daf..53f8dd21e37 100644 > --- a/gcc/doc/install.texi > +++ b/gcc/doc/install.texi > @@ -1519,6 +1519,10 @@ Use big endian by default. Provide a multilib for > little endian. > Use little endian by default. Provide a multilib for big endian. > @end table > > +@item --with-cmodel=@var{cmodel} > +Specify what code model to use by default. > +Currently only implemented for riscv*-*-*. > + > @item --enable-threads > Specify that the target > supports threads. This affects the Objective-C compiler and runtime > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index 54ecd9a00eb..f219cd3db19 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -31285,8 +31285,10 @@ element-misaligned vector memory access. > @item -mcmodel=medlow > Generate code for the medium-low code model. The program and its > statically > defined symbols must lie within a single 2 GiB address range and must lie > -between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be > -statically or dynamically linked. This is the default code model. > +between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be > statically > +or dynamically linked. This is the default code model unless GCC has been > +configured with @option{--with-cmodel=} specifying a different default > code > +model. > > @opindex mcmodel=medany > @item -mcmodel=medany > -- > 2.39.3 > >
Oh sorry. Sent v2 and replaced compact code model with large code model. Hau Hsu > On Aug 2, 2024, at 12:32 PM, Kito Cheng <kito.cheng@gmail.com> wrote: > > compact code mode is our downstream stuffs, so...it should drop it from the patch > > > Hau Hsu <hau.hsu@sifive.com <mailto:hau.hsu@sifive.com>> 於 2024年8月2日 週五 12:17 寫道: >> Sometimes we want to use default cmodel other than medlow. Add a GCC >> configure option for that. >> >> gcc/ChangeLog: >> >> * config.gcc (riscv*-*-*): Add support for --with-cmodel configure option. >> * config/riscv/riscv.h (TARGET_RISCV_DEFAULT_CMODEL): Define default cmodel. >> * configure: Regenerate. >> * configure.ac <http://configure.ac/>: Add --with-cmodel configure option. >> * doc/install.texi: Document --with-cmodel configure option. >> * doc/invoke.texi (-mcmodel): Mention --with-cmodel configure option. >> --- >> gcc/config.gcc | 19 +++++++++++++++++-- >> gcc/config/riscv/riscv.h | 2 ++ >> gcc/configure | 15 +++++++++++++-- >> gcc/configure.ac <http://configure.ac/> | 5 +++++ >> gcc/doc/install.texi | 4 ++++ >> gcc/doc/invoke.texi | 6 ++++-- >> 6 files changed, 45 insertions(+), 6 deletions(-) >> >> diff --git a/gcc/config.gcc b/gcc/config.gcc >> index a36dd1bcbc6..a4537d4b940 100644 >> --- a/gcc/config.gcc >> +++ b/gcc/config.gcc >> @@ -4723,7 +4723,7 @@ case "${target}" in >> ;; >> >> riscv*-*-*) >> - supported_defaults="abi arch tune riscv_attribute isa_spec tls" >> + supported_defaults="abi arch tune riscv_attribute isa_spec tls cmodel" >> >> case "${target}" in >> riscv-* | riscv32*) xlen=32 ;; >> @@ -4879,6 +4879,21 @@ case "${target}" in >> exit 1 >> esac >> fi >> + >> + # Handle --with-cmodel. >> + if test "x${with_cmodel}" != xdefault; then >> + # Make sure --with-cmodel is valid. If it was not specified, >> + # use medlow as the default value. >> + case "${with_cmodel}" in >> + medlow | medany | compact) >> + ;; >> + *) >> + echo "invalid option for --with-cmodel: '${with_cmodel}', available values are 'medlow' 'medany' 'compact'" 1>&2 >> + exit 1 >> + ;; >> + esac >> + tm_defines="${tm_defines} TARGET_RISCV_DEFAULT_CMODEL=${with_cmodel}" >> + fi >> ;; >> >> mips*-*-*) >> @@ -6071,7 +6086,7 @@ case ${target} in >> esac >> >> t= >> -all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa" >> +all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa cmodel" >> for option in $all_defaults >> do >> eval "val=\$with_"`echo $option | sed s/-/_/g` >> diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h >> index 6f040011864..68173ebccb4 100644 >> --- a/gcc/config/riscv/riscv.h >> +++ b/gcc/config/riscv/riscv.h >> @@ -65,6 +65,7 @@ extern const char *riscv_arch_help (int argc, const char **argv); >> --with-tune is ignored if -mtune or -mcpu is specified. >> --with-isa-spec is ignored if -misa-spec is specified. >> --with-tls is ignored if -mtls-dialect is specified. >> + --with-cmodel is ignored if -mcmodel is specified. >> >> But using default -march/-mtune value if -mcpu don't have valid option. */ >> #define OPTION_DEFAULT_SPECS \ >> @@ -77,6 +78,7 @@ extern const char *riscv_arch_help (int argc, const char **argv); >> {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \ >> {"isa_spec", "%{!misa-spec=*:-misa-spec=%(VALUE)}" }, \ >> {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"}, \ >> + {"cmodel", "%{!mcmodel=*:-mcmodel=%(VALUE)}" }, \ >> >> #ifdef IN_LIBGCC2 >> #undef TARGET_64BIT >> diff --git a/gcc/configure b/gcc/configure >> index 557ea5fa3ac..826caf8dc2c 100755 >> --- a/gcc/configure >> +++ b/gcc/configure >> @@ -1000,6 +1000,7 @@ with_changes_root_url >> enable_languages >> with_multilib_list >> with_multilib_generator >> +with_cmodel >> with_zstd >> with_zstd_include >> with_zstd_lib >> @@ -1880,6 +1881,7 @@ Optional Packages: >> SH and x86-64 only) >> --with-multilib-generator >> Multi-libs configuration string (RISC-V only) >> + --with-cmodel Code model configuration string (RISC-V only) >> --with-zstd=PATH specify prefix directory for installed zstd library. >> Equivalent to --with-zstd-include=PATH/include plus >> --with-zstd-lib=PATH/lib >> @@ -8381,6 +8383,15 @@ else >> fi >> >> >> + >> +# Check whether --with-cmodel was given. >> +if test "${with_cmodel+set}" = set; then : >> + withval=$with_cmodel; : >> +else >> + with_cmodel=medlow >> +fi >> + >> + >> # ------------------------- >> # Checks for other programs >> # ------------------------- >> @@ -21406,7 +21417,7 @@ else >> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 >> lt_status=$lt_dlunknown >> cat > conftest.$ac_ext <<_LT_EOF >> -#line 21409 "configure" >> +#line 21420 "configure" >> #include "confdefs.h" >> >> #if HAVE_DLFCN_H >> @@ -21512,7 +21523,7 @@ else >> lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 >> lt_status=$lt_dlunknown >> cat > conftest.$ac_ext <<_LT_EOF >> -#line 21515 "configure" >> +#line 21526 "configure" >> #include "confdefs.h" >> >> #if HAVE_DLFCN_H >> diff --git a/gcc/configure.ac <http://configure.ac/> b/gcc/configure.ac <http://configure.ac/> >> index eaa01d0d7e5..1339bb2ba3b 100644 >> --- a/gcc/configure.ac <http://configure.ac/> >> +++ b/gcc/configure.ac <http://configure.ac/> >> @@ -1212,6 +1212,11 @@ AC_ARG_WITH(multilib-generator, >> :, >> with_multilib_generator=default) >> >> +AC_ARG_WITH(cmodel, >> +[AS_HELP_STRING([--with-cmodel], [Code model configuration string (RISC-V only)])], >> +:, >> +with_cmodel=medlow) >> + >> # ------------------------- >> # Checks for other programs >> # ------------------------- >> diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi >> index 4973f195daf..53f8dd21e37 100644 >> --- a/gcc/doc/install.texi >> +++ b/gcc/doc/install.texi >> @@ -1519,6 +1519,10 @@ Use big endian by default. Provide a multilib for little endian. >> Use little endian by default. Provide a multilib for big endian. >> @end table >> >> +@item --with-cmodel=@var{cmodel} >> +Specify what code model to use by default. >> +Currently only implemented for riscv*-*-*. >> + >> @item --enable-threads >> Specify that the target >> supports threads. This affects the Objective-C compiler and runtime >> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi >> index 54ecd9a00eb..f219cd3db19 100644 >> --- a/gcc/doc/invoke.texi >> +++ b/gcc/doc/invoke.texi >> @@ -31285,8 +31285,10 @@ element-misaligned vector memory access. >> @item -mcmodel=medlow >> Generate code for the medium-low code model. The program and its statically >> defined symbols must lie within a single 2 GiB address range and must lie >> -between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be >> -statically or dynamically linked. This is the default code model. >> +between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be statically >> +or dynamically linked. This is the default code model unless GCC has been >> +configured with @option{--with-cmodel=} specifying a different default code >> +model. >> >> @opindex mcmodel=medany >> @item -mcmodel=medany >> -- >> 2.39.3 >>
diff --git a/gcc/config.gcc b/gcc/config.gcc index a36dd1bcbc6..a4537d4b940 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -4723,7 +4723,7 @@ case "${target}" in ;; riscv*-*-*) - supported_defaults="abi arch tune riscv_attribute isa_spec tls" + supported_defaults="abi arch tune riscv_attribute isa_spec tls cmodel" case "${target}" in riscv-* | riscv32*) xlen=32 ;; @@ -4879,6 +4879,21 @@ case "${target}" in exit 1 esac fi + + # Handle --with-cmodel. + if test "x${with_cmodel}" != xdefault; then + # Make sure --with-cmodel is valid. If it was not specified, + # use medlow as the default value. + case "${with_cmodel}" in + medlow | medany | compact) + ;; + *) + echo "invalid option for --with-cmodel: '${with_cmodel}', available values are 'medlow' 'medany' 'compact'" 1>&2 + exit 1 + ;; + esac + tm_defines="${tm_defines} TARGET_RISCV_DEFAULT_CMODEL=${with_cmodel}" + fi ;; mips*-*-*) @@ -6071,7 +6086,7 @@ case ${target} in esac t= -all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa" +all_defaults="abi cpu cpu_32 cpu_64 arch arch_32 arch_64 tune tune_32 tune_64 schedule float mode fpu nan fp_32 odd_spreg_32 divide llsc mips-plt synci tls lxc1-sxc1 madd4 isa_spec compact-branches msa cmodel" for option in $all_defaults do eval "val=\$with_"`echo $option | sed s/-/_/g` diff --git a/gcc/config/riscv/riscv.h b/gcc/config/riscv/riscv.h index 6f040011864..68173ebccb4 100644 --- a/gcc/config/riscv/riscv.h +++ b/gcc/config/riscv/riscv.h @@ -65,6 +65,7 @@ extern const char *riscv_arch_help (int argc, const char **argv); --with-tune is ignored if -mtune or -mcpu is specified. --with-isa-spec is ignored if -misa-spec is specified. --with-tls is ignored if -mtls-dialect is specified. + --with-cmodel is ignored if -mcmodel is specified. But using default -march/-mtune value if -mcpu don't have valid option. */ #define OPTION_DEFAULT_SPECS \ @@ -77,6 +78,7 @@ extern const char *riscv_arch_help (int argc, const char **argv); {"abi", "%{!mabi=*:-mabi=%(VALUE)}" }, \ {"isa_spec", "%{!misa-spec=*:-misa-spec=%(VALUE)}" }, \ {"tls", "%{!mtls-dialect=*:-mtls-dialect=%(VALUE)}"}, \ + {"cmodel", "%{!mcmodel=*:-mcmodel=%(VALUE)}" }, \ #ifdef IN_LIBGCC2 #undef TARGET_64BIT diff --git a/gcc/configure b/gcc/configure index 557ea5fa3ac..826caf8dc2c 100755 --- a/gcc/configure +++ b/gcc/configure @@ -1000,6 +1000,7 @@ with_changes_root_url enable_languages with_multilib_list with_multilib_generator +with_cmodel with_zstd with_zstd_include with_zstd_lib @@ -1880,6 +1881,7 @@ Optional Packages: SH and x86-64 only) --with-multilib-generator Multi-libs configuration string (RISC-V only) + --with-cmodel Code model configuration string (RISC-V only) --with-zstd=PATH specify prefix directory for installed zstd library. Equivalent to --with-zstd-include=PATH/include plus --with-zstd-lib=PATH/lib @@ -8381,6 +8383,15 @@ else fi + +# Check whether --with-cmodel was given. +if test "${with_cmodel+set}" = set; then : + withval=$with_cmodel; : +else + with_cmodel=medlow +fi + + # ------------------------- # Checks for other programs # ------------------------- @@ -21406,7 +21417,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21409 "configure" +#line 21420 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -21512,7 +21523,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 21515 "configure" +#line 21526 "configure" #include "confdefs.h" #if HAVE_DLFCN_H diff --git a/gcc/configure.ac b/gcc/configure.ac index eaa01d0d7e5..1339bb2ba3b 100644 --- a/gcc/configure.ac +++ b/gcc/configure.ac @@ -1212,6 +1212,11 @@ AC_ARG_WITH(multilib-generator, :, with_multilib_generator=default) +AC_ARG_WITH(cmodel, +[AS_HELP_STRING([--with-cmodel], [Code model configuration string (RISC-V only)])], +:, +with_cmodel=medlow) + # ------------------------- # Checks for other programs # ------------------------- diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi index 4973f195daf..53f8dd21e37 100644 --- a/gcc/doc/install.texi +++ b/gcc/doc/install.texi @@ -1519,6 +1519,10 @@ Use big endian by default. Provide a multilib for little endian. Use little endian by default. Provide a multilib for big endian. @end table +@item --with-cmodel=@var{cmodel} +Specify what code model to use by default. +Currently only implemented for riscv*-*-*. + @item --enable-threads Specify that the target supports threads. This affects the Objective-C compiler and runtime diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 54ecd9a00eb..f219cd3db19 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -31285,8 +31285,10 @@ element-misaligned vector memory access. @item -mcmodel=medlow Generate code for the medium-low code model. The program and its statically defined symbols must lie within a single 2 GiB address range and must lie -between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be -statically or dynamically linked. This is the default code model. +between absolute addresses @minus{}2 GiB and +2 GiB. Programs can be statically +or dynamically linked. This is the default code model unless GCC has been +configured with @option{--with-cmodel=} specifying a different default code +model. @opindex mcmodel=medany @item -mcmodel=medany