re PR target/52737 ([avr]: -mtiny-stack shall not influence multilib selection)

PR target/52737
	* contrib/gcc_update (files_and_dependencies):
	Remove gcc/config/avr/t-multilib from touch data.

gcc/
	PR target/52737
	* config.gcc (tm_file): Remove avr/multilib.h.

	* doc/invoke.texi (AVR Options): Adjust
	documentation of -mtiny-stack.

	* config/avr/genmultilib.awk: Remove code to generate multilib.h.
	(BEGIN): Use -msp8 as multilib option instead of -mtiny-stack.
	* config/avr/t-avr: Remove generation of multilib.h.
	* config/avr/t-multilib: Regenerate.
	* config/avr/multilib.h: Remove.
	* config/avr/avr.opt (-msp8): New option.
	(avr_sp8): New variable.
	* config/avr/driver-avr.c (avr_device_to_sp8): New function.
	* config/avr/avr.h (AVR_HAVE_SPH): New define.
	(AVR_HAVE_8BIT_SP): Also set by avr_sp8 i.e. -msp8.
	(avr_device_to_sp8): New prototype.
	(EXTRA_SPEC_FUNCTIONS): Add { "device_to_sp8", avr_device_to_sp8 }
	(DRIVER_SELF_SPECS): New define.
	* config/avr/avr-c.c (avr_cpu_cpp_builtins): New built-in defines:
	__AVR_SP8__, __AVR_HAVE_SPH__.
	* config/avr/avr.c (output_movhi): Use AVR_HAVE_SPH instead of
	AVR_HAVE_8BIT_SP to decide if SP_H is present.
	(avr_file_start): Ditto.
	
libgcc/
	PR target/52737
	* config/avr/lib1funcs.S: Use __AVR_HAVE_SPH__ for SP_H checks
	instead of __AVR_HAVE_8BIT_SP__.

From-SVN: r185907
This commit is contained in:
Georg-Johann Lay 2012-03-28 08:31:26 +00:00 committed by Georg-Johann Lay
parent be47bf24cb
commit 7fd6378ef4
16 changed files with 146 additions and 233 deletions

View File

@ -1,3 +1,9 @@
2012-03-28 Georg-Johann Lay <avr@gjlay.de>
PR target/52737
* contrib/gcc_update (files_and_dependencies):
Remove gcc/config/avr/t-multilib from touch data.
2012-03-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2012-03-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* MAINTAINERS (OS Port Maintainers): Remove irix. * MAINTAINERS (OS Port Maintainers): Remove irix.

View File

@ -83,7 +83,6 @@ gcc/config/arm/arm-tune.md: gcc/config/arm/arm-cores.def gcc/config/arm/gentune.
gcc/config/arm/arm-tables.opt: gcc/config/arm/arm-arches.def gcc/config/arm/arm-cores.def gcc/config/arm/arm-fpus.def gcc/config/arm/genopt.sh gcc/config/arm/arm-tables.opt: gcc/config/arm/arm-arches.def gcc/config/arm/arm-cores.def gcc/config/arm/arm-fpus.def gcc/config/arm/genopt.sh
gcc/config/avr/avr-tables.opt: gcc/config/avr/avr-mcus.def gcc/config/avr/genopt.sh gcc/config/avr/avr-tables.opt: gcc/config/avr/avr-mcus.def gcc/config/avr/genopt.sh
gcc/config/avr/t-multilib: gcc/config/avr/avr-mcus.def gcc/config/avr/genmultilib.awk gcc/config/avr/t-multilib: gcc/config/avr/avr-mcus.def gcc/config/avr/genmultilib.awk
gcc/config/avr/multilib.h: gcc/config/avr/avr-mcus.def gcc/config/avr/genmultilib.awk
gcc/config/c6x/c6x-tables.opt: gcc/config/c6x/c6x-isas.def gcc/config/c6x/genopt.sh gcc/config/c6x/c6x-tables.opt: gcc/config/c6x/c6x-isas.def gcc/config/c6x/genopt.sh
gcc/config/c6x/c6x-sched.md: gcc/config/c6x/c6x-sched.md.in gcc/config/c6x/gensched.sh gcc/config/c6x/c6x-sched.md: gcc/config/c6x/c6x-sched.md.in gcc/config/c6x/gensched.sh
gcc/config/c6x/c6x-mult.md: gcc/config/c6x/c6x-mult.md.in gcc/config/c6x/genmult.sh gcc/config/c6x/c6x-mult.md: gcc/config/c6x/c6x-mult.md.in gcc/config/c6x/genmult.sh

View File

@ -1,3 +1,30 @@
2012-03-28 Georg-Johann Lay <avr@gjlay.de>
PR target/52737
* config.gcc (tm_file): Remove avr/multilib.h.
* doc/invoke.texi (AVR Options): Adjust
documentation of -mtiny-stack.
* config/avr/genmultilib.awk: Remove code to generate multilib.h.
(BEGIN): Use -msp8 as multilib option instead of -mtiny-stack.
* config/avr/t-avr: Remove generation of multilib.h.
* config/avr/t-multilib: Regenerate.
* config/avr/multilib.h: Remove.
* config/avr/avr.opt (-msp8): New option.
(avr_sp8): New variable.
* config/avr/driver-avr.c (avr_device_to_sp8): New function.
* config/avr/avr.h (AVR_HAVE_SPH): New define.
(AVR_HAVE_8BIT_SP): Also set by avr_sp8 i.e. -msp8.
(avr_device_to_sp8): New prototype.
(EXTRA_SPEC_FUNCTIONS): Add { "device_to_sp8", avr_device_to_sp8 }
(DRIVER_SELF_SPECS): New define.
* config/avr/avr-c.c (avr_cpu_cpp_builtins): New built-in defines:
__AVR_SP8__, __AVR_HAVE_SPH__.
* config/avr/avr.c (output_movhi): Use AVR_HAVE_SPH instead of
AVR_HAVE_8BIT_SP to decide if SP_H is present.
(avr_file_start): Ditto.
2012-03-28 Jakub Jelinek <jakub@redhat.com> 2012-03-28 Jakub Jelinek <jakub@redhat.com>
PR target/52736 PR target/52736

View File

@ -898,13 +898,13 @@ arm*-wince-pe*)
extra_objs="pe.o" extra_objs="pe.o"
;; ;;
avr-*-rtems*) avr-*-rtems*)
tm_file="elfos.h avr/elf.h avr/avr.h avr/multilib.h dbxelf.h avr/rtems.h rtems.h newlib-stdint.h" tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h avr/rtems.h rtems.h newlib-stdint.h"
tmake_file="avr/t-avr avr/t-multilib t-rtems avr/t-rtems" tmake_file="avr/t-avr avr/t-multilib t-rtems avr/t-rtems"
extra_gcc_objs="driver-avr.o avr-devices.o" extra_gcc_objs="driver-avr.o avr-devices.o"
extra_objs="avr-devices.o avr-log.o" extra_objs="avr-devices.o avr-log.o"
;; ;;
avr-*-*) avr-*-*)
tm_file="elfos.h avr/elf.h avr/avr.h avr/multilib.h dbxelf.h newlib-stdint.h" tm_file="elfos.h avr/elf.h avr/avr.h dbxelf.h newlib-stdint.h"
tmake_file="avr/t-avr avr/t-multilib" tmake_file="avr/t-avr avr/t-multilib"
use_gcc_stdint=wrap use_gcc_stdint=wrap
extra_gcc_objs="driver-avr.o avr-devices.o" extra_gcc_objs="driver-avr.o avr-devices.o"

View File

@ -128,6 +128,12 @@ avr_cpu_cpp_builtins (struct cpp_reader *pfile)
else else
cpp_define (pfile, "__AVR_HAVE_16BIT_SP__"); cpp_define (pfile, "__AVR_HAVE_16BIT_SP__");
if (avr_sp8)
cpp_define (pfile, "__AVR_SP8__");
if (AVR_HAVE_SPH)
cpp_define (pfile, "__AVR_HAVE_SPH__");
if (TARGET_NO_INTERRUPTS) if (TARGET_NO_INTERRUPTS)
cpp_define (pfile, "__NO_INTERRUPTS__"); cpp_define (pfile, "__NO_INTERRUPTS__");

View File

@ -963,7 +963,7 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
{ {
/* Don't error so that insane code from newlib still compiles /* Don't error so that insane code from newlib still compiles
and does not break building newlib. As PR51345 is implemented and does not break building newlib. As PR51345 is implemented
now, there are multilib variants with -mtiny-stack. now, there are multilib variants with -msp8.
If user wants sanity checks he can use -Wstack-usage= If user wants sanity checks he can use -Wstack-usage=
or similar options. or similar options.
@ -2774,7 +2774,7 @@ output_movhi (rtx insn, rtx xop[], int *plen)
} }
else if (test_hard_reg_class (STACK_REG, src)) else if (test_hard_reg_class (STACK_REG, src))
{ {
return AVR_HAVE_8BIT_SP return !AVR_HAVE_SPH
? avr_asm_len ("in %A0,__SP_L__" CR_TAB ? avr_asm_len ("in %A0,__SP_L__" CR_TAB
"clr %B0", xop, plen, -2) "clr %B0", xop, plen, -2)
@ -7341,7 +7341,7 @@ avr_file_start (void)
/* Print I/O addresses of some SFRs used with IN and OUT. */ /* Print I/O addresses of some SFRs used with IN and OUT. */
if (!AVR_HAVE_8BIT_SP) if (AVR_HAVE_SPH)
fprintf (asm_out_file, "__SP_H__ = 0x%02x\n", avr_addr.sp_h - sfr_offset); fprintf (asm_out_file, "__SP_H__ = 0x%02x\n", avr_addr.sp_h - sfr_offset);
fprintf (asm_out_file, "__SP_L__ = 0x%02x\n", avr_addr.sp_l - sfr_offset); fprintf (asm_out_file, "__SP_L__ = 0x%02x\n", avr_addr.sp_l - sfr_offset);

View File

@ -188,7 +188,26 @@ enum
#define AVR_HAVE_RAMPZ (avr_current_arch->have_elpm \ #define AVR_HAVE_RAMPZ (avr_current_arch->have_elpm \
|| avr_current_arch->have_rampd) || avr_current_arch->have_rampd)
#define AVR_HAVE_EIJMP_EICALL (avr_current_arch->have_eijmp_eicall) #define AVR_HAVE_EIJMP_EICALL (avr_current_arch->have_eijmp_eicall)
#define AVR_HAVE_8BIT_SP (avr_current_device->short_sp || TARGET_TINY_STACK)
/* Handling of 8-bit SP versus 16-bit SP is as follows:
-msp8 is used internally to select the right multilib for targets with
8-bit SP. -msp8 is set automatically by DRIVER_SELF_SPECS for devices
with 8-bit SP or by multilib generation machinery. If a frame pointer is
needed and SP is only 8 bits wide, SP is zero-extended to get FP.
TARGET_TINY_STACK is triggered by -mtiny-stack which is a user option.
This option has no effect on multilib selection. It serves to save some
bytes on 16-bit SP devices by only changing SP_L and leaving SP_H alone.
These two properties are reflected by built-in macros __AVR_SP8__ resp.
__AVR_HAVE_8BIT_SP__ and __AVR_HAVE_16BIT_SP__. During multilib generation
there is always __AVR_SP8__ == __AVR_HAVE_8BIT_SP__. */
#define AVR_HAVE_8BIT_SP \
(avr_current_device->short_sp || TARGET_TINY_STACK || avr_sp8)
#define AVR_HAVE_SPH (!avr_sp8)
#define AVR_2_BYTE_PC (!AVR_HAVE_EIJMP_EICALL) #define AVR_2_BYTE_PC (!AVR_HAVE_EIJMP_EICALL)
#define AVR_3_BYTE_PC (AVR_HAVE_EIJMP_EICALL) #define AVR_3_BYTE_PC (AVR_HAVE_EIJMP_EICALL)
@ -577,13 +596,16 @@ extern const char *avr_device_to_arch (int argc, const char **argv);
extern const char *avr_device_to_data_start (int argc, const char **argv); extern const char *avr_device_to_data_start (int argc, const char **argv);
extern const char *avr_device_to_startfiles (int argc, const char **argv); extern const char *avr_device_to_startfiles (int argc, const char **argv);
extern const char *avr_device_to_devicelib (int argc, const char **argv); extern const char *avr_device_to_devicelib (int argc, const char **argv);
extern const char *avr_device_to_sp8 (int argc, const char **argv);
#define EXTRA_SPEC_FUNCTIONS \ #define EXTRA_SPEC_FUNCTIONS \
{ "device_to_arch", avr_device_to_arch }, \ { "device_to_arch", avr_device_to_arch }, \
{ "device_to_data_start", avr_device_to_data_start }, \ { "device_to_data_start", avr_device_to_data_start }, \
{ "device_to_startfile", avr_device_to_startfiles }, \ { "device_to_startfile", avr_device_to_startfiles }, \
{ "device_to_devicelib", avr_device_to_devicelib }, { "device_to_devicelib", avr_device_to_devicelib }, \
{ "device_to_sp8", avr_device_to_sp8 },
#define DRIVER_SELF_SPECS " %:device_to_sp8(%{mmcu=*:%*}) "
#define CPP_SPEC "" #define CPP_SPEC ""
#define CC1_SPEC "" #define CC1_SPEC ""

View File

@ -73,3 +73,7 @@ Accumulate outgoing function arguments and acquire/release the needed stack spac
mstrict-X mstrict-X
Target Report Var(avr_strict_X) Init(0) Target Report Var(avr_strict_X) Init(0)
When accessing RAM, use X as imposed by the hardware, i.e. just use pre-decrement, post-increment and indirect addressing with the X register. Without this option, the compiler may assume that there is an addressing mode X+const similar to Y+const and Z+const and emit instructions to emulate such an addressing mode for X. When accessing RAM, use X as imposed by the hardware, i.e. just use pre-decrement, post-increment and indirect addressing with the X register. Without this option, the compiler may assume that there is an addressing mode X+const similar to Y+const and Z+const and emit instructions to emulate such an addressing mode for X.
;; For rationale behind -msp8 see explanation in avr.h.
msp8
Target Report RejectNegative Undocumented Var(avr_sp8) Init(0)

View File

@ -112,3 +112,24 @@ avr_device_to_devicelib (int argc, const char **argv)
return concat ("-l", avr_current_device->library_name, NULL); return concat ("-l", avr_current_device->library_name, NULL);
} }
const char*
avr_device_to_sp8 (int argc, const char **argv)
{
if (0 == argc)
return NULL;
avr_set_current_device (argv[0]);
/* Leave "avr2" and "avr25" alone. These two architectures are
the only ones that mix devices with 8-bit SP and 16-bit SP.
-msp8 is set by mmultilib machinery. */
if (avr_current_device->macro == NULL
&& (avr_current_device->arch == ARCH_AVR2
|| avr_current_device->arch == ARCH_AVR25))
return "";
return avr_current_device->short_sp
? "-msp8"
: "%<msp8";
}

View File

@ -26,9 +26,6 @@
# FORMAT = "Makefile": Generate Makefile Snipet that sets some # FORMAT = "Makefile": Generate Makefile Snipet that sets some
# MULTILIB_* Variables as needed. # MULTILIB_* Variables as needed.
# #
# FORMAT = "multilib.h": Generate C Header intended to override
# (parts of) multilib.h used in gcc.c.
#
################################################################## ##################################################################
BEGIN { BEGIN {
@ -41,7 +38,7 @@ BEGIN {
mtiny[0] = "" mtiny[0] = ""
mtiny[1] = "tiny-stack" mtiny[1] = "tiny-stack"
option["tiny-stack"] = "mtiny-stack" option["tiny-stack"] = "msp8"
} }
################################################################## ##################################################################
@ -54,18 +51,6 @@ BEGIN {
next next
else if (comment == 1) else if (comment == 1)
{ {
if (FORMAT == "multilib.h")
{
print "/*"
print " Auto-generated C header"
print " Generated by : ./gcc/config/avr/genmultilib.awk"
print " Generated from : ./gcc/config/avr/avr-mcus.def"
print " Used by : ./gcc/gcc.c via tm.h"
print " Purpose : Override multilib_raw[] from multilib.h"
print "*/"
print "/*"
}
if (FORMAT == "Makefile") if (FORMAT == "Makefile")
{ {
print "# Auto-generated Makefile Snip" print "# Auto-generated Makefile Snip"
@ -78,15 +63,12 @@ BEGIN {
comment = 2; comment = 2;
if (FORMAT == "multilib.h")
gsub ("#", " ")
print print
} }
/^$/ { /^$/ {
if (comment && FORMAT == "multilib.h") # The first empty line stops copy-pasting the GPL comments
print "*/" # from this file to the generated file.
comment = 0 comment = 0
} }
@ -144,7 +126,6 @@ BEGIN {
# m_dirnames <-> MULTILIB_DIRNAMES " # m_dirnames <-> MULTILIB_DIRNAMES "
# m_exceptions <-> MULTILIB_EXCEPTIONS " # m_exceptions <-> MULTILIB_EXCEPTIONS "
# m_matches <-> MULTILIB_MATCHES " # m_matches <-> MULTILIB_MATCHES "
# m_raw <-> avr_multilib_raw multilib.h
# #
################################################################## ##################################################################
@ -154,11 +135,9 @@ END {
m_exceptions = "\nMULTILIB_EXCEPTIONS =" m_exceptions = "\nMULTILIB_EXCEPTIONS ="
m_matches = "\nMULTILIB_MATCHES =" m_matches = "\nMULTILIB_MATCHES ="
m_raw = ""
############################################################## ##############################################################
# Compose MULTILIB_OPTIONS. This represents the Cross-Product # Compose MULTILIB_OPTIONS. This represents the Cross-Product
# (avr2, avr25, ...) x mtiny-stack # (avr2, avr25, ...) x msp8
sep = "" sep = ""
for (c = 0; c < n_cores; c++) for (c = 0; c < n_cores; c++)
@ -167,54 +146,25 @@ END {
sep = "/" sep = "/"
} }
# The ... x mtiny-stack # The ... x msp8
m_options = m_options " " option[mtiny[1]] m_options = m_options " " option[mtiny[1]]
############################################################## ##############################################################
# Map Device to its multilib # Map Device to its multilib
# All Mappings that cannot be represented by GCC's genmultilib
# Machinery must be handcrafted.
dot_excludes = ""
m_raw_sp8 = ""
for (t = 0; t < n_mcu; t++) for (t = 0; t < n_mcu; t++)
{ {
core = toCore[mcu[t]] core = toCore[mcu[t]]
if (tiny_stack[mcu[t]] == 1) line = option[core] ":" option[mcu[t]]
{ gsub ("=", "?", line)
if (core == "avr2") gsub (":", "=", line)
dir = mtiny[1]
else
dir = core "/" mtiny[1]
m_raw_sp8 = m_raw_sp8 " \"" dir " " option[mcu[t]] ";\",\n" m_matches = m_matches " \\\n\t" line
dot_excludes = dot_excludes " !" option[mcu[t]]
line = option[mcu[t]] ":" option[mcu[t]]
gsub ("=", "?", line)
gsub (":", "=", line)
m_matches = m_matches " \\\n\t" line
}
# The SP = 16 Devices are vanilla: Do the same as
# MULTILIB_MATCHES would yield. Don't list avr2 (default)
if (core != "avr2")
{
line = option[core] ":" option[mcu[t]]
gsub ("=", "?", line)
gsub (":", "=", line)
m_matches = m_matches " \\\n\t" line
}
} }
#################################################################### ####################################################################
# Compose MULTILIB_DIRNAMES, MULTILIB_EXEPTIONS and avr_multilib_raw # Compose MULTILIB_DIRNAMES and MULTILIB_EXEPTIONS
n_mtiny = 2 n_mtiny = 2
for (t = 0; t < n_mtiny; t++) for (t = 0; t < n_mtiny; t++)
@ -248,38 +198,6 @@ END {
if (core != "avr2" || mtiny[t] == "") if (core != "avr2" || mtiny[t] == "")
m_dirnames = m_dirnames " " mdir m_dirnames = m_dirnames " " mdir
# Remainder deals with avr_multilib_raw Entries.
# Each Entry looks like
# "multilib-dir option-to-match !option-to-avoid-match;"
# for Example:
# "avr25/tiny-stack !mmcu=avr2 mmcu=avr25 !mmcu=avr3 ... mtiny-stack;"
if (mdir == "")
mdir = "."
line = mdir
for (s = 0; s < n_cores; s++)
{
if (cores[s] == core)
line = line " " option[cores[s]]
else
line = line " !" option[cores[s]]
}
if (tiny_stack[core] != 0)
{
if (mtiny[t] == "")
line = line " !" option[mtiny[1]]
else
line = line " " option[mtiny[1]]
}
if (mdir == ".")
line = line dot_excludes
m_raw = m_raw " \"" line ";\",\n"
} }
############################################################ ############################################################
@ -295,21 +213,4 @@ END {
print m_exceptions print m_exceptions
print m_matches print m_matches
} }
if (FORMAT == "multilib.h")
{
# Intended Target: ./gcc/config/avr/multilib.h
print "#if defined NULL && !defined AVR_MULTILIB_H"
print "#define AVR_MULTILIB_H"
print "static const char* const avr_multilib_raw[] = {"
print m_raw_sp8
print m_raw
print " NULL\n};"
print "#undef multilib_raw"
print "#define multilib_raw avr_multilib_raw"
print "#endif /* AVR_MULTILIB_H */"
}
} }

View File

@ -1,70 +0,0 @@
/*
Auto-generated C header
Generated by : ./gcc/config/avr/genmultilib.awk
Generated from : ./gcc/config/avr/avr-mcus.def
Used by : ./gcc/gcc.c via tm.h
Purpose : Override multilib_raw[] from multilib.h
*/
/*
Copyright (C) 2011 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.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>.
*/
#if defined NULL && !defined AVR_MULTILIB_H
#define AVR_MULTILIB_H
static const char* const avr_multilib_raw[] = {
"tiny-stack mmcu=at90s2313;",
"tiny-stack mmcu=at90s2323;",
"tiny-stack mmcu=at90s2333;",
"tiny-stack mmcu=at90s2343;",
"tiny-stack mmcu=attiny22;",
"tiny-stack mmcu=attiny26;",
"tiny-stack mmcu=at90s4433;",
"avr25/tiny-stack mmcu=attiny13;",
"avr25/tiny-stack mmcu=attiny13a;",
"avr25/tiny-stack mmcu=attiny2313;",
"avr25/tiny-stack mmcu=attiny2313a;",
"avr25/tiny-stack mmcu=attiny24;",
"avr25/tiny-stack mmcu=attiny24a;",
"avr25/tiny-stack mmcu=attiny25;",
"avr25/tiny-stack mmcu=attiny261;",
"avr25/tiny-stack mmcu=attiny261a;",
". !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7 !mtiny-stack !mmcu=at90s2313 !mmcu=at90s2323 !mmcu=at90s2333 !mmcu=at90s2343 !mmcu=attiny22 !mmcu=attiny26 !mmcu=at90s4433 !mmcu=attiny13 !mmcu=attiny13a !mmcu=attiny2313 !mmcu=attiny2313a !mmcu=attiny24 !mmcu=attiny24a !mmcu=attiny25 !mmcu=attiny261 !mmcu=attiny261a;",
"avr2 mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7 !mtiny-stack;",
"avr25 !mmcu=avr2 mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7 !mtiny-stack;",
"avr3 !mmcu=avr2 !mmcu=avr25 mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avr31 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avr35 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avr4 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avr5 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avr51 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avr6 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avrxmega2 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avrxmega4 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avrxmega5 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7;",
"avrxmega6 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 mmcu=avrxmega6 !mmcu=avrxmega7;",
"avrxmega7 !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 mmcu=avrxmega7;",
"tiny-stack !mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7 mtiny-stack;",
"avr2/tiny-stack mmcu=avr2 !mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7 mtiny-stack;",
"avr25/tiny-stack !mmcu=avr2 mmcu=avr25 !mmcu=avr3 !mmcu=avr31 !mmcu=avr35 !mmcu=avr4 !mmcu=avr5 !mmcu=avr51 !mmcu=avr6 !mmcu=avrxmega2 !mmcu=avrxmega4 !mmcu=avrxmega5 !mmcu=avrxmega6 !mmcu=avrxmega7 mtiny-stack;",
NULL
};
#undef multilib_raw
#define multilib_raw avr_multilib_raw
#endif /* AVR_MULTILIB_H */

View File

@ -49,16 +49,10 @@ $(srcdir)/config/avr/avr-tables.opt: $(srcdir)/config/avr/genopt.sh $(AVR_MCUS)
# MULTILIB_MATCHES # MULTILIB_MATCHES
$(srcdir)/config/avr/t-multilib: s-avr-mlib; @true $(srcdir)/config/avr/t-multilib: s-avr-mlib; @true
# Override multilib_raw[] from multilib.h
$(srcdir)/config/avr/multilib.h: s-avr-mlib; @true
s-mlib: $(srcdir)/config/avr/t-multilib s-mlib: $(srcdir)/config/avr/t-multilib
s-avr-mlib: $(srcdir)/config/avr/genmultilib.awk $(AVR_MCUS) s-avr-mlib: $(srcdir)/config/avr/genmultilib.awk $(AVR_MCUS)
$(AWK) -f $< -v FORMAT=Makefile $< $(AVR_MCUS) > tmp-avr-mlib $(AWK) -f $< -v FORMAT=Makefile $< $(AVR_MCUS) > tmp-avr-mlib
$(AWK) -f $< -v FORMAT=multilib.h $< $(AVR_MCUS) > tmp-avr-mlib.h
$(SHELL) $(srcdir)/../move-if-change \
tmp-avr-mlib.h $(srcdir)/config/avr/multilib.h
$(SHELL) $(srcdir)/../move-if-change \ $(SHELL) $(srcdir)/../move-if-change \
tmp-avr-mlib $(srcdir)/config/avr/t-multilib tmp-avr-mlib $(srcdir)/config/avr/t-multilib
$(STAMP) $@ $(STAMP) $@

View File

@ -21,57 +21,53 @@
# 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/>.
MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega2/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7 mtiny-stack MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega2/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7 msp8
MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega2 avrxmega4 avrxmega5 avrxmega6 avrxmega7 tiny-stack avr25/tiny-stack MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega2 avrxmega4 avrxmega5 avrxmega6 avrxmega7 tiny-stack avr25/tiny-stack
MULTILIB_EXCEPTIONS = \ MULTILIB_EXCEPTIONS = \
mmcu=avr3/mtiny-stack \ mmcu=avr3/msp8 \
mmcu=avr31/mtiny-stack \ mmcu=avr31/msp8 \
mmcu=avr35/mtiny-stack \ mmcu=avr35/msp8 \
mmcu=avr4/mtiny-stack \ mmcu=avr4/msp8 \
mmcu=avr5/mtiny-stack \ mmcu=avr5/msp8 \
mmcu=avr51/mtiny-stack \ mmcu=avr51/msp8 \
mmcu=avr6/mtiny-stack \ mmcu=avr6/msp8 \
mmcu=avrxmega2/mtiny-stack \ mmcu=avrxmega2/msp8 \
mmcu=avrxmega4/mtiny-stack \ mmcu=avrxmega4/msp8 \
mmcu=avrxmega5/mtiny-stack \ mmcu=avrxmega5/msp8 \
mmcu=avrxmega6/mtiny-stack \ mmcu=avrxmega6/msp8 \
mmcu=avrxmega7/mtiny-stack mmcu=avrxmega7/msp8
MULTILIB_MATCHES = \ MULTILIB_MATCHES = \
mmcu?at90s2313=mmcu?at90s2313 \ mmcu?avr2=mmcu?at90s2313 \
mmcu?at90s2323=mmcu?at90s2323 \ mmcu?avr2=mmcu?at90s2323 \
mmcu?at90s2333=mmcu?at90s2333 \ mmcu?avr2=mmcu?at90s2333 \
mmcu?at90s2343=mmcu?at90s2343 \ mmcu?avr2=mmcu?at90s2343 \
mmcu?attiny22=mmcu?attiny22 \ mmcu?avr2=mmcu?attiny22 \
mmcu?attiny26=mmcu?attiny26 \ mmcu?avr2=mmcu?attiny26 \
mmcu?at90s4433=mmcu?at90s4433 \ mmcu?avr2=mmcu?at90s4414 \
mmcu?avr2=mmcu?at90s4433 \
mmcu?avr2=mmcu?at90s4434 \
mmcu?avr2=mmcu?at90s8515 \
mmcu?avr2=mmcu?at90c8534 \
mmcu?avr2=mmcu?at90s8535 \
mmcu?avr25=mmcu?ata6289 \ mmcu?avr25=mmcu?ata6289 \
mmcu?attiny13=mmcu?attiny13 \
mmcu?avr25=mmcu?attiny13 \ mmcu?avr25=mmcu?attiny13 \
mmcu?attiny13a=mmcu?attiny13a \
mmcu?avr25=mmcu?attiny13a \ mmcu?avr25=mmcu?attiny13a \
mmcu?attiny2313=mmcu?attiny2313 \
mmcu?avr25=mmcu?attiny2313 \ mmcu?avr25=mmcu?attiny2313 \
mmcu?attiny2313a=mmcu?attiny2313a \
mmcu?avr25=mmcu?attiny2313a \ mmcu?avr25=mmcu?attiny2313a \
mmcu?attiny24=mmcu?attiny24 \
mmcu?avr25=mmcu?attiny24 \ mmcu?avr25=mmcu?attiny24 \
mmcu?attiny24a=mmcu?attiny24a \
mmcu?avr25=mmcu?attiny24a \ mmcu?avr25=mmcu?attiny24a \
mmcu?avr25=mmcu?attiny4313 \ mmcu?avr25=mmcu?attiny4313 \
mmcu?avr25=mmcu?attiny44 \ mmcu?avr25=mmcu?attiny44 \
mmcu?avr25=mmcu?attiny44a \ mmcu?avr25=mmcu?attiny44a \
mmcu?avr25=mmcu?attiny84 \ mmcu?avr25=mmcu?attiny84 \
mmcu?avr25=mmcu?attiny84a \ mmcu?avr25=mmcu?attiny84a \
mmcu?attiny25=mmcu?attiny25 \
mmcu?avr25=mmcu?attiny25 \ mmcu?avr25=mmcu?attiny25 \
mmcu?avr25=mmcu?attiny45 \ mmcu?avr25=mmcu?attiny45 \
mmcu?avr25=mmcu?attiny85 \ mmcu?avr25=mmcu?attiny85 \
mmcu?attiny261=mmcu?attiny261 \
mmcu?avr25=mmcu?attiny261 \ mmcu?avr25=mmcu?attiny261 \
mmcu?attiny261a=mmcu?attiny261a \
mmcu?avr25=mmcu?attiny261a \ mmcu?avr25=mmcu?attiny261a \
mmcu?avr25=mmcu?attiny461 \ mmcu?avr25=mmcu?attiny461 \
mmcu?avr25=mmcu?attiny461a \ mmcu?avr25=mmcu?attiny461a \

View File

@ -11131,8 +11131,7 @@ sbiw r26, const ; X -= const
@item -mtiny-stack @item -mtiny-stack
@opindex mtiny-stack @opindex mtiny-stack
Only use the lower 8@tie{}bits of the stack pointer and assume that the high Only change the lower 8@tie{}bits of the stack pointer.
byte of SP is always zero.
@end table @end table
@subsubsection @code{EIND} and Devices with more than 128 Ki Bytes of Flash @subsubsection @code{EIND} and Devices with more than 128 Ki Bytes of Flash

View File

@ -1,3 +1,9 @@
2012-03-28 Georg-Johann Lay <avr@gjlay.de>
PR target/52737
* config/avr/lib1funcs.S: Use __AVR_HAVE_SPH__ for SP_H checks
instead of __AVR_HAVE_8BIT_SP__.
2012-03-26 Tristan Gingold <gingold@adacore.com> 2012-03-26 Tristan Gingold <gingold@adacore.com>
* config/ia64/unwind-ia64.h: Declare unw_word and unw_sword. * config/ia64/unwind-ia64.h: Declare unw_word and unw_sword.

View File

@ -25,7 +25,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
#define __zero_reg__ r1 #define __zero_reg__ r1
#define __tmp_reg__ r0 #define __tmp_reg__ r0
#define __SREG__ 0x3f #define __SREG__ 0x3f
#if defined (__AVR_HAVE_SPH__)
#define __SP_H__ 0x3e #define __SP_H__ 0x3e
#endif
#define __SP_L__ 0x3d #define __SP_L__ 0x3d
#define __RAMPZ__ 0x3B #define __RAMPZ__ 0x3B
#define __EIND__ 0x3C #define __EIND__ 0x3C
@ -1258,7 +1260,7 @@ ENDF __divmodsi4
#if defined (__AVR_HAVE_JMP_CALL__) #if defined (__AVR_HAVE_JMP_CALL__)
# define SPEED_DIV 8 # define SPEED_DIV 8
#elif defined (__AVR_HAVE_MOVW__) && !defined (__AVR_HAVE_8BIT_SP__) #elif defined (__AVR_HAVE_MOVW__) && defined (__AVR_HAVE_SPH__)
# define SPEED_DIV 16 # define SPEED_DIV 16
#else #else
# define SPEED_DIV 0 # define SPEED_DIV 0
@ -1540,10 +1542,10 @@ DEFUN __divdi3_moddi3
4: ;; Epilogue: Restore the Z = 12 Registers and return 4: ;; Epilogue: Restore the Z = 12 Registers and return
in r28, __SP_L__ in r28, __SP_L__
#if defined (__AVR_HAVE_8BIT_SP__) #if defined (__AVR_HAVE_SPH__)
clr r29
#else
in r29, __SP_H__ in r29, __SP_H__
#else
clr r29
#endif /* #SP = 8/16 */ #endif /* #SP = 8/16 */
ldi r30, 12 ldi r30, 12
XJMP __epilogue_restores__ + ((18 - 12) * 2) XJMP __epilogue_restores__ + ((18 - 12) * 2)
@ -1691,7 +1693,7 @@ DEFUN __prologue_saves__
push r17 push r17
push r28 push r28
push r29 push r29
#if defined (__AVR_HAVE_8BIT_SP__) #if !defined (__AVR_HAVE_SPH__)
in r28,__SP_L__ in r28,__SP_L__
sub r28,r26 sub r28,r26
out __SP_L__,r28 out __SP_L__,r28
@ -1747,7 +1749,7 @@ DEFUN __epilogue_restores__
ldd r16,Y+4 ldd r16,Y+4
ldd r17,Y+3 ldd r17,Y+3
ldd r26,Y+2 ldd r26,Y+2
#if defined (__AVR_HAVE_8BIT_SP__) #if !defined (__AVR_HAVE_SPH__)
ldd r29,Y+1 ldd r29,Y+1
add r28,r30 add r28,r30
out __SP_L__,r28 out __SP_L__,r28