RISC-V: Add with-multilib-list support.
gcc/ PR target/84797 * config.gcc (riscv*-*-*): Handle --with-multilib-list. * config/riscv/t-withmultilib: New. * config/riscv/withmultilib.h: New. * doc/install.texi: Document RISC-V --with-multilib-list support. From-SVN: r260096
This commit is contained in:
parent
6c882d0fdc
commit
f2410266a0
|
@ -1,3 +1,11 @@
|
|||
2018-05-09 Jim Wilson <jimw@sifive.com>
|
||||
|
||||
PR target/84797
|
||||
* config.gcc (riscv*-*-*): Handle --with-multilib-list.
|
||||
* config/riscv/t-withmultilib: New.
|
||||
* config/riscv/withmultilib.h: New.
|
||||
* doc/install.texi: Document RISC-V --with-multilib-list support.
|
||||
|
||||
2018-05-09 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* tree-vect-slp.c (vect_bb_slp_scalar_cost): Fill a cost
|
||||
|
|
|
@ -4121,6 +4121,58 @@ case "${target}" in
|
|||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Handle --with-multilib-list.
|
||||
if test "x${with_multilib_list}" != xdefault; then
|
||||
tm_file="${tm_file} riscv/withmultilib.h"
|
||||
tmake_file="${tmake_file} riscv/t-withmultilib"
|
||||
|
||||
case ${with_multilib_list} in
|
||||
ilp32 | ilp32f | ilp32d \
|
||||
| lp64 | lp64f | lp64d )
|
||||
TM_MULTILIB_CONFIG="${with_arch},${with_multilib_list}"
|
||||
;;
|
||||
*)
|
||||
echo "--with-multilib-list=${with_multilib_list} not supported."
|
||||
exit 1
|
||||
esac
|
||||
|
||||
# Define macros to select the default multilib.
|
||||
case ${with_arch} in
|
||||
rv32gc)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ARCH=1"
|
||||
;;
|
||||
rv64gc)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ARCH=2"
|
||||
;;
|
||||
*)
|
||||
echo "unsupported --with-arch for --with-multilib-list"
|
||||
exit 1
|
||||
esac
|
||||
case ${with_abi} in
|
||||
ilp32)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ABI=1"
|
||||
;;
|
||||
ilp32f)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ABI=2"
|
||||
;;
|
||||
ilp32d)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ABI=3"
|
||||
;;
|
||||
lp64)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ABI=4"
|
||||
;;
|
||||
lp64f)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ABI=5"
|
||||
;;
|
||||
lp64d)
|
||||
tm_defines="${tm_defines} TARGET_MLIB_ABI=6"
|
||||
;;
|
||||
*)
|
||||
echo "unsupported --with-abi for --with-multilib"
|
||||
exit 1
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
|
||||
mips*-*-*)
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
comma=,
|
||||
MULTILIB_OPTIONS = $(subst lp64,mabi=lp64,$(subst ilp32,mabi=ilp32,$(subst rv,march=rv,$(subst $(comma), ,$(TM_MULTILIB_CONFIG)))))
|
||||
MULTILIB_DIRNAMES = $(patsubst rv32%,lib32,$(patsubst rv64%,lib64,$(subst $(comma), ,$(TM_MULTILIB_CONFIG))))
|
||||
MULTILIB_OSDIRNAMES = $(subst lib,../lib,$(MULTILIB_DIRNAMES))
|
||||
MULTILIB_REQUIRED = $(subst lp64,mabi=lp64,$(subst ilp32,mabi=ilp32,$(subst rv,march=rv,$(subst $(comma),/,$(TM_MULTILIB_CONFIG)))))
|
||||
MULTILIB_REUSE =
|
|
@ -0,0 +1,51 @@
|
|||
/* MULTILIB_DEFAULTS definitions for --with-multilib-list.
|
||||
Copyright (C) 2018 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
GCC is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published
|
||||
by the Free Software Foundation; either version 3, or (at your
|
||||
option) any later version.
|
||||
|
||||
GCC is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
License for more details.
|
||||
|
||||
Under Section 7 of GPL version 3, you are granted additional
|
||||
permissions described in the GCC Runtime Library Exception, version
|
||||
3.1, as published by the Free Software Foundation.
|
||||
|
||||
You should have received a copy of the GNU General Public License and
|
||||
a copy of the GCC Runtime Library Exception along with this program;
|
||||
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#if TARGET_MLIB_ARCH == 1
|
||||
|
||||
# if TARGET_MLIB_ABI == 1
|
||||
# define MULTILIB_DEFAULTS {"march=rv32gc", "mabi=ilp32" }
|
||||
# elif TARGET_MLIB_ABI == 2
|
||||
# define MULTILIB_DEFAULTS {"march=rv32gc", "mabi=ilp32f" }
|
||||
# elif TARGET_MLIB_ABI == 3
|
||||
# define MULTILIB_DEFAULTS {"march=rv32gc", "mabi=ilp32d" }
|
||||
# else
|
||||
# error "unsupported TARGET_MLIB_ABI value for rv32gc"
|
||||
# endif
|
||||
|
||||
#elif TARGET_MLIB_ARCH == 2
|
||||
|
||||
# if TARGET_MLIB_ABI == 4
|
||||
# define MULTILIB_DEFAULTS {"march=rv64gc", "mabi=lp64" }
|
||||
# elif TARGET_MLIB_ABI == 5
|
||||
# define MULTILIB_DEFAULTS {"march=rv64gc", "mabi=lp64f" }
|
||||
# elif TARGET_MLIB_ABI == 6
|
||||
# define MULTILIB_DEFAULTS {"march=rv64gc", "mabi=lp64d" }
|
||||
# else
|
||||
# error "unsupported TARGET_MLIB_ABI value for rv64gc"
|
||||
# endif
|
||||
|
||||
#else
|
||||
# error "unsupported TARGET_MLIB_ARCH value"
|
||||
#endif
|
|
@ -1072,8 +1072,8 @@ sysv, aix.
|
|||
@itemx --without-multilib-list
|
||||
Specify what multilibs to build. @var{list} is a comma separated list of
|
||||
values, possibly consisting of a single value. Currently only implemented
|
||||
for arm*-*-*, sh*-*-* and x86-64-*-linux*. The accepted values and meaning
|
||||
for each target is given below.
|
||||
for arm*-*-*, riscv*-*-*, sh*-*-* and x86-64-*-linux*. The accepted
|
||||
values and meaning for each target is given below.
|
||||
|
||||
@table @code
|
||||
@item arm*-*-*
|
||||
|
@ -1128,6 +1128,13 @@ and @code{rmprofile}.
|
|||
@code{-mfloat-abi=hard}
|
||||
@end multitable
|
||||
|
||||
@item riscv*-*-*
|
||||
@var{list} is a single ABI name. The target architecture must be either
|
||||
@code{rv32gc} or @code{rv64gc}. This will build a single multilib for the
|
||||
specified architecture and ABI pair. If @code{--with-multilib-list} is not
|
||||
given, then a default set of multilibs is selected based on the value of
|
||||
@option{--target}. This is usually a large set of multilibs.
|
||||
|
||||
@item sh*-*-*
|
||||
@var{list} is a comma separated list of CPU names. These must be of the
|
||||
form @code{sh*} or @code{m*} (in which case they match the compiler option
|
||||
|
|
Loading…
Reference in New Issue