Commit 5b01f1a5 by Georg-Johann Lay Committed by Georg-Johann Lay

Build double32 / long-double32 multilibs if needed.

gcc/
	Build double32 / long-double32 multilibs if needed.
	PR target/92055
	* config/avr/t-avr:
	(HAVE_DOUBLE_MULTILIB, HAVE_LONG_DOUBLE_MULTILIB): Remove vars.
	(HAVE_DOUBLE32, HAVE_LONG_DOUBLE32, WITH_LONG_DOUBLE)
	(HAVE_DOUBLE64, HAVE_LONG_DOUBLE64, WITH_DOUBLE): Set from
	tm_defines and pass to genmultilib.awk.
	* config/avr/genmultilib.awk: Use these variables to add double32
	and / or long-double32 multilib(s) as needed.
	* config/avr/driver-avr.c (avr_double_lib): Adjust comment.

From-SVN: r278668
parent f10d2d85
2019-11-25 Georg-Johann Lay <avr@gjlay.de>
Build double32 / long-double32 multilibs if needed.
PR target/92055
* config/avr/t-avr:
(HAVE_DOUBLE_MULTILIB, HAVE_LONG_DOUBLE_MULTILIB): Remove vars.
(HAVE_DOUBLE32, HAVE_LONG_DOUBLE32, WITH_LONG_DOUBLE)
(HAVE_DOUBLE64, HAVE_LONG_DOUBLE64, WITH_DOUBLE): Set from
tm_defines and pass to genmultilib.awk.
* config/avr/genmultilib.awk: Use these variables to add double32
and / or long-double32 multilib(s) as needed.
* config/avr/driver-avr.c (avr_double_lib): Adjust comment.
2019-11-25 Richard Biener <rguenther@suse.de> 2019-11-25 Richard Biener <rguenther@suse.de>
* cfgloop.h (get_loop_exit_edges): Add extra parameter denoting * cfgloop.h (get_loop_exit_edges): Add extra parameter denoting
...@@ -114,10 +114,7 @@ avr_devicespecs_file (int argc, const char **argv) ...@@ -114,10 +114,7 @@ avr_devicespecs_file (int argc, const char **argv)
/* Re-build the -mdouble= and -mlong-double= options. This is needed /* Re-build the -mdouble= and -mlong-double= options. This is needed
because multilib selection is based on the physical presence of an because these options are not independent of each other. */
option on the command line, which is not the case for, say, when the
double=64 multilib is to be selected by --with-double=64 but the user
does not specify -mdouble=64 explicitly. */
const char* const char*
avr_double_lib (int argc, const char **argv) avr_double_lib (int argc, const char **argv)
......
...@@ -38,12 +38,6 @@ BEGIN { ...@@ -38,12 +38,6 @@ BEGIN {
dir_rcall = "short-calls" dir_rcall = "short-calls"
opt_rcall = "mshort-calls" opt_rcall = "mshort-calls"
dir_double64 = "double64"
opt_double64 = "mdouble=64"
dir_long_double64 = "long-double64"
opt_long_double64 = "mlong-double=64"
# awk Variable Makefile Variable # awk Variable Makefile Variable
# ------------------------------------------ # ------------------------------------------
# m_options <-> MULTILIB_OPTIONS # m_options <-> MULTILIB_OPTIONS
...@@ -56,8 +50,23 @@ BEGIN { ...@@ -56,8 +50,23 @@ BEGIN {
m_required = "\nMULTILIB_REQUIRED =" m_required = "\nMULTILIB_REQUIRED ="
m_reuse = "\nMULTILIB_REUSE =" m_reuse = "\nMULTILIB_REUSE ="
have_double_multi = (HAVE_DOUBLE_MULTILIB == "HAVE_DOUBLE_MULTILIB") have_long_double_is_double = (HAVE_LONG_DOUBLE_IS_DOUBLE \
have_long_double_multi = (HAVE_LONG_DOUBLE_MULTILIB == "HAVE_LONG_DOUBLE_MULTILIB") == "HAVE_LONG_DOUBLE_IS_DOUBLE")
have_double32 = (HAVE_DOUBLE32 == "HAVE_DOUBLE32")
have_double64 = (HAVE_DOUBLE64 == "HAVE_DOUBLE64")
have_long_double32 = (HAVE_LONG_DOUBLE32 == "HAVE_LONG_DOUBLE32")
have_long_double64 = (HAVE_LONG_DOUBLE64 == "HAVE_LONG_DOUBLE64")
have_double_multi = (have_double32 && have_double64)
have_long_double_multi = (! have_long_double_is_double \
&& have_long_double32 && have_long_double64)
# How to switch away from the default.
dir_double = "double" (96 - with_double)
opt_double = "mdouble=" (96 - with_double)
dir_long_double = "long-double" (96 - with_long_double)
opt_long_double = "mlong-double=" (96 - with_long_double)
} }
################################################################## ##################################################################
...@@ -86,6 +95,26 @@ BEGIN { ...@@ -86,6 +95,26 @@ BEGIN {
# The first empty line stops copy-pasting the GPL comments # The first empty line stops copy-pasting the GPL comments
# from this file to the generated file. # from this file to the generated file.
if (comment)
{
print
if (have_double_multi)
{
print "# dir_double = " dir_double
print "# opt_double = -" opt_double
}
else
print "# No multilib for double."
if (have_long_double_multi)
{
print "# dir_long_double = " dir_long_double
print "# opt_long_double = -" opt_long_double
}
else
print "# No multilib for long double."
}
comment = 0 comment = 0
} }
...@@ -145,21 +174,30 @@ BEGIN { ...@@ -145,21 +174,30 @@ BEGIN {
m_required = m_required " \\\n\t" opts m_required = m_required " \\\n\t" opts
if (have_double_multi && have_long_double_multi) if (have_double_multi && have_long_double_multi)
{ {
m_required = m_required " \\\n\t" opts "/" opt_double64 m_required = m_required " \\\n\t" opts "/" opt_double
m_required = m_required " \\\n\t" opts "/" opt_long_double64 m_required = m_required " \\\n\t" opts "/" opt_long_double
# -mlong-double=64 -mdouble=64 is the same as -mdouble=64, # We have only 3 different combinations because -mdouble=64
# hence add a respective reuse. # implies -mlong-double=64, and -mlong-double=32 implies
d_opts = opts "/" opt_double64 # -mdouble=32, hence add respective reuses. The reuse is
d_reuse = opts "/" opt_double64 "/" opt_long_double64 # not needed in the case with_double != with_long_double
gsub (/=/, ".", d_opts) # which means with_double=32 with_long_double=64 because
gsub (/=/, ".", d_reuse) # the driver will rectify combining -mdouble=64 and
m_reuse = m_reuse " \\\n\t" d_opts "=" d_reuse # -mlong-double=32.
if (with_double == with_long_double)
{
d_opts = with_double == 32 ? opt_double : opt_long_double
d_opts = opts "/" d_opts
d_reuse = opts "/" opt_double "/" opt_long_double
gsub (/=/, ".", d_opts)
gsub (/=/, ".", d_reuse)
m_reuse = m_reuse " \\\n\t" d_opts "=" d_reuse
}
} }
else if (have_double_multi) else if (have_double_multi)
m_required = m_required " \\\n\t" opts "/" opt_double64 m_required = m_required " \\\n\t" opts "/" opt_double
else if (have_long_double_multi) else if (have_long_double_multi)
m_required = m_required " \\\n\t" opts "/" opt_long_double64 m_required = m_required " \\\n\t" opts "/" opt_long_double
} }
} }
} }
...@@ -177,26 +215,34 @@ END { ...@@ -177,26 +215,34 @@ END {
if (have_double_multi && have_long_double_multi) if (have_double_multi && have_long_double_multi)
{ {
print m_options " " opt_tiny " " opt_rcall " " opt_double64 "/" opt_long_double64 print m_options " " opt_tiny " " opt_rcall " " opt_double "/" opt_long_double
print m_dirnames " " dir_tiny " " dir_rcall " " dir_double64 " " dir_long_double64 print m_dirnames " " dir_tiny " " dir_rcall " " dir_double " " dir_long_double
# Notice that the ./double64 and ./long-double64 variants cannot # Notice that the ./double* and ./long-double* variants cannot
# be copied by t-avrlibc because the . default multilib is built # be copied by t-avrlibc because the . default multilib is built
# after all the others. # after all the others.
m_required = m_required " \\\n\t" opt_double64 m_required = m_required " \\\n\t" opt_double
m_required = m_required " \\\n\t" opt_long_double64 m_required = m_required " \\\n\t" opt_long_double
m_reuse = m_reuse " \\\n\tmdouble.64=mdouble.64/mlong-double.64" if (with_double == with_long_double)
{
d_opts = with_double == 32 ? opt_double : opt_long_double
d_reuse = opt_double "/" opt_long_double
gsub (/=/, ".", d_opts)
gsub (/=/, ".", d_reuse)
m_reuse = m_reuse " \\\n\t" d_opts "=" d_reuse
}
} }
else if (have_double_multi) else if (have_double_multi)
{ {
print m_options " " opt_tiny " " opt_rcall " " opt_double64 print m_options " " opt_tiny " " opt_rcall " " opt_double
print m_dirnames " " dir_tiny " " dir_rcall " " dir_double64 print m_dirnames " " dir_tiny " " dir_rcall " " dir_double
m_required = m_required " \\\n\t" opt_double64 m_required = m_required " \\\n\t" opt_double
} }
else if (have_long_double_multi) else if (have_long_double_multi)
{ {
print m_options " " opt_tiny " " opt_rcall " " opt_long_double64 print m_options " " opt_tiny " " opt_rcall " " opt_long_double
print m_dirnames " " dir_tiny " " dir_rcall " " dir_long_double64 print m_dirnames " " dir_tiny " " dir_rcall " " dir_long_double
m_required = m_required " \\\n\t" opt_long_double64 m_required = m_required " \\\n\t" opt_long_double
} }
else else
{ {
......
...@@ -16,8 +16,27 @@ ...@@ -16,8 +16,27 @@
# along with GCC; see the file COPYING3. If not see # along with GCC; see the file COPYING3. If not see
# <http://www.gnu.org/licenses/>. # <http://www.gnu.org/licenses/>.
HAVE_DOUBLE_MULTILIB = $(findstring HAVE_DOUBLE_MULTILIB, $(tm_defines)) HAVE_DOUBLE32 = $(findstring HAVE_DOUBLE32, $(tm_defines))
HAVE_LONG_DOUBLE_MULTILIB = $(findstring HAVE_LONG_DOUBLE_MULTILIB, $(tm_defines)) HAVE_DOUBLE64 = $(findstring HAVE_DOUBLE64, $(tm_defines))
HAVE_LONG_DOUBLE32 = $(findstring HAVE_LONG_DOUBLE32, $(tm_defines))
HAVE_LONG_DOUBLE64 = $(findstring HAVE_LONG_DOUBLE64, $(tm_defines))
HAVE_LONG_DOUBLE_IS_DOUBLE = $(findstring HAVE_LONG_DOUBLE_IS_DOUBLE, $(tm_defines))
ifeq (WITH_DOUBLE32, $(findstring WITH_DOUBLE32, $(tm_defines)))
WITH_DOUBLE=32
endif
ifeq (WITH_DOUBLE64, $(findstring WITH_DOUBLE64, $(tm_defines)))
WITH_DOUBLE=64
endif
ifeq (WITH_LONG_DOUBLE32, $(findstring WITH_LONG_DOUBLE32, $(tm_defines)))
WITH_LONG_DOUBLE=32
endif
ifeq (WITH_LONG_DOUBLE64, $(findstring WITH_LONG_DOUBLE64, $(tm_defines)))
WITH_LONG_DOUBLE=64
endif
PASSES_EXTRA += $(srcdir)/config/avr/avr-passes.def PASSES_EXTRA += $(srcdir)/config/avr/avr-passes.def
...@@ -101,8 +120,13 @@ multilib.h Makefile s-mlib: t-multilib-avr ...@@ -101,8 +120,13 @@ multilib.h Makefile s-mlib: t-multilib-avr
t-multilib-avr: $(srcdir)/config/avr/genmultilib.awk \ t-multilib-avr: $(srcdir)/config/avr/genmultilib.awk \
$(AVR_MCUS) $(AVR_MCUS)
$(AWK) -v HAVE_DOUBLE_MULTILIB=$(HAVE_DOUBLE_MULTILIB) \ $(AWK) -v HAVE_LONG_DOUBLE_IS_DOUBLE=$(HAVE_LONG_DOUBLE_IS_DOUBLE) \
-v HAVE_LONG_DOUBLE_MULTILIB=$(HAVE_LONG_DOUBLE_MULTILIB) \ -v HAVE_DOUBLE32=$(HAVE_DOUBLE32) \
-v HAVE_DOUBLE64=$(HAVE_DOUBLE64) \
-v HAVE_LONG_DOUBLE32=$(HAVE_LONG_DOUBLE32) \
-v HAVE_LONG_DOUBLE64=$(HAVE_LONG_DOUBLE64) \
-v with_double=$(WITH_DOUBLE) \
-v with_long_double=$(WITH_LONG_DOUBLE) \
-f $< $< $(AVR_MCUS) > $@ -f $< $< $(AVR_MCUS) > $@
include t-multilib-avr include t-multilib-avr
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment