aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/avr/avr.c3
-rw-r--r--gcc/config/avr/avr.h13
-rw-r--r--gcc/config/avr/avr.md44
-rw-r--r--gcc/config/avr/t-avr6
5 files changed, 42 insertions, 34 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1cb5146..79b875c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2002-06-09 Marek Michalkiewicz <marekm@amelek.gda.pl>
+
+ * config/avr/avr.c (avr_mcu_types): Update for new devices.
+ * config/avr/avr.h (TARGET_SWITCHES, AVR_MEGA): Add -mshort-calls.
+ (LINK_SPEC, CRT_BINUTILS_SPECS): Update for new devices.
+ * config/avr/avr.md ("type" and "length" attributes): New type
+ "xcall", length 1 or 2 if AVR_MEGA. Use in all patterns that
+ output a single "call" or "rcall" insn depending on device size.
+ * config/avr/t-avr (MULTILIB_MATCHES): Update for new devices.
+
2002-06-09 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/{aix43.h,aix5.1} (ASM_CPU_SPEC): Add power3
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 56900ae..1f51c03 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -171,6 +171,7 @@ static const struct mcu_type_s avr_mcu_types[] = {
{ "at90s8515", 2, "__AVR_AT90S8515__" },
{ "at90c8534", 2, "__AVR_AT90C8534__" },
{ "at90s8535", 2, "__AVR_AT90S8535__" },
+ { "at86rf401", 2, "__AVR_AT86RF401__" },
/* Classic, > 8K. */
{ "avr3", 3, NULL },
{ "atmega103", 3, "__AVR_ATmega103__" },
@@ -182,12 +183,14 @@ static const struct mcu_type_s avr_mcu_types[] = {
{ "avr4", 4, NULL },
{ "atmega8", 4, "__AVR_ATmega8__" },
{ "atmega8515", 4, "__AVR_ATmega8515__" },
+ { "atmega8535", 4, "__AVR_ATmega8535__" },
/* Enhanced, > 8K. */
{ "avr5", 5, NULL },
{ "atmega16", 5, "__AVR_ATmega16__" },
{ "atmega161", 5, "__AVR_ATmega161__" },
{ "atmega162", 5, "__AVR_ATmega162__" },
{ "atmega163", 5, "__AVR_ATmega163__" },
+ { "atmega169", 5, "__AVR_ATmega169__" },
{ "atmega32", 5, "__AVR_ATmega32__" },
{ "atmega323", 5, "__AVR_ATmega323__" },
{ "atmega64", 5, "__AVR_ATmega64__" },
diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h
index d26bafd..5148f3e 100644
--- a/gcc/config/avr/avr.h
+++ b/gcc/config/avr/avr.h
@@ -58,6 +58,7 @@ extern int target_flags;
#define MASK_NO_INTERRUPTS 0x00020000
#define MASK_CALL_PROLOGUES 0x00040000
#define MASK_TINY_STACK 0x00080000
+#define MASK_SHORT_CALLS 0x00100000
#define TARGET_ORDER_1 (target_flags & MASK_ORDER_1)
#define TARGET_ORDER_2 (target_flags & MASK_ORDER_2)
@@ -67,6 +68,7 @@ extern int target_flags;
#define TARGET_CALL_PROLOGUES (target_flags & MASK_CALL_PROLOGUES)
#define TARGET_TINY_STACK (target_flags & MASK_TINY_STACK)
#define TARGET_NO_TABLEJUMP (target_flags & MASK_NO_TABLEJUMP)
+#define TARGET_SHORT_CALLS (target_flags & MASK_SHORT_CALLS)
/* Dump each assembler insn's rtl into the output file.
This is for debugging the compiler itself. */
@@ -86,6 +88,8 @@ extern int target_flags;
N_("Change only the low 8 bits of the stack pointer") }, \
{ "no-tablejump", MASK_NO_TABLEJUMP, \
N_("Do not generate tablejump insns") }, \
+ { "short-calls", MASK_SHORT_CALLS, \
+ N_("Use rjmp/rcall (limited range) on >8K devices") }, \
{ "rtl", MASK_RTL_DUMP, NULL }, \
{ "size", MASK_INSN_SIZE_DUMP, \
N_("Output instruction sizes to the asm file") }, \
@@ -101,7 +105,7 @@ extern int avr_mega_p;
extern int avr_enhanced_p;
extern int avr_asm_only_p;
-#define AVR_MEGA (avr_mega_p)
+#define AVR_MEGA (avr_mega_p && !TARGET_SHORT_CALLS)
#define AVR_ENHANCED (avr_enhanced_p)
#define TARGET_OPTIONS { \
@@ -2585,11 +2589,11 @@ extern int avr_case_values_threshold;
#define LINK_SPEC " %{!mmcu*:-m avr2}\
%{mmcu=at90s1200|mmcu=attiny1*|mmcu=attiny28:-m avr1} \
-%{mmcu=attiny22|mmcu=attiny26|mmcu=at90s2*|mmcu=at90s4*|mmcu=at90s8*|mmcu=at90c8*:-m avr2}\
+%{mmcu=attiny22|mmcu=attiny26|mmcu=at90s2*|mmcu=at90s4*|mmcu=at90s8*|mmcu=at90c8*|mmcu=at86rf401:-m avr2}\
%{mmcu=atmega103|mmcu=atmega603|mmcu=at43*|mmcu=at76*:-m avr3}\
%{mmcu=atmega8*:-m avr4}\
%{mmcu=atmega16*|mmcu=atmega32*|mmcu=atmega64|mmcu=atmega128|mmcu=at94k:-m avr5}\
-%{mmcu=atmega64|mmcu=atmega128|mmcu=atmega162: -Tdata 0x800100} "
+%{mmcu=atmega64|mmcu=atmega128|mmcu=atmega162|mmcu=atmega169: -Tdata 0x800100} "
/* A C string constant that tells the GNU CC driver program options to
pass to the linker. It can also specify how to translate options
@@ -2653,6 +2657,7 @@ extern int avr_case_values_threshold;
%{mmcu=at90s4434:crts4434.o%s} \
%{mmcu=at90c8534:crtc8534.o%s} \
%{mmcu=at90s8535:crts8535.o%s} \
+%{mmcu=at86rf401:crt86401.o%s} \
%{mmcu=atmega103|mmcu=avr3:crtm103.o%s} \
%{mmcu=atmega603:crtm603.o%s} \
%{mmcu=at43usb320:crt43320.o%s} \
@@ -2660,10 +2665,12 @@ extern int avr_case_values_threshold;
%{mmcu=at76c711:crt76711.o%s} \
%{mmcu=atmega8|mmcu=avr4:crtm8.o%s} \
%{mmcu=atmega8515:crtm8515.o%s} \
+%{mmcu=atmega8535:crtm8535.o%s} \
%{mmcu=atmega16:crtm16.o%s} \
%{mmcu=atmega161|mmcu=avr5:crtm161.o%s} \
%{mmcu=atmega162:crtm162.o%s} \
%{mmcu=atmega163:crtm163.o%s} \
+%{mmcu=atmega169:crtm169.o%s} \
%{mmcu=atmega32:crtm32.o%s} \
%{mmcu=atmega323:crtm323.o%s} \
%{mmcu=atmega64:crtm64.o%s} \
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md
index 08a468a..017b8a2 100644
--- a/gcc/config/avr/avr.md
+++ b/gcc/config/avr/avr.md
@@ -39,7 +39,7 @@
(define_attr "cc" "none,set_czn,set_zn,set_n,compare,clobber"
(const_string "none"))
-(define_attr "type" "branch,branch1,arith"
+(define_attr "type" "branch,branch1,arith,xcall"
(const_string "arith"))
(define_attr "mcu_enhanced" "yes,no"
@@ -80,7 +80,11 @@
(le (minus (pc) (match_dup 0))
(const_int 2043)))
(const_int 3)
- (const_int 4)))]
+ (const_int 4)))
+ (eq_attr "type" "xcall")
+ (if_then_else (eq_attr "mcu_mega" "no")
+ (const_int 1)
+ (const_int 2))]
(const_int 2)))
(define_insn "*pop1"
@@ -718,9 +722,7 @@
(clobber (reg:QI 22))]
"!AVR_ENHANCED"
"%~call __mulqi3"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
(define_insn "mulqihi3"
@@ -790,9 +792,7 @@
(clobber (reg:QI 21))]
"!AVR_ENHANCED"
"%~call __mulhi3"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
;; Operand 2 (reg:SI 18) not clobbered on the enhanced core.
@@ -813,9 +813,7 @@
(clobber (reg:HI 30))]
"AVR_ENHANCED"
"%~call __mulsi3"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
; / % / % / % / % / % / % / % / % / % / % / % / % / % / % / % / % / % / % / %
@@ -845,9 +843,7 @@
(clobber (reg:QI 23))]
""
"%~call __divmodqi4"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
(define_expand "udivmodqi4"
@@ -867,9 +863,7 @@
(clobber (reg:QI 23))]
""
"%~call __udivmodqi4"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
(define_expand "divmodhi4"
@@ -891,9 +885,7 @@
(clobber (reg:QI 21))]
""
"%~call __divmodhi4"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
(define_expand "udivmodhi4"
@@ -915,9 +907,7 @@
(clobber (reg:QI 21))]
""
"%~call __udivmodhi4"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
(define_expand "divmodsi4"
@@ -939,9 +929,7 @@
(clobber (reg:HI 30))]
""
"%~call __divmodsi4"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
(define_expand "udivmodsi4"
@@ -963,9 +951,7 @@
(clobber (reg:HI 30))]
""
"%~call __udivmodsi4"
- [(set (attr "length") (if_then_else (eq_attr "mcu_mega" "no")
- (const_int 1)
- (const_int 2)))
+ [(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
diff --git a/gcc/config/avr/t-avr b/gcc/config/avr/t-avr
index 769085b..9df673e 100644
--- a/gcc/config/avr/t-avr
+++ b/gcc/config/avr/t-avr
@@ -49,9 +49,11 @@ MULTILIB_MATCHES = \
mmcu?avr3=mmcu?atmega103 mmcu?avr3=mmcu?atmega603 \
mmcu?avr3=mmcu?at43usb320 mmcu?avr3=at43usb355 \
mmcu?avr3=mmcu?at76c711 \
- mmcu?avr4=mmcu?atmega8515 mmcu?avr4=mmcu?atmega8 \
+ mmcu?avr4=mmcu?atmega8515 mmcu?avr4=mmcu?atmega8535 \
+ mmcu?avr4=mmcu?atmega8 \
mmcu?avr5=mmcu?atmega161 mmcu?avr5=mmcu?atmega162 \
- mmcu?avr5=mmcu?atmega163 mmcu?avr5=mmcu?atmega16 \
+ mmcu?avr5=mmcu?atmega163 mmcu?avr5=mmcu?atmega169 \
+ mmcu?avr5=mmcu?atmega16 \
mmcu?avr5=mmcu?atmega323 mmcu?avr5=mmcu?atmega32 \
mmcu?avr5=mmcu?atmega64 mmcu?avr5=mmcu?atmega128 \
mmcu?avr5=mmcu?at94k