aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatoly Sokolov <aesok@post.ru>2007-01-17 21:42:58 +0300
committerAnatoly Sokolov <aesok@gcc.gnu.org>2007-01-17 21:42:58 +0300
commitdd6d1f8c3f8cd06fa2aa436de20a88c46a84d33c (patch)
tree5308ef5b9dccfd7d6ce87c837a5fad63b801fa09
parentefb7e1e02617b779d8bd376d9dcccd0cdb4d3a94 (diff)
downloadgcc-dd6d1f8c3f8cd06fa2aa436de20a88c46a84d33c.zip
gcc-dd6d1f8c3f8cd06fa2aa436de20a88c46a84d33c.tar.gz
gcc-dd6d1f8c3f8cd06fa2aa436de20a88c46a84d33c.tar.bz2
avr.h (AVR_HAVE_LPMX): New macro.
* config/avr/avr.h (AVR_HAVE_LPMX): New macro. (AVR_ENHANCED): Rename to ... (AVR_HAVE_MUL): ... new. (avr_enhanced_p): Rename to ... (avr_have_mul_p): ... new. (TARGET_CPU_CPP_BUILTINS): Use 'avr_have_mul_p' instead of 'avr_enhanced_p' for "__AVR_ENHANCED__". Define "__AVR_HAVE_MUL__". * config/avr/avr.c (avr_enhanced_p): Rename to ... (avr_have_mul_p): ... new. (base_arch_s): Rename 'enhanced' to 'have_mul'. (avr_override_options): Use 'avr_have_mul_p' and 'have_mul' instead of 'avr_enhanced_p' and 'enhanced'. (ashlhi3_out, ashrhi3_out, lshrhi3_out, avr_rtx_costs): Use AVR_HAVE_MUL instead of AVR_ENHANCED. * avr.md (*tablejump_enh): Use AVR_HAVE_LPMX instead of AVR_ENHANCED. (mulqi3, *mulqi3_enh, *mulqi3_call, mulqihi3, umulqihi3, mulhi3, *mulhi3_enh, *mulhi3_call, mulsi3, *mulsi3_call): Use AVR_HAVE_MUL instead of AVR_ENHANCED. (*tablejump_enh): Use AVR_HAVE_LPMX instead of AVR_ENHANCED. * libgcc.S: Use __AVR_HAVE_MUL__ instead of __AVR_ENHANCED__. (__tablejump__): Use __AVR_HAVE_LPMX__ instead of __AVR_ENHANCED__. From-SVN: r120865
-rw-r--r--gcc/ChangeLog24
-rw-r--r--gcc/config/avr/avr.c34
-rw-r--r--gcc/config/avr/avr.h11
-rw-r--r--gcc/config/avr/avr.md22
-rw-r--r--gcc/config/avr/libgcc.S12
5 files changed, 65 insertions, 38 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1b8bbce..4794dde 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,27 @@
+2007-01-17 Anatoly Sokolov <aesok@post.ru>
+
+ * config/avr/avr.h (AVR_HAVE_LPMX): New macro.
+ (AVR_ENHANCED): Rename to ...
+ (AVR_HAVE_MUL): ... new.
+ (avr_enhanced_p): Rename to ...
+ (avr_have_mul_p): ... new.
+ (TARGET_CPU_CPP_BUILTINS): Use 'avr_have_mul_p' instead of
+ 'avr_enhanced_p' for "__AVR_ENHANCED__". Define "__AVR_HAVE_MUL__".
+ * config/avr/avr.c (avr_enhanced_p): Rename to ...
+ (avr_have_mul_p): ... new.
+ (base_arch_s): Rename 'enhanced' to 'have_mul'.
+ (avr_override_options): Use 'avr_have_mul_p' and 'have_mul' instead of
+ 'avr_enhanced_p' and 'enhanced'.
+ (ashlhi3_out, ashrhi3_out, lshrhi3_out, avr_rtx_costs): Use
+ AVR_HAVE_MUL instead of AVR_ENHANCED.
+ * avr.md (*tablejump_enh): Use AVR_HAVE_LPMX instead of AVR_ENHANCED.
+ (mulqi3, *mulqi3_enh, *mulqi3_call, mulqihi3, umulqihi3, mulhi3,
+ *mulhi3_enh, *mulhi3_call, mulsi3, *mulsi3_call): Use AVR_HAVE_MUL
+ instead of AVR_ENHANCED.
+ (*tablejump_enh): Use AVR_HAVE_LPMX instead of AVR_ENHANCED.
+ * libgcc.S: Use __AVR_HAVE_MUL__ instead of __AVR_ENHANCED__.
+ (__tablejump__): Use __AVR_HAVE_LPMX__ instead of __AVR_ENHANCED__.
+
2007-01-17 Ian Lance Taylor <iant@google.com>
* vec.h (VEC_reserve_exact): Define.
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 41142a4..d222a53 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -120,8 +120,8 @@ section *progmem_section;
/* More than 8K of program memory: use "call" and "jmp". */
int avr_mega_p = 0;
-/* Enhanced core: use "movw", "mul", ... */
-int avr_enhanced_p = 0;
+/* Core have 'MUL*' instructions. */
+int avr_have_mul_p = 0;
/* Assembler only. */
int avr_asm_only_p = 0;
@@ -131,7 +131,7 @@ int avr_have_movw_lpmx_p = 0;
struct base_arch_s {
int asm_only;
- int enhanced;
+ int have_mul;
int mega;
int have_movw_lpmx;
const char *const macro;
@@ -324,7 +324,7 @@ avr_override_options (void)
base = &avr_arch_types[t->arch];
avr_asm_only_p = base->asm_only;
- avr_enhanced_p = base->enhanced;
+ avr_have_mul_p = base->have_mul;
avr_mega_p = base->mega;
avr_have_movw_lpmx_p = base->have_movw_lpmx;
avr_base_arch_macro = base->macro;
@@ -3170,7 +3170,7 @@ ashlhi3_out (rtx insn, rtx operands[], int *len)
AS1 (lsl,%B0) CR_TAB
AS2 (andi,%B0,0xe0));
}
- if (AVR_ENHANCED && scratch)
+ if (AVR_HAVE_MUL && scratch)
{
*len = 5;
return (AS2 (ldi,%3,0x20) CR_TAB
@@ -3191,7 +3191,7 @@ ashlhi3_out (rtx insn, rtx operands[], int *len)
AS2 (ldi,%3,0xe0) CR_TAB
AS2 (and,%B0,%3));
}
- if (AVR_ENHANCED)
+ if (AVR_HAVE_MUL)
{
*len = 6;
return ("set" CR_TAB
@@ -3211,7 +3211,7 @@ ashlhi3_out (rtx insn, rtx operands[], int *len)
AS1 (lsl,%B0));
case 14:
- if (AVR_ENHANCED && ldi_ok)
+ if (AVR_HAVE_MUL && ldi_ok)
{
*len = 5;
return (AS2 (ldi,%B0,0x40) CR_TAB
@@ -3220,7 +3220,7 @@ ashlhi3_out (rtx insn, rtx operands[], int *len)
AS1 (clr,%A0) CR_TAB
AS1 (clr,__zero_reg__));
}
- if (AVR_ENHANCED && scratch)
+ if (AVR_HAVE_MUL && scratch)
{
*len = 5;
return (AS2 (ldi,%3,0x40) CR_TAB
@@ -3500,7 +3500,7 @@ ashrhi3_out (rtx insn, rtx operands[], int *len)
AS1 (asr,%A0));
case 11:
- if (AVR_ENHANCED && ldi_ok)
+ if (AVR_HAVE_MUL && ldi_ok)
{
*len = 5;
return (AS2 (ldi,%A0,0x20) CR_TAB
@@ -3520,7 +3520,7 @@ ashrhi3_out (rtx insn, rtx operands[], int *len)
AS1 (asr,%A0));
case 12:
- if (AVR_ENHANCED && ldi_ok)
+ if (AVR_HAVE_MUL && ldi_ok)
{
*len = 5;
return (AS2 (ldi,%A0,0x10) CR_TAB
@@ -3541,7 +3541,7 @@ ashrhi3_out (rtx insn, rtx operands[], int *len)
AS1 (asr,%A0));
case 13:
- if (AVR_ENHANCED && ldi_ok)
+ if (AVR_HAVE_MUL && ldi_ok)
{
*len = 5;
return (AS2 (ldi,%A0,0x08) CR_TAB
@@ -3947,7 +3947,7 @@ lshrhi3_out (rtx insn, rtx operands[], int *len)
AS1 (lsr,%A0) CR_TAB
AS2 (andi,%A0,0x07));
}
- if (AVR_ENHANCED && scratch)
+ if (AVR_HAVE_MUL && scratch)
{
*len = 5;
return (AS2 (ldi,%3,0x08) CR_TAB
@@ -3968,7 +3968,7 @@ lshrhi3_out (rtx insn, rtx operands[], int *len)
AS2 (ldi,%3,0x07) CR_TAB
AS2 (and,%A0,%3));
}
- if (AVR_ENHANCED)
+ if (AVR_HAVE_MUL)
{
*len = 6;
return ("set" CR_TAB
@@ -3988,7 +3988,7 @@ lshrhi3_out (rtx insn, rtx operands[], int *len)
AS1 (lsr,%A0));
case 14:
- if (AVR_ENHANCED && ldi_ok)
+ if (AVR_HAVE_MUL && ldi_ok)
{
*len = 5;
return (AS2 (ldi,%A0,0x04) CR_TAB
@@ -3997,7 +3997,7 @@ lshrhi3_out (rtx insn, rtx operands[], int *len)
AS1 (clr,%B0) CR_TAB
AS1 (clr,__zero_reg__));
}
- if (AVR_ENHANCED && scratch)
+ if (AVR_HAVE_MUL && scratch)
{
*len = 5;
return (AS2 (ldi,%3,0x04) CR_TAB
@@ -4983,7 +4983,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total)
switch (mode)
{
case QImode:
- if (AVR_ENHANCED)
+ if (AVR_HAVE_MUL)
*total = COSTS_N_INSNS (optimize_size ? 3 : 4);
else if (optimize_size)
*total = COSTS_N_INSNS (AVR_MEGA ? 2 : 1);
@@ -4991,7 +4991,7 @@ avr_rtx_costs (rtx x, int code, int outer_code ATTRIBUTE_UNUSED, int *total)
return false;
case HImode:
- if (AVR_ENHANCED)
+ if (AVR_HAVE_MUL)
*total = COSTS_N_INSNS (optimize_size ? 7 : 10);
else if (optimize_size)
*total = COSTS_N_INSNS (AVR_MEGA ? 2 : 1);
diff --git a/gcc/config/avr/avr.h b/gcc/config/avr/avr.h
index 724a213..2c054e6 100644
--- a/gcc/config/avr/avr.h
+++ b/gcc/config/avr/avr.h
@@ -1,6 +1,6 @@
/* Definitions of target machine for GNU compiler,
for ATMEL AVR at90s8515, ATmega103/103L, ATmega603/603L microcontrollers.
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Denis Chertykov (denisc@overta.ru)
@@ -37,8 +37,10 @@ Boston, MA 02110-1301, USA. */
builtin_define ("__AVR_HAVE_LPMX__"); \
if (avr_asm_only_p) \
builtin_define ("__AVR_ASM_ONLY__"); \
- if (avr_enhanced_p) \
+ if (avr_have_mul_p) \
builtin_define ("__AVR_ENHANCED__"); \
+ if (avr_have_mul_p) \
+ builtin_define ("__AVR_HAVE_MUL__"); \
if (avr_mega_p) \
builtin_define ("__AVR_MEGA__"); \
if (TARGET_NO_INTERRUPTS) \
@@ -49,7 +51,7 @@ Boston, MA 02110-1301, USA. */
extern const char *avr_base_arch_macro;
extern const char *avr_extra_arch_macro;
extern int avr_mega_p;
-extern int avr_enhanced_p;
+extern int avr_have_mul_p;
extern int avr_asm_only_p;
extern int avr_have_movw_lpmx_p;
#ifndef IN_LIBGCC2
@@ -57,8 +59,9 @@ extern GTY(()) section *progmem_section;
#endif
#define AVR_MEGA (avr_mega_p && !TARGET_SHORT_CALLS)
-#define AVR_ENHANCED (avr_enhanced_p)
+#define AVR_HAVE_MUL (avr_have_mul_p)
#define AVR_HAVE_MOVW (avr_have_movw_lpmx_p)
+#define AVR_HAVE_LPMX (avr_have_movw_lpmx_p)
#define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md
index 38cee2d..d0b96e1 100644
--- a/gcc/config/avr/avr.md
+++ b/gcc/config/avr/avr.md
@@ -707,7 +707,7 @@
(match_operand:QI 2 "register_operand" "")))]
""
"{
- if (!AVR_ENHANCED)
+ if (!AVR_HAVE_MUL)
{
emit_insn (gen_mulqi3_call (operands[0], operands[1], operands[2]));
DONE;
@@ -718,7 +718,7 @@
[(set (match_operand:QI 0 "register_operand" "=r")
(mult:QI (match_operand:QI 1 "register_operand" "r")
(match_operand:QI 2 "register_operand" "r")))]
- "AVR_ENHANCED"
+ "AVR_HAVE_MUL"
"mul %1,%2
mov %0,r0
clr r1"
@@ -737,7 +737,7 @@
(define_insn "*mulqi3_call"
[(set (reg:QI 24) (mult:QI (reg:QI 24) (reg:QI 22)))
(clobber (reg:QI 22))]
- "!AVR_ENHANCED"
+ "!AVR_HAVE_MUL"
"%~call __mulqi3"
[(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
@@ -746,7 +746,7 @@
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (sign_extend:HI (match_operand:QI 1 "register_operand" "d"))
(sign_extend:HI (match_operand:QI 2 "register_operand" "d"))))]
- "AVR_ENHANCED"
+ "AVR_HAVE_MUL"
"muls %1,%2
movw %0,r0
clr r1"
@@ -757,7 +757,7 @@
[(set (match_operand:HI 0 "register_operand" "=r")
(mult:HI (zero_extend:HI (match_operand:QI 1 "register_operand" "r"))
(zero_extend:HI (match_operand:QI 2 "register_operand" "r"))))]
- "AVR_ENHANCED"
+ "AVR_HAVE_MUL"
"mul %1,%2
movw %0,r0
clr r1"
@@ -771,7 +771,7 @@
""
"
{
- if (!AVR_ENHANCED)
+ if (!AVR_HAVE_MUL)
{
emit_insn (gen_mulhi3_call (operands[0], operands[1], operands[2]));
DONE;
@@ -782,7 +782,7 @@
[(set (match_operand:HI 0 "register_operand" "=&r")
(mult:HI (match_operand:HI 1 "register_operand" "r")
(match_operand:HI 2 "register_operand" "r")))]
- "AVR_ENHANCED"
+ "AVR_HAVE_MUL"
"mul %A1,%A2
movw %0,r0
mul %A1,%B2
@@ -807,7 +807,7 @@
[(set (reg:HI 24) (mult:HI (reg:HI 24) (reg:HI 22)))
(clobber (reg:HI 22))
(clobber (reg:QI 21))]
- "!AVR_ENHANCED"
+ "!AVR_HAVE_MUL"
"%~call __mulhi3"
[(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
@@ -821,14 +821,14 @@
(clobber (reg:HI 26))
(clobber (reg:HI 30))])
(set (match_operand:SI 0 "register_operand" "") (reg:SI 22))]
- "AVR_ENHANCED"
+ "AVR_HAVE_MUL"
"")
(define_insn "*mulsi3_call"
[(set (reg:SI 22) (mult:SI (reg:SI 22) (reg:SI 18)))
(clobber (reg:HI 26))
(clobber (reg:HI 30))]
- "AVR_ENHANCED"
+ "AVR_HAVE_MUL"
"%~call __mulsi3"
[(set_attr "type" "xcall")
(set_attr "cc" "clobber")])
@@ -2220,7 +2220,7 @@
UNSPEC_INDEX_JMP))
(use (label_ref (match_operand 1 "" "")))
(clobber (match_dup 0))]
- "AVR_MEGA && AVR_ENHANCED"
+ "AVR_MEGA && AVR_HAVE_LPMX"
"lsl r30
rol r31
lpm __tmp_reg__,Z+
diff --git a/gcc/config/avr/libgcc.S b/gcc/config/avr/libgcc.S
index d542bc8..c6814fe 100644
--- a/gcc/config/avr/libgcc.S
+++ b/gcc/config/avr/libgcc.S
@@ -1,5 +1,5 @@
/* -*- Mode: Asm -*- */
-/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2007 Free Software Foundation, Inc.
Contributed by Denis Chertykov <denisc@overta.ru>
This file is free software; you can redistribute it and/or modify it
@@ -56,7 +56,7 @@ Boston, MA 02110-1301, USA. */
.endm
/* Note: mulqi3, mulhi3 are open-coded on the enhanced core. */
-#if !defined (__AVR_ENHANCED__)
+#if !defined (__AVR_HAVE_MUL__)
/*******************************************************
Multiplication 8 x 8
*******************************************************/
@@ -159,7 +159,7 @@ __mulhi3_exit:
.endfunc
#endif /* defined (L_mulhi3) */
-#endif /* !defined (__AVR_ENHANCED__) */
+#endif /* !defined (__AVR_HAVE_MUL__) */
#if defined (L_mulhisi3)
.global __mulhisi3
@@ -217,7 +217,7 @@ __umulhisi3:
.global __mulsi3
.func __mulsi3
__mulsi3:
-#if defined (__AVR_ENHANCED__)
+#if defined (__AVR_HAVE_MUL__)
mul r_arg1L, r_arg2L
movw r_resL, r0
mul r_arg1H, r_arg2H
@@ -281,7 +281,7 @@ __mulsi3_exit:
mov_h r_arg1H,r_resH
mov_l r_arg1L,r_resL
ret
-#endif /* !defined (__AVR_ENHANCED__) */
+#endif /* defined (__AVR_HAVE_MUL__) */
#undef r_arg1L
#undef r_arg1H
#undef r_arg1HL
@@ -668,7 +668,7 @@ __tablejump2__:
rol r31
.global __tablejump__
__tablejump__:
-#if defined (__AVR_ENHANCED__)
+#if defined (__AVR_HAVE_LPMX__)
lpm __tmp_reg__, Z+
lpm r31, Z
mov r30, __tmp_reg__