committee to trunk

On Thu, Dec 5, 2024 at 2:59 PM Kito Cheng <kito.ch...@sifive.com> wrote:
>
> From: Hau Hsu <hau....@sifive.com>
>
> 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.
>         (all_defaults): Add cmodel.
>         * config/riscv/riscv.h (TARGET_DEFAULT_CMODEL): Remove.
>         * doc/install.texi: Document --with-cmodel configure option.
>         * doc/invoke.texi (-mcmodel): Mention --with-cmodel configure option.
>
> Co-authored-by: Kito Cheng <kito.ch...@sifive.com>
>
> ---
>
> v3:
>
> I've confirmed the v2 of this patch will break all other target's build,
> and I've fixed the issue in this version, tested on AArch64, passed 3 stage
> bootstrap.
>
> Also clean up this patch to remove unnecessary changes.
>
> Will commit after CI pass.
>
>
> ---
>  gcc/config.gcc           | 23 +++++++++++++++++++++--
>  gcc/config/riscv/riscv.h |  2 --
>  gcc/doc/install.texi     |  4 ++++
>  gcc/doc/invoke.texi      |  6 ++++--
>  4 files changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/gcc/config.gcc b/gcc/config.gcc
> index afa78453197..f4ae14c6db2 100644
> --- a/gcc/config.gcc
> +++ b/gcc/config.gcc
> @@ -4711,7 +4711,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 ;;
> @@ -4867,6 +4867,25 @@ case "${target}" in
>                                 exit 1
>                         esac
>                 fi
> +
> +               # Handle --with-cmodel.
> +               # Make sure --with-cmodel is valid.  If it was not specified,
> +               # use medlow as the default value.
> +               case "${with_cmodel}" in
> +               "" | medlow)
> +                       tm_defines="${tm_defines} 
> TARGET_DEFAULT_CMODEL=CM_MEDLOW"
> +                       ;;
> +               medany)
> +                       tm_defines="${tm_defines} 
> TARGET_DEFAULT_CMODEL=CM_MEDANY"
> +                       ;;
> +               large)
> +                       tm_defines="${tm_defines} 
> TARGET_DEFAULT_CMODEL=CM_LARGE"
> +                       ;;
> +               *)
> +                       echo "invalid option for --with-cmodel: 
> '${with_cmodel}', available values are 'medlow' 'medany' 'large'" 1>&2
> +                       exit 1
> +                       ;;
> +               esac
>                 ;;
>
>         mips*-*-*)
> @@ -6046,7 +6065,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 8a8b08b6b51..09de74667a9 100644
> --- a/gcc/config/riscv/riscv.h
> +++ b/gcc/config/riscv/riscv.h
> @@ -119,8 +119,6 @@ ASM_MISA_SPEC
>  "%{march=*:%:riscv_expand_arch(%*)} "                          \
>  "%{!march=*:%{mcpu=*:%:riscv_expand_arch_from_cpu(%*)}} "
>
> -#define TARGET_DEFAULT_CMODEL CM_MEDLOW
> -
>  #define LOCAL_LABEL_PREFIX     "."
>  #define USER_LABEL_PREFIX      ""
>
> diff --git a/gcc/doc/install.texi b/gcc/doc/install.texi
> index 97d9aaffa69..4107697f10c 100644
> --- a/gcc/doc/install.texi
> +++ b/gcc/doc/install.texi
> @@ -1537,6 +1537,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 d2409a41d50..0107da32b64 100644
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -31092,8 +31092,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.34.1
>

Reply via email to