aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8/gcc/config/avr
diff options
context:
space:
mode:
authorsynergydev <synergye@codefi.re>2013-10-17 18:16:42 -0700
committersynergydev <synergye@codefi.re>2013-10-17 18:16:42 -0700
commit61c0330cc243abf13fdd01f377a7f80bd3989eb1 (patch)
tree119b08ae76294f23e2b1b7e72ff9a06afa9e8509 /gcc-4.8/gcc/config/avr
parent1c712bf7621f3859c33fd3afaa61fdcaf3fdfd76 (diff)
downloadtoolchain_gcc-61c0330cc243abf13fdd01f377a7f80bd3989eb1.tar.gz
toolchain_gcc-61c0330cc243abf13fdd01f377a7f80bd3989eb1.tar.bz2
toolchain_gcc-61c0330cc243abf13fdd01f377a7f80bd3989eb1.zip
[4.8] Merge GCC 4.8.2
Change-Id: I0f1fcf69c5076d8534c5c45562745e1a37adb197
Diffstat (limited to 'gcc-4.8/gcc/config/avr')
-rw-r--r--gcc-4.8/gcc/config/avr/avr-fixed.md51
-rw-r--r--gcc-4.8/gcc/config/avr/avr-mcus.def13
-rw-r--r--gcc-4.8/gcc/config/avr/avr-protos.h3
-rw-r--r--gcc-4.8/gcc/config/avr/avr-tables.opt331
-rw-r--r--gcc-4.8/gcc/config/avr/avr.c117
-rw-r--r--gcc-4.8/gcc/config/avr/avr.md2
-rw-r--r--gcc-4.8/gcc/config/avr/avr.opt2
-rw-r--r--gcc-4.8/gcc/config/avr/gen-avr-mmcu-texi.c16
-rw-r--r--gcc-4.8/gcc/config/avr/t-multilib13
9 files changed, 273 insertions, 275 deletions
diff --git a/gcc-4.8/gcc/config/avr/avr-fixed.md b/gcc-4.8/gcc/config/avr/avr-fixed.md
index 7d9b525ef..b2f0b9aa1 100644
--- a/gcc-4.8/gcc/config/avr/avr-fixed.md
+++ b/gcc-4.8/gcc/config/avr/avr-fixed.md
@@ -447,49 +447,18 @@
;; "roundqq3_const" "rounduqq3_const"
;; "roundhq3_const" "rounduhq3_const" "roundha3_const" "rounduha3_const"
;; "roundsq3_const" "roundusq3_const" "roundsa3_const" "roundusa3_const"
-(define_expand "round<mode>3_const"
- [(parallel [(match_operand:ALL124QA 0 "register_operand" "")
- (match_operand:ALL124QA 1 "register_operand" "")
- (match_operand:HI 2 "const_int_operand" "")])]
+(define_insn "round<mode>3_const"
+ [(set (match_operand:ALL124QA 0 "register_operand" "=d")
+ (unspec:ALL124QA [(match_operand:ALL124QA 1 "register_operand" "0")
+ (match_operand:HI 2 "const_int_operand" "n")
+ (const_int 0)]
+ UNSPEC_ROUND))]
""
{
- // The rounding point RP is $2. The smallest fractional
- // bit that is not cleared by the rounding is 2^(-RP).
-
- enum machine_mode imode = int_mode_for_mode (<MODE>mode);
- int fbit = (int) GET_MODE_FBIT (<MODE>mode);
-
- // Add-Saturate 1/2 * 2^(-RP)
-
- double_int i_add = double_int_zero.set_bit (fbit-1 - INTVAL (operands[2]));
- rtx x_add = const_fixed_from_double_int (i_add, <MODE>mode);
-
- if (SIGNED_FIXED_POINT_MODE_P (<MODE>mode))
- emit_move_insn (operands[0],
- gen_rtx_SS_PLUS (<MODE>mode, operands[1], x_add));
- else
- emit_move_insn (operands[0],
- gen_rtx_US_PLUS (<MODE>mode, operands[1], x_add));
-
- // Keep all bits from RP and higher: ... 2^(-RP)
- // Clear all bits from RP+1 and lower: 2^(-RP-1) ...
- // Rounding point ^^^^^^^
- // Added above ^^^^^^^^^
-
- rtx xreg = simplify_gen_subreg (imode, operands[0], <MODE>mode, 0);
- rtx xmask = immed_double_int_const (-i_add - i_add, imode);
-
- if (SImode == imode)
- emit_insn (gen_andsi3 (xreg, xreg, xmask));
- else if (HImode == imode)
- emit_insn (gen_andhi3 (xreg, xreg, xmask));
- else if (QImode == imode)
- emit_insn (gen_andqi3 (xreg, xreg, xmask));
- else
- gcc_unreachable();
-
- DONE;
- })
+ return avr_out_round (insn, operands);
+ }
+ [(set_attr "cc" "clobber")
+ (set_attr "adjust_len" "round")])
;; "*roundqq3.libgcc" "*rounduqq3.libgcc"
diff --git a/gcc-4.8/gcc/config/avr/avr-mcus.def b/gcc-4.8/gcc/config/avr/avr-mcus.def
index 2a730ac7a..f277d3687 100644
--- a/gcc-4.8/gcc/config/avr/avr-mcus.def
+++ b/gcc-4.8/gcc/config/avr/avr-mcus.def
@@ -168,7 +168,6 @@ AVR_MCU ("atmega169", ARCH_AVR5, "__AVR_ATmega169__", 0, 0, 0
AVR_MCU ("atmega169a", ARCH_AVR5, "__AVR_ATmega169A__", 0, 0, 0x0100, 1, "m169a")
AVR_MCU ("atmega169p", ARCH_AVR5, "__AVR_ATmega169P__", 0, 0, 0x0100, 1, "m169p")
AVR_MCU ("atmega169pa", ARCH_AVR5, "__AVR_ATmega169PA__", 0, 0, 0x0100, 1, "m169pa")
-AVR_MCU ("atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__", 0, 0, 0x0100, 1, "m16hva")
AVR_MCU ("atmega16hvb", ARCH_AVR5, "__AVR_ATmega16HVB__", 0, 0, 0x0100, 1, "m16hvb")
AVR_MCU ("atmega16hvbrevb", ARCH_AVR5, "__AVR_ATmega16HVBREVB__", 0, 0, 0x0100, 1, "m16hvbrevb")
AVR_MCU ("atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__", 0, 0, 0x0100, 1, "m16m1")
@@ -176,7 +175,6 @@ AVR_MCU ("atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__", 0, 0, 0
AVR_MCU ("atmega26hvg", ARCH_AVR5, "__AVR_ATmega26HVG__", 0, 0, 0x0100, 1, "m26hvg")
AVR_MCU ("atmega32a", ARCH_AVR5, "__AVR_ATmega32A__", 0, 0, 0x0060, 1, "m32a")
AVR_MCU ("atmega32", ARCH_AVR5, "__AVR_ATmega32__", 0, 0, 0x0060, 1, "m32")
-AVR_MCU ("atmega32a", ARCH_AVR5, "__AVR_ATmega32A__", 0, 0, 0x0060, 1, "m32a")
AVR_MCU ("atmega323", ARCH_AVR5, "__AVR_ATmega323__", 0, 0, 0x0060, 1, "m323")
AVR_MCU ("atmega324a", ARCH_AVR5, "__AVR_ATmega324A__", 0, 0, 0x0100, 1, "m324a")
AVR_MCU ("atmega324p", ARCH_AVR5, "__AVR_ATmega324P__", 0, 0, 0x0100, 1, "m324p")
@@ -222,7 +220,6 @@ AVR_MCU ("atmega649p", ARCH_AVR5, "__AVR_ATmega649P__", 0, 0, 0
AVR_MCU ("atmega6490", ARCH_AVR5, "__AVR_ATmega6490__", 0, 0, 0x0100, 1, "m6490")
AVR_MCU ("atmega16hva", ARCH_AVR5, "__AVR_ATmega16HVA__", 0, 0, 0x0100, 1, "m16hva")
AVR_MCU ("atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__", 0, 0, 0x0100, 1, "m16hva2")
-AVR_MCU ("atmega16hvb", ARCH_AVR5, "__AVR_ATmega16HVB__", 0, 0, 0x0100, 1, "m16hvb")
AVR_MCU ("atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__", 0, 0, 0x0100, 1, "m32hvb")
AVR_MCU ("atmega6490a", ARCH_AVR5, "__AVR_ATmega6490A__", 0, 0, 0x0100, 1, "m6490a")
AVR_MCU ("atmega6490p", ARCH_AVR5, "__AVR_ATmega6490P__", 0, 0, 0x0100, 1, "m6490p")
@@ -231,23 +228,13 @@ AVR_MCU ("atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__", 0, 0, 0
AVR_MCU ("atmega64hve", ARCH_AVR5, "__AVR_ATmega64HVE__", 0, 0, 0x0100, 1, "m64hve")
AVR_MCU ("atmega64rfa2", ARCH_AVR5, "__AVR_ATmega64RFA2__", 0, 0, 0x0200, 1, "m64rfa2")
AVR_MCU ("atmega64rfr2", ARCH_AVR5, "__AVR_ATmega64RFR2__", 0, 0, 0x0200, 1, "m64rfr2")
-AVR_MCU ("atmega32hvb", ARCH_AVR5, "__AVR_ATmega32HVB__", 0, 0, 0x0100, 1, "m32hvb")
AVR_MCU ("atmega32hvbrevb", ARCH_AVR5, "__AVR_ATmega32HVBREVB__", 0, 0, 0x0100, 1, "m32hvbrevb")
-AVR_MCU ("atmega16hva2", ARCH_AVR5, "__AVR_ATmega16HVA2__", 0, 0, 0x0100, 1, "m16hva2")
AVR_MCU ("atmega48hvf", ARCH_AVR5, "__AVR_ATmega48HVF__", 0, 0, 0x0100, 1, "m48hvf")
AVR_MCU ("at90can32", ARCH_AVR5, "__AVR_AT90CAN32__", 0, 0, 0x0100, 1, "can32")
AVR_MCU ("at90can64", ARCH_AVR5, "__AVR_AT90CAN64__", 0, 0, 0x0100, 1, "can64")
AVR_MCU ("at90pwm161", ARCH_AVR5, "__AVR_AT90PWM161__", 0, 0, 0x0100, 1, "90pwm161")
AVR_MCU ("at90pwm216", ARCH_AVR5, "__AVR_AT90PWM216__", 0, 0, 0x0100, 1, "90pwm216")
AVR_MCU ("at90pwm316", ARCH_AVR5, "__AVR_AT90PWM316__", 0, 0, 0x0100, 1, "90pwm316")
-AVR_MCU ("atmega32c1", ARCH_AVR5, "__AVR_ATmega32C1__", 0, 0, 0x0100, 1, "m32c1")
-AVR_MCU ("atmega64c1", ARCH_AVR5, "__AVR_ATmega64C1__", 0, 0, 0x0100, 1, "m64c1")
-AVR_MCU ("atmega16m1", ARCH_AVR5, "__AVR_ATmega16M1__", 0, 0, 0x0100, 1, "m16m1")
-AVR_MCU ("atmega32m1", ARCH_AVR5, "__AVR_ATmega32M1__", 0, 0, 0x0100, 1, "m32m1")
-AVR_MCU ("atmega64m1", ARCH_AVR5, "__AVR_ATmega64M1__", 0, 0, 0x0100, 1, "m64m1")
-AVR_MCU ("atmega16u4", ARCH_AVR5, "__AVR_ATmega16U4__", 0, 0, 0x0100, 1, "m16u4")
-AVR_MCU ("atmega32u4", ARCH_AVR5, "__AVR_ATmega32U4__", 0, 0, 0x0100, 1, "m32u4")
-AVR_MCU ("atmega32u6", ARCH_AVR5, "__AVR_ATmega32U6__", 0, 0, 0x0100, 1, "m32u6")
AVR_MCU ("at90scr100", ARCH_AVR5, "__AVR_AT90SCR100__", 0, 0, 0x0100, 1, "90scr100")
AVR_MCU ("at90usb646", ARCH_AVR5, "__AVR_AT90USB646__", 0, 0, 0x0100, 1, "usb646")
AVR_MCU ("at90usb647", ARCH_AVR5, "__AVR_AT90USB647__", 0, 0, 0x0100, 1, "usb647")
diff --git a/gcc-4.8/gcc/config/avr/avr-protos.h b/gcc-4.8/gcc/config/avr/avr-protos.h
index 5246d0637..21ad26a6f 100644
--- a/gcc-4.8/gcc/config/avr/avr-protos.h
+++ b/gcc-4.8/gcc/config/avr/avr-protos.h
@@ -86,7 +86,8 @@ extern int avr_starting_frame_offset (void);
extern void avr_output_addr_vec_elt (FILE *stream, int value);
extern const char *avr_out_sbxx_branch (rtx insn, rtx operands[]);
extern const char* avr_out_bitop (rtx, rtx*, int*);
-extern const char* avr_out_plus (rtx, rtx*, int* =NULL, int* =NULL);
+extern const char* avr_out_plus (rtx, rtx*, int* =NULL, int* =NULL, bool =true);
+extern const char* avr_out_round (rtx, rtx*, int* =NULL);
extern const char* avr_out_addto_sp (rtx*, int*);
extern const char* avr_out_xload (rtx, rtx*, int*);
extern const char* avr_out_movmem (rtx, rtx*, int*);
diff --git a/gcc-4.8/gcc/config/avr/avr-tables.opt b/gcc-4.8/gcc/config/avr/avr-tables.opt
index 1a451bda4..b101e00e7 100644
--- a/gcc-4.8/gcc/config/avr/avr-tables.opt
+++ b/gcc-4.8/gcc/config/avr/avr-tables.opt
@@ -330,479 +330,440 @@ EnumValue
Enum(avr_mcu) String(atmega169pa) Value(101)
EnumValue
-Enum(avr_mcu) String(atmega16hva) Value(102)
+Enum(avr_mcu) String(atmega16hvb) Value(102)
EnumValue
-Enum(avr_mcu) String(atmega16hvb) Value(103)
+Enum(avr_mcu) String(atmega16hvbrevb) Value(103)
EnumValue
-Enum(avr_mcu) String(atmega16hvbrevb) Value(104)
+Enum(avr_mcu) String(atmega16m1) Value(104)
EnumValue
-Enum(avr_mcu) String(atmega16m1) Value(105)
+Enum(avr_mcu) String(atmega16u4) Value(105)
EnumValue
-Enum(avr_mcu) String(atmega16u4) Value(106)
+Enum(avr_mcu) String(atmega26hvg) Value(106)
EnumValue
-Enum(avr_mcu) String(atmega26hvg) Value(107)
+Enum(avr_mcu) String(atmega32a) Value(107)
EnumValue
-Enum(avr_mcu) String(atmega32a) Value(108)
+Enum(avr_mcu) String(atmega32) Value(108)
EnumValue
-Enum(avr_mcu) String(atmega32) Value(109)
+Enum(avr_mcu) String(atmega323) Value(109)
EnumValue
-Enum(avr_mcu) String(atmega32a) Value(110)
+Enum(avr_mcu) String(atmega324a) Value(110)
EnumValue
-Enum(avr_mcu) String(atmega323) Value(111)
+Enum(avr_mcu) String(atmega324p) Value(111)
EnumValue
-Enum(avr_mcu) String(atmega324a) Value(112)
+Enum(avr_mcu) String(atmega324pa) Value(112)
EnumValue
-Enum(avr_mcu) String(atmega324p) Value(113)
+Enum(avr_mcu) String(atmega325) Value(113)
EnumValue
-Enum(avr_mcu) String(atmega324pa) Value(114)
+Enum(avr_mcu) String(atmega325a) Value(114)
EnumValue
-Enum(avr_mcu) String(atmega325) Value(115)
+Enum(avr_mcu) String(atmega325p) Value(115)
EnumValue
-Enum(avr_mcu) String(atmega325a) Value(116)
+Enum(avr_mcu) String(atmega3250) Value(116)
EnumValue
-Enum(avr_mcu) String(atmega325p) Value(117)
+Enum(avr_mcu) String(atmega3250a) Value(117)
EnumValue
-Enum(avr_mcu) String(atmega3250) Value(118)
+Enum(avr_mcu) String(atmega3250p) Value(118)
EnumValue
-Enum(avr_mcu) String(atmega3250a) Value(119)
+Enum(avr_mcu) String(atmega3250pa) Value(119)
EnumValue
-Enum(avr_mcu) String(atmega3250p) Value(120)
+Enum(avr_mcu) String(atmega328) Value(120)
EnumValue
-Enum(avr_mcu) String(atmega3250pa) Value(121)
+Enum(avr_mcu) String(atmega328p) Value(121)
EnumValue
-Enum(avr_mcu) String(atmega328) Value(122)
+Enum(avr_mcu) String(atmega329) Value(122)
EnumValue
-Enum(avr_mcu) String(atmega328p) Value(123)
+Enum(avr_mcu) String(atmega329a) Value(123)
EnumValue
-Enum(avr_mcu) String(atmega329) Value(124)
+Enum(avr_mcu) String(atmega329p) Value(124)
EnumValue
-Enum(avr_mcu) String(atmega329a) Value(125)
+Enum(avr_mcu) String(atmega329pa) Value(125)
EnumValue
-Enum(avr_mcu) String(atmega329p) Value(126)
+Enum(avr_mcu) String(atmega3290) Value(126)
EnumValue
-Enum(avr_mcu) String(atmega329pa) Value(127)
+Enum(avr_mcu) String(atmega3290a) Value(127)
EnumValue
-Enum(avr_mcu) String(atmega3290) Value(128)
+Enum(avr_mcu) String(atmega3290p) Value(128)
EnumValue
-Enum(avr_mcu) String(atmega3290a) Value(129)
+Enum(avr_mcu) String(atmega3290pa) Value(129)
EnumValue
-Enum(avr_mcu) String(atmega3290p) Value(130)
+Enum(avr_mcu) String(atmega32c1) Value(130)
EnumValue
-Enum(avr_mcu) String(atmega3290pa) Value(131)
+Enum(avr_mcu) String(atmega32m1) Value(131)
EnumValue
-Enum(avr_mcu) String(atmega32c1) Value(132)
+Enum(avr_mcu) String(atmega32u4) Value(132)
EnumValue
-Enum(avr_mcu) String(atmega32m1) Value(133)
+Enum(avr_mcu) String(atmega32u6) Value(133)
EnumValue
-Enum(avr_mcu) String(atmega32u4) Value(134)
+Enum(avr_mcu) String(atmega406) Value(134)
EnumValue
-Enum(avr_mcu) String(atmega32u6) Value(135)
+Enum(avr_mcu) String(atmega64) Value(135)
EnumValue
-Enum(avr_mcu) String(atmega406) Value(136)
+Enum(avr_mcu) String(atmega64a) Value(136)
EnumValue
-Enum(avr_mcu) String(atmega64) Value(137)
+Enum(avr_mcu) String(atmega640) Value(137)
EnumValue
-Enum(avr_mcu) String(atmega64a) Value(138)
+Enum(avr_mcu) String(atmega644) Value(138)
EnumValue
-Enum(avr_mcu) String(atmega640) Value(139)
+Enum(avr_mcu) String(atmega644a) Value(139)
EnumValue
-Enum(avr_mcu) String(atmega644) Value(140)
+Enum(avr_mcu) String(atmega644p) Value(140)
EnumValue
-Enum(avr_mcu) String(atmega644a) Value(141)
+Enum(avr_mcu) String(atmega644pa) Value(141)
EnumValue
-Enum(avr_mcu) String(atmega644p) Value(142)
+Enum(avr_mcu) String(atmega645) Value(142)
EnumValue
-Enum(avr_mcu) String(atmega644pa) Value(143)
+Enum(avr_mcu) String(atmega645a) Value(143)
EnumValue
-Enum(avr_mcu) String(atmega645) Value(144)
+Enum(avr_mcu) String(atmega645p) Value(144)
EnumValue
-Enum(avr_mcu) String(atmega645a) Value(145)
+Enum(avr_mcu) String(atmega6450) Value(145)
EnumValue
-Enum(avr_mcu) String(atmega645p) Value(146)
+Enum(avr_mcu) String(atmega6450a) Value(146)
EnumValue
-Enum(avr_mcu) String(atmega6450) Value(147)
+Enum(avr_mcu) String(atmega6450p) Value(147)
EnumValue
-Enum(avr_mcu) String(atmega6450a) Value(148)
+Enum(avr_mcu) String(atmega649) Value(148)
EnumValue
-Enum(avr_mcu) String(atmega6450p) Value(149)
+Enum(avr_mcu) String(atmega649a) Value(149)
EnumValue
-Enum(avr_mcu) String(atmega649) Value(150)
+Enum(avr_mcu) String(atmega649p) Value(150)
EnumValue
-Enum(avr_mcu) String(atmega649a) Value(151)
+Enum(avr_mcu) String(atmega6490) Value(151)
EnumValue
-Enum(avr_mcu) String(atmega649p) Value(152)
+Enum(avr_mcu) String(atmega16hva) Value(152)
EnumValue
-Enum(avr_mcu) String(atmega6490) Value(153)
+Enum(avr_mcu) String(atmega16hva2) Value(153)
EnumValue
-Enum(avr_mcu) String(atmega16hva) Value(154)
+Enum(avr_mcu) String(atmega32hvb) Value(154)
EnumValue
-Enum(avr_mcu) String(atmega16hva2) Value(155)
+Enum(avr_mcu) String(atmega6490a) Value(155)
EnumValue
-Enum(avr_mcu) String(atmega16hvb) Value(156)
+Enum(avr_mcu) String(atmega6490p) Value(156)
EnumValue
-Enum(avr_mcu) String(atmega32hvb) Value(157)
+Enum(avr_mcu) String(atmega64c1) Value(157)
EnumValue
-Enum(avr_mcu) String(atmega6490a) Value(158)
+Enum(avr_mcu) String(atmega64m1) Value(158)
EnumValue
-Enum(avr_mcu) String(atmega6490p) Value(159)
+Enum(avr_mcu) String(atmega64hve) Value(159)
EnumValue
-Enum(avr_mcu) String(atmega64c1) Value(160)
+Enum(avr_mcu) String(atmega64rfa2) Value(160)
EnumValue
-Enum(avr_mcu) String(atmega64m1) Value(161)
+Enum(avr_mcu) String(atmega64rfr2) Value(161)
EnumValue
-Enum(avr_mcu) String(atmega64hve) Value(162)
+Enum(avr_mcu) String(atmega32hvbrevb) Value(162)
EnumValue
-Enum(avr_mcu) String(atmega64rfa2) Value(163)
+Enum(avr_mcu) String(atmega48hvf) Value(163)
EnumValue
-Enum(avr_mcu) String(atmega64rfr2) Value(164)
+Enum(avr_mcu) String(at90can32) Value(164)
EnumValue
-Enum(avr_mcu) String(atmega32hvb) Value(165)
+Enum(avr_mcu) String(at90can64) Value(165)
EnumValue
-Enum(avr_mcu) String(atmega32hvbrevb) Value(166)
+Enum(avr_mcu) String(at90pwm161) Value(166)
EnumValue
-Enum(avr_mcu) String(atmega16hva2) Value(167)
+Enum(avr_mcu) String(at90pwm216) Value(167)
EnumValue
-Enum(avr_mcu) String(atmega48hvf) Value(168)
+Enum(avr_mcu) String(at90pwm316) Value(168)
EnumValue
-Enum(avr_mcu) String(at90can32) Value(169)
+Enum(avr_mcu) String(at90scr100) Value(169)
EnumValue
-Enum(avr_mcu) String(at90can64) Value(170)
+Enum(avr_mcu) String(at90usb646) Value(170)
EnumValue
-Enum(avr_mcu) String(at90pwm161) Value(171)
+Enum(avr_mcu) String(at90usb647) Value(171)
EnumValue
-Enum(avr_mcu) String(at90pwm216) Value(172)
+Enum(avr_mcu) String(at94k) Value(172)
EnumValue
-Enum(avr_mcu) String(at90pwm316) Value(173)
+Enum(avr_mcu) String(m3000) Value(173)
EnumValue
-Enum(avr_mcu) String(atmega32c1) Value(174)
+Enum(avr_mcu) String(avr51) Value(174)
EnumValue
-Enum(avr_mcu) String(atmega64c1) Value(175)
+Enum(avr_mcu) String(atmega128) Value(175)
EnumValue
-Enum(avr_mcu) String(atmega16m1) Value(176)
+Enum(avr_mcu) String(atmega128a) Value(176)
EnumValue
-Enum(avr_mcu) String(atmega32m1) Value(177)
+Enum(avr_mcu) String(atmega1280) Value(177)
EnumValue
-Enum(avr_mcu) String(atmega64m1) Value(178)
+Enum(avr_mcu) String(atmega1281) Value(178)
EnumValue
-Enum(avr_mcu) String(atmega16u4) Value(179)
+Enum(avr_mcu) String(atmega1284) Value(179)
EnumValue
-Enum(avr_mcu) String(atmega32u4) Value(180)
+Enum(avr_mcu) String(atmega1284p) Value(180)
EnumValue
-Enum(avr_mcu) String(atmega32u6) Value(181)
+Enum(avr_mcu) String(atmega128rfa1) Value(181)
EnumValue
-Enum(avr_mcu) String(at90scr100) Value(182)
+Enum(avr_mcu) String(at90can128) Value(182)
EnumValue
-Enum(avr_mcu) String(at90usb646) Value(183)
+Enum(avr_mcu) String(at90usb1286) Value(183)
EnumValue
-Enum(avr_mcu) String(at90usb647) Value(184)
+Enum(avr_mcu) String(at90usb1287) Value(184)
EnumValue
-Enum(avr_mcu) String(at94k) Value(185)
+Enum(avr_mcu) String(avr6) Value(185)
EnumValue
-Enum(avr_mcu) String(m3000) Value(186)
+Enum(avr_mcu) String(atmega2560) Value(186)
EnumValue
-Enum(avr_mcu) String(avr51) Value(187)
+Enum(avr_mcu) String(atmega2561) Value(187)
EnumValue
-Enum(avr_mcu) String(atmega128) Value(188)
+Enum(avr_mcu) String(avrxmega2) Value(188)
EnumValue
-Enum(avr_mcu) String(atmega128a) Value(189)
+Enum(avr_mcu) String(atxmega16a4) Value(189)
EnumValue
-Enum(avr_mcu) String(atmega1280) Value(190)
+Enum(avr_mcu) String(atxmega16d4) Value(190)
EnumValue
-Enum(avr_mcu) String(atmega1281) Value(191)
+Enum(avr_mcu) String(atxmega16x1) Value(191)
EnumValue
-Enum(avr_mcu) String(atmega1284) Value(192)
+Enum(avr_mcu) String(atxmega32a4) Value(192)
EnumValue
-Enum(avr_mcu) String(atmega1284p) Value(193)
+Enum(avr_mcu) String(atxmega32d4) Value(193)
EnumValue
-Enum(avr_mcu) String(atmega128rfa1) Value(194)
+Enum(avr_mcu) String(atxmega32x1) Value(194)
EnumValue
-Enum(avr_mcu) String(at90can128) Value(195)
+Enum(avr_mcu) String(atmxt112sl) Value(195)
EnumValue
-Enum(avr_mcu) String(at90usb1286) Value(196)
+Enum(avr_mcu) String(atmxt224) Value(196)
EnumValue
-Enum(avr_mcu) String(at90usb1287) Value(197)
+Enum(avr_mcu) String(atmxt224e) Value(197)
EnumValue
-Enum(avr_mcu) String(avr6) Value(198)
+Enum(avr_mcu) String(atmxt336s) Value(198)
EnumValue
-Enum(avr_mcu) String(atmega2560) Value(199)
+Enum(avr_mcu) String(atxmega16a4u) Value(199)
EnumValue
-Enum(avr_mcu) String(atmega2561) Value(200)
+Enum(avr_mcu) String(atxmega16c4) Value(200)
EnumValue
-Enum(avr_mcu) String(avrxmega2) Value(201)
+Enum(avr_mcu) String(atxmega32a4u) Value(201)
EnumValue
-Enum(avr_mcu) String(atxmega16a4) Value(202)
+Enum(avr_mcu) String(atxmega32c4) Value(202)
EnumValue
-Enum(avr_mcu) String(atxmega16d4) Value(203)
+Enum(avr_mcu) String(atxmega32e5) Value(203)
EnumValue
-Enum(avr_mcu) String(atxmega16x1) Value(204)
+Enum(avr_mcu) String(avrxmega4) Value(204)
EnumValue
-Enum(avr_mcu) String(atxmega32a4) Value(205)
+Enum(avr_mcu) String(atxmega64a3) Value(205)
EnumValue
-Enum(avr_mcu) String(atxmega32d4) Value(206)
+Enum(avr_mcu) String(atxmega64d3) Value(206)
EnumValue
-Enum(avr_mcu) String(atxmega32x1) Value(207)
+Enum(avr_mcu) String(atxmega64a3u) Value(207)
EnumValue
-Enum(avr_mcu) String(atmxt112sl) Value(208)
+Enum(avr_mcu) String(atxmega64a4u) Value(208)
EnumValue
-Enum(avr_mcu) String(atmxt224) Value(209)
+Enum(avr_mcu) String(atxmega64b1) Value(209)
EnumValue
-Enum(avr_mcu) String(atmxt224e) Value(210)
+Enum(avr_mcu) String(atxmega64b3) Value(210)
EnumValue
-Enum(avr_mcu) String(atmxt336s) Value(211)
+Enum(avr_mcu) String(atxmega64c3) Value(211)
EnumValue
-Enum(avr_mcu) String(atxmega16a4u) Value(212)
+Enum(avr_mcu) String(atxmega64d4) Value(212)
EnumValue
-Enum(avr_mcu) String(atxmega16c4) Value(213)
+Enum(avr_mcu) String(avrxmega5) Value(213)
EnumValue
-Enum(avr_mcu) String(atxmega32a4u) Value(214)
+Enum(avr_mcu) String(atxmega64a1) Value(214)
EnumValue
-Enum(avr_mcu) String(atxmega32c4) Value(215)
+Enum(avr_mcu) String(atxmega64a1u) Value(215)
EnumValue
-Enum(avr_mcu) String(atxmega32e5) Value(216)
+Enum(avr_mcu) String(avrxmega6) Value(216)
EnumValue
-Enum(avr_mcu) String(avrxmega4) Value(217)
+Enum(avr_mcu) String(atxmega128a3) Value(217)
EnumValue
-Enum(avr_mcu) String(atxmega64a3) Value(218)
+Enum(avr_mcu) String(atxmega128d3) Value(218)
EnumValue
-Enum(avr_mcu) String(atxmega64d3) Value(219)
+Enum(avr_mcu) String(atxmega192a3) Value(219)
EnumValue
-Enum(avr_mcu) String(atxmega64a3u) Value(220)
+Enum(avr_mcu) String(atxmega192d3) Value(220)
EnumValue
-Enum(avr_mcu) String(atxmega64a4u) Value(221)
+Enum(avr_mcu) String(atxmega256a3) Value(221)
EnumValue
-Enum(avr_mcu) String(atxmega64b1) Value(222)
+Enum(avr_mcu) String(atxmega256a3b) Value(222)
EnumValue
-Enum(avr_mcu) String(atxmega64b3) Value(223)
+Enum(avr_mcu) String(atxmega256a3bu) Value(223)
EnumValue
-Enum(avr_mcu) String(atxmega64c3) Value(224)
+Enum(avr_mcu) String(atxmega256d3) Value(224)
EnumValue
-Enum(avr_mcu) String(atxmega64d4) Value(225)
+Enum(avr_mcu) String(atxmega128a3u) Value(225)
EnumValue
-Enum(avr_mcu) String(avrxmega5) Value(226)
+Enum(avr_mcu) String(atxmega128b1) Value(226)
EnumValue
-Enum(avr_mcu) String(atxmega64a1) Value(227)
+Enum(avr_mcu) String(atxmega128b3) Value(227)
EnumValue
-Enum(avr_mcu) String(atxmega64a1u) Value(228)
+Enum(avr_mcu) String(atxmega128c3) Value(228)
EnumValue
-Enum(avr_mcu) String(avrxmega6) Value(229)
+Enum(avr_mcu) String(atxmega128d4) Value(229)
EnumValue
-Enum(avr_mcu) String(atxmega128a3) Value(230)
+Enum(avr_mcu) String(atmxt540s) Value(230)
EnumValue
-Enum(avr_mcu) String(atxmega128d3) Value(231)
+Enum(avr_mcu) String(atmxt540sreva) Value(231)
EnumValue
-Enum(avr_mcu) String(atxmega192a3) Value(232)
+Enum(avr_mcu) String(atxmega192a3u) Value(232)
EnumValue
-Enum(avr_mcu) String(atxmega192d3) Value(233)
+Enum(avr_mcu) String(atxmega192c3) Value(233)
EnumValue
-Enum(avr_mcu) String(atxmega256a3) Value(234)
+Enum(avr_mcu) String(atxmega256a3u) Value(234)
EnumValue
-Enum(avr_mcu) String(atxmega256a3b) Value(235)
+Enum(avr_mcu) String(atxmega256c3) Value(235)
EnumValue
-Enum(avr_mcu) String(atxmega256a3bu) Value(236)
+Enum(avr_mcu) String(atxmega384c3) Value(236)
EnumValue
-Enum(avr_mcu) String(atxmega256d3) Value(237)
+Enum(avr_mcu) String(atxmega384d3) Value(237)
EnumValue
-Enum(avr_mcu) String(atxmega128a3u) Value(238)
+Enum(avr_mcu) String(avrxmega7) Value(238)
EnumValue
-Enum(avr_mcu) String(atxmega128b1) Value(239)
+Enum(avr_mcu) String(atxmega128a1) Value(239)
EnumValue
-Enum(avr_mcu) String(atxmega128b3) Value(240)
+Enum(avr_mcu) String(atxmega128a1u) Value(240)
EnumValue
-Enum(avr_mcu) String(atxmega128c3) Value(241)
+Enum(avr_mcu) String(atxmega128a4u) Value(241)
EnumValue
-Enum(avr_mcu) String(atxmega128d4) Value(242)
+Enum(avr_mcu) String(avr1) Value(242)
EnumValue
-Enum(avr_mcu) String(atmxt540s) Value(243)
+Enum(avr_mcu) String(at90s1200) Value(243)
EnumValue
-Enum(avr_mcu) String(atmxt540sreva) Value(244)
+Enum(avr_mcu) String(attiny11) Value(244)
EnumValue
-Enum(avr_mcu) String(atxmega192a3u) Value(245)
+Enum(avr_mcu) String(attiny12) Value(245)
EnumValue
-Enum(avr_mcu) String(atxmega192c3) Value(246)
+Enum(avr_mcu) String(attiny15) Value(246)
EnumValue
-Enum(avr_mcu) String(atxmega256a3u) Value(247)
-
-EnumValue
-Enum(avr_mcu) String(atxmega256c3) Value(248)
-
-EnumValue
-Enum(avr_mcu) String(atxmega384c3) Value(249)
-
-EnumValue
-Enum(avr_mcu) String(atxmega384d3) Value(250)
-
-EnumValue
-Enum(avr_mcu) String(avrxmega7) Value(251)
-
-EnumValue
-Enum(avr_mcu) String(atxmega128a1) Value(252)
-
-EnumValue
-Enum(avr_mcu) String(atxmega128a1u) Value(253)
-
-EnumValue
-Enum(avr_mcu) String(atxmega128a4u) Value(254)
-
-EnumValue
-Enum(avr_mcu) String(avr1) Value(255)
-
-EnumValue
-Enum(avr_mcu) String(at90s1200) Value(256)
-
-EnumValue
-Enum(avr_mcu) String(attiny11) Value(257)
-
-EnumValue
-Enum(avr_mcu) String(attiny12) Value(258)
-
-EnumValue
-Enum(avr_mcu) String(attiny15) Value(259)
-
-EnumValue
-Enum(avr_mcu) String(attiny28) Value(260)
+Enum(avr_mcu) String(attiny28) Value(247)
diff --git a/gcc-4.8/gcc/config/avr/avr.c b/gcc-4.8/gcc/config/avr/avr.c
index c916d6bcf..74872aa6c 100644
--- a/gcc-4.8/gcc/config/avr/avr.c
+++ b/gcc-4.8/gcc/config/avr/avr.c
@@ -584,7 +584,12 @@ avr_set_current_function (tree decl)
{
tree args = TYPE_ARG_TYPES (TREE_TYPE (decl));
tree ret = TREE_TYPE (TREE_TYPE (decl));
- const char *name = IDENTIFIER_POINTER (DECL_NAME (decl));
+ const char *name;
+
+ name = DECL_ASSEMBLER_NAME_SET_P (decl)
+ /* Remove the leading '*' added in set_user_assembler_name. */
+ ? 1 + IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl))
+ : IDENTIFIER_POINTER (DECL_NAME (decl));
/* Silently ignore 'signal' if 'interrupt' is present. AVR-LibC startet
using this when it switched from SIGNAL and INTERRUPT to ISR. */
@@ -1112,7 +1117,7 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
leaf function and thus X has already been saved. */
int irq_state = -1;
- HOST_WIDE_INT size_cfa = size;
+ HOST_WIDE_INT size_cfa = size, neg_size;
rtx fp_plus_insns, fp, my_fp;
gcc_assert (frame_pointer_needed
@@ -1151,6 +1156,7 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
}
size = trunc_int_for_mode (size, GET_MODE (my_fp));
+ neg_size = trunc_int_for_mode (-size, GET_MODE (my_fp));
/************ Method 1: Adjust frame pointer ************/
@@ -1171,7 +1177,8 @@ avr_prologue_setup_frame (HOST_WIDE_INT size, HARD_REG_SET set)
}
insn = emit_move_insn (my_fp, plus_constant (GET_MODE (my_fp),
- my_fp, -size));
+ my_fp, neg_size));
+
if (frame_pointer_needed)
{
RTX_FRAME_RELATED_P (insn) = 1;
@@ -6225,11 +6232,14 @@ lshrsi3_out (rtx insn, rtx operands[], int *len)
the subtrahend in the original insn, provided it is a compile time constant.
In all other cases, SIGN is 0.
- Return "". */
+ If OUT_LABEL is true, print the final 0: label which is needed for
+ saturated addition / subtraction. The only case where OUT_LABEL = false
+ is useful is for saturated addition / subtraction performed during
+ fixed-point rounding, cf. `avr_out_round'. */
static void
avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
- enum rtx_code code_sat = UNKNOWN, int sign = 0)
+ enum rtx_code code_sat, int sign, bool out_label)
{
/* MODE of the operation. */
enum machine_mode mode = GET_MODE (xop[0]);
@@ -6668,7 +6678,8 @@ avr_out_plus_1 (rtx *xop, int *plen, enum rtx_code code, int *pcc,
"mov %r0+5,%0", xop, plen, 4);
}
- avr_asm_len ("0:", op, plen, 0);
+ if (out_label)
+ avr_asm_len ("0:", op, plen, 0);
}
@@ -6706,8 +6717,8 @@ avr_out_plus_symbol (rtx *xop, enum rtx_code code, int *plen, int *pcc)
/* Prepare operands of addition/subtraction to be used with avr_out_plus_1.
- INSN is a single_set insn with a binary operation as SET_SRC that is
- one of: PLUS, SS_PLUS, US_PLUS, MINUS, SS_MINUS, US_MINUS.
+ INSN is a single_set insn or an insn pattern with a binary operation as
+ SET_SRC that is one of: PLUS, SS_PLUS, US_PLUS, MINUS, SS_MINUS, US_MINUS.
XOP are the operands of INSN. In the case of 64-bit operations with
constant XOP[] has just one element: The summand/subtrahend in XOP[0].
@@ -6722,19 +6733,22 @@ avr_out_plus_symbol (rtx *xop, enum rtx_code code, int *plen, int *pcc)
PLEN and PCC default to NULL.
+ OUT_LABEL defaults to TRUE. For a description, see AVR_OUT_PLUS_1.
+
Return "" */
const char*
-avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc)
+avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc, bool out_label)
{
int cc_plus, cc_minus, cc_dummy;
int len_plus, len_minus;
rtx op[4];
- rtx xdest = SET_DEST (single_set (insn));
+ rtx xpattern = INSN_P (insn) ? single_set (insn) : insn;
+ rtx xdest = SET_DEST (xpattern);
enum machine_mode mode = GET_MODE (xdest);
enum machine_mode imode = int_mode_for_mode (mode);
int n_bytes = GET_MODE_SIZE (mode);
- enum rtx_code code_sat = GET_CODE (SET_SRC (single_set (insn)));
+ enum rtx_code code_sat = GET_CODE (SET_SRC (xpattern));
enum rtx_code code
= (PLUS == code_sat || SS_PLUS == code_sat || US_PLUS == code_sat
? PLUS : MINUS);
@@ -6749,7 +6763,7 @@ avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc)
if (n_bytes <= 4 && REG_P (xop[2]))
{
- avr_out_plus_1 (xop, plen, code, pcc, code_sat);
+ avr_out_plus_1 (xop, plen, code, pcc, code_sat, 0, out_label);
return "";
}
@@ -6776,7 +6790,8 @@ avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc)
/* Saturations and 64-bit operations don't have a clobber operand.
For the other cases, the caller will provide a proper XOP[3]. */
- op[3] = PARALLEL == GET_CODE (PATTERN (insn)) ? xop[3] : NULL_RTX;
+ xpattern = INSN_P (insn) ? PATTERN (insn) : insn;
+ op[3] = PARALLEL == GET_CODE (xpattern) ? xop[3] : NULL_RTX;
/* Saturation will need the sign of the original operand. */
@@ -6791,8 +6806,8 @@ avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc)
/* Work out the shortest sequence. */
- avr_out_plus_1 (op, &len_minus, MINUS, &cc_plus, code_sat, sign);
- avr_out_plus_1 (op, &len_plus, PLUS, &cc_minus, code_sat, sign);
+ avr_out_plus_1 (op, &len_minus, MINUS, &cc_plus, code_sat, sign, out_label);
+ avr_out_plus_1 (op, &len_plus, PLUS, &cc_minus, code_sat, sign, out_label);
if (plen)
{
@@ -6800,9 +6815,9 @@ avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc)
*pcc = (len_minus <= len_plus) ? cc_minus : cc_plus;
}
else if (len_minus <= len_plus)
- avr_out_plus_1 (op, NULL, MINUS, pcc, code_sat, sign);
+ avr_out_plus_1 (op, NULL, MINUS, pcc, code_sat, sign, out_label);
else
- avr_out_plus_1 (op, NULL, PLUS, pcc, code_sat, sign);
+ avr_out_plus_1 (op, NULL, PLUS, pcc, code_sat, sign, out_label);
return "";
}
@@ -6816,13 +6831,15 @@ avr_out_plus (rtx insn, rtx *xop, int *plen, int *pcc)
and return "". If PLEN == NULL, print assembler instructions to perform the
operation; otherwise, set *PLEN to the length of the instruction sequence
(in words) printed with PLEN == NULL. XOP[3] is either an 8-bit clobber
- register or SCRATCH if no clobber register is needed for the operation. */
+ register or SCRATCH if no clobber register is needed for the operation.
+ INSN is an INSN_P or a pattern of an insn. */
const char*
avr_out_bitop (rtx insn, rtx *xop, int *plen)
{
/* CODE and MODE of the operation. */
- enum rtx_code code = GET_CODE (SET_SRC (single_set (insn)));
+ rtx xpattern = INSN_P (insn) ? single_set (insn) : insn;
+ enum rtx_code code = GET_CODE (SET_SRC (xpattern));
enum machine_mode mode = GET_MODE (xop[0]);
/* Number of bytes to operate on. */
@@ -7325,6 +7342,67 @@ avr_out_fract (rtx insn, rtx operands[], bool intsigned, int *plen)
}
+/* Output fixed-point rounding. XOP[0] = XOP[1] is the operand to round.
+ XOP[2] is the rounding point, a CONST_INT. The function prints the
+ instruction sequence if PLEN = NULL and computes the length in words
+ of the sequence if PLEN != NULL. Most of this function deals with
+ preparing operands for calls to `avr_out_plus' and `avr_out_bitop'. */
+
+const char*
+avr_out_round (rtx insn ATTRIBUTE_UNUSED, rtx *xop, int *plen)
+{
+ enum machine_mode mode = GET_MODE (xop[0]);
+ enum machine_mode imode = int_mode_for_mode (mode);
+ // The smallest fractional bit not cleared by the rounding is 2^(-RP).
+ int fbit = (int) GET_MODE_FBIT (mode);
+ double_int i_add = double_int_zero.set_bit (fbit-1 - INTVAL (xop[2]));
+ // Lengths of PLUS and AND parts.
+ int len_add = 0, *plen_add = plen ? &len_add : NULL;
+ int len_and = 0, *plen_and = plen ? &len_and : NULL;
+
+ // Add-Saturate 1/2 * 2^(-RP). Don't print the label "0:" when printing
+ // the saturated addition so that we can emit the "rjmp 1f" before the
+ // "0:" below.
+
+ rtx xadd = const_fixed_from_double_int (i_add, mode);
+ rtx xpattern, xsrc, op[4];
+
+ xsrc = SIGNED_FIXED_POINT_MODE_P (mode)
+ ? gen_rtx_SS_PLUS (mode, xop[1], xadd)
+ : gen_rtx_US_PLUS (mode, xop[1], xadd);
+ xpattern = gen_rtx_SET (VOIDmode, xop[0], xsrc);
+
+ op[0] = xop[0];
+ op[1] = xop[1];
+ op[2] = xadd;
+ avr_out_plus (xpattern, op, plen_add, NULL, false /* Don't print "0:" */);
+
+ avr_asm_len ("rjmp 1f" CR_TAB
+ "0:", NULL, plen_add, 1);
+
+ // Keep all bits from RP and higher: ... 2^(-RP)
+ // Clear all bits from RP+1 and lower: 2^(-RP-1) ...
+ // Rounding point ^^^^^^^
+ // Added above ^^^^^^^^^
+ rtx xreg = simplify_gen_subreg (imode, xop[0], mode, 0);
+ rtx xmask = immed_double_int_const (-i_add - i_add, imode);
+
+ xpattern = gen_rtx_SET (VOIDmode, xreg, gen_rtx_AND (imode, xreg, xmask));
+
+ op[0] = xreg;
+ op[1] = xreg;
+ op[2] = xmask;
+ op[3] = gen_rtx_SCRATCH (QImode);
+ avr_out_bitop (xpattern, op, plen_and);
+ avr_asm_len ("1:", NULL, plen, 0);
+
+ if (plen)
+ *plen = len_add + len_and;
+
+ return "";
+}
+
+
/* Create RTL split patterns for byte sized rotate expressions. This
produces a series of move instructions and considers overlap situations.
Overlapping non-HImode operands need a scratch register. */
@@ -7533,6 +7611,7 @@ avr_adjust_insn_length (rtx insn, int len)
case ADJUST_LEN_SFRACT: avr_out_fract (insn, op, true, &len); break;
case ADJUST_LEN_UFRACT: avr_out_fract (insn, op, false, &len); break;
+ case ADJUST_LEN_ROUND: avr_out_round (insn, op, &len); break;
case ADJUST_LEN_TSTHI: avr_out_tsthi (insn, op, &len); break;
case ADJUST_LEN_TSTPSI: avr_out_tstpsi (insn, op, &len); break;
diff --git a/gcc-4.8/gcc/config/avr/avr.md b/gcc-4.8/gcc/config/avr/avr.md
index e9f5d038f..f2681233a 100644
--- a/gcc-4.8/gcc/config/avr/avr.md
+++ b/gcc-4.8/gcc/config/avr/avr.md
@@ -140,7 +140,7 @@
"out_bitop, plus, addto_sp,
tsthi, tstpsi, tstsi, compare, compare64, call,
mov8, mov16, mov24, mov32, reload_in16, reload_in24, reload_in32,
- ufract, sfract,
+ ufract, sfract, round,
xload, lpm, movmem,
ashlqi, ashrqi, lshrqi,
ashlhi, ashrhi, lshrhi,
diff --git a/gcc-4.8/gcc/config/avr/avr.opt b/gcc-4.8/gcc/config/avr/avr.opt
index 6b2e755ee..4b990775b 100644
--- a/gcc-4.8/gcc/config/avr/avr.opt
+++ b/gcc-4.8/gcc/config/avr/avr.opt
@@ -77,4 +77,4 @@ The device has no SPH special function register. This option will be overridden
Waddr-space-convert
Warning C Report Var(avr_warn_addr_space_convert) Init(0)
-Warn if the address space of an address is change.
+Warn if the address space of an address is changed.
diff --git a/gcc-4.8/gcc/config/avr/gen-avr-mmcu-texi.c b/gcc-4.8/gcc/config/avr/gen-avr-mmcu-texi.c
index 55335f98d..e69cd419e 100644
--- a/gcc-4.8/gcc/config/avr/gen-avr-mmcu-texi.c
+++ b/gcc-4.8/gcc/config/avr/gen-avr-mmcu-texi.c
@@ -68,6 +68,7 @@ comparator (const void *va, const void *vb)
static void
print_mcus (size_t n_mcus)
{
+ int duplicate = 0;
size_t i;
if (!n_mcus)
@@ -78,7 +79,20 @@ print_mcus (size_t n_mcus)
printf ("@*@var{mcu}@tie{}=");
for (i = 0; i < n_mcus; i++)
- printf (" @code{%s}%s", mcu_name[i], i == n_mcus-1 ? ".\n\n" : ",");
+ {
+ printf (" @code{%s}%s", mcu_name[i], i == n_mcus-1 ? ".\n\n" : ",");
+
+ if (i && !strcmp (mcu_name[i], mcu_name[i-1]))
+ {
+ /* Sanity-check: Fail on devices that are present more than once. */
+
+ duplicate = 1;
+ fprintf (stderr, "error: duplicate device: %s\n", mcu_name[i]);
+ }
+ }
+
+ if (duplicate)
+ exit (1);
}
int main (void)
diff --git a/gcc-4.8/gcc/config/avr/t-multilib b/gcc-4.8/gcc/config/avr/t-multilib
index 6b1db6092..d3fb28cd6 100644
--- a/gcc-4.8/gcc/config/avr/t-multilib
+++ b/gcc-4.8/gcc/config/avr/t-multilib
@@ -135,7 +135,6 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega169a \
mmcu?avr5=mmcu?atmega169p \
mmcu?avr5=mmcu?atmega169pa \
- mmcu?avr5=mmcu?atmega16hva \
mmcu?avr5=mmcu?atmega16hvb \
mmcu?avr5=mmcu?atmega16hvbrevb \
mmcu?avr5=mmcu?atmega16m1 \
@@ -143,7 +142,6 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega26hvg \
mmcu?avr5=mmcu?atmega32a \
mmcu?avr5=mmcu?atmega32 \
- mmcu?avr5=mmcu?atmega32a \
mmcu?avr5=mmcu?atmega323 \
mmcu?avr5=mmcu?atmega324a \
mmcu?avr5=mmcu?atmega324p \
@@ -189,7 +187,6 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega6490 \
mmcu?avr5=mmcu?atmega16hva \
mmcu?avr5=mmcu?atmega16hva2 \
- mmcu?avr5=mmcu?atmega16hvb \
mmcu?avr5=mmcu?atmega32hvb \
mmcu?avr5=mmcu?atmega6490a \
mmcu?avr5=mmcu?atmega6490p \
@@ -198,23 +195,13 @@ MULTILIB_MATCHES = \
mmcu?avr5=mmcu?atmega64hve \
mmcu?avr5=mmcu?atmega64rfa2 \
mmcu?avr5=mmcu?atmega64rfr2 \
- mmcu?avr5=mmcu?atmega32hvb \
mmcu?avr5=mmcu?atmega32hvbrevb \
- mmcu?avr5=mmcu?atmega16hva2 \
mmcu?avr5=mmcu?atmega48hvf \
mmcu?avr5=mmcu?at90can32 \
mmcu?avr5=mmcu?at90can64 \
mmcu?avr5=mmcu?at90pwm161 \
mmcu?avr5=mmcu?at90pwm216 \
mmcu?avr5=mmcu?at90pwm316 \
- mmcu?avr5=mmcu?atmega32c1 \
- mmcu?avr5=mmcu?atmega64c1 \
- mmcu?avr5=mmcu?atmega16m1 \
- mmcu?avr5=mmcu?atmega32m1 \
- mmcu?avr5=mmcu?atmega64m1 \
- mmcu?avr5=mmcu?atmega16u4 \
- mmcu?avr5=mmcu?atmega32u4 \
- mmcu?avr5=mmcu?atmega32u6 \
mmcu?avr5=mmcu?at90scr100 \
mmcu?avr5=mmcu?at90usb646 \
mmcu?avr5=mmcu?at90usb647 \