avr.h (ASSEMBLER_DIALECT): New macro declared.
* config/avr/avr.h (ASSEMBLER_DIALECT): New macro declared. * config/avr/avr.md (*movstrqi_insn): Cleanup output template. (*clrstrqi): Likewise. (xorhi3,xorsi3,absqi2): Likewise. (one_cmplhi2,one_cmplsi2): Likewise. (addsi3): Two stupid constraint alternatives removed. (extendhisi2): Use `movw' for enhanced avr cores. (zero_extendhisi2): Likewise. From-SVN: r36390
This commit is contained in:
parent
18a53ffedb
commit
1ca04dc8b6
@ -1,3 +1,14 @@
|
||||
Tue Sep 12 13:51:13 2000 Denis Chertykov <denisc@overta.ru>
|
||||
|
||||
* config/avr/avr.h (ASSEMBLER_DIALECT): New macro declared.
|
||||
* config/avr/avr.md (*movstrqi_insn): Cleanup output template.
|
||||
(*clrstrqi): Likewise.
|
||||
(xorhi3,xorsi3,absqi2): Likewise.
|
||||
(one_cmplhi2,one_cmplsi2): Likewise.
|
||||
(addsi3): Two stupid constraint alternatives removed.
|
||||
(extendhisi2): Use `movw' for enhanced avr cores.
|
||||
(zero_extendhisi2): Likewise.
|
||||
|
||||
Wed Sep 13 02:31:23 EDT 2000 John Wehle (john@feith.com)
|
||||
|
||||
* alias.c (find_base_term): Use frame_pointer_rtx
|
||||
|
@ -42,8 +42,6 @@ extern int mask_one_bit_p PARAMS ((HOST_WIDE_INT mask));
|
||||
extern void gas_output_limited_string PARAMS ((FILE *file, const char *str));
|
||||
extern void gas_output_ascii PARAMS ((FILE *file, const char *str,
|
||||
size_t length));
|
||||
|
||||
|
||||
#ifdef TREE_CODE
|
||||
extern void asm_output_external PARAMS ((FILE *file, tree decl,
|
||||
char *name));
|
||||
|
@ -4666,5 +4666,3 @@ output_reload_insisf (insn, operands, len)
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
|
@ -2656,6 +2656,31 @@ sprintf (STRING, "*.%s%d", PREFIX, NUM)
|
||||
formats. In that case, the various `tm.h' files can define these
|
||||
macros differently. */
|
||||
|
||||
#define ASSEMBLER_DIALECT AVR_ENHANCED
|
||||
/* If your target supports multiple dialects of assembler language
|
||||
(such as different opcodes), define this macro as a C expression
|
||||
that gives the numeric index of the assembler language dialect to
|
||||
use, with zero as the first variant.
|
||||
|
||||
If this macro is defined, you may use constructs of the form
|
||||
`{option0|option1|option2...}' in the output templates of patterns
|
||||
(*note Output Template::.) or in the first argument of
|
||||
`asm_fprintf'. This construct outputs `option0', `option1' or
|
||||
`option2', etc., if the value of `ASSEMBLER_DIALECT' is zero, one
|
||||
or two, etc. Any special characters within these strings retain
|
||||
their usual meaning.
|
||||
|
||||
If you do not define this macro, the characters `{', `|' and `}'
|
||||
do not have any special meaning when used in templates or operands
|
||||
to `asm_fprintf'.
|
||||
|
||||
Define the macros `REGISTER_PREFIX', `LOCAL_LABEL_PREFIX',
|
||||
`USER_LABEL_PREFIX' and `IMMEDIATE_PREFIX' if you can express the
|
||||
variations in assembler language syntax with that mechanism.
|
||||
Define `ASSEMBLER_DIALECT' and use the `{option0|option1}' syntax
|
||||
if the syntax variant are larger and involve such things as
|
||||
different opcodes or operand order. */
|
||||
|
||||
#define ASM_OUTPUT_REG_PUSH(STREAM, REGNO) \
|
||||
{ \
|
||||
if (REGNO > 31) \
|
||||
|
@ -340,8 +340,7 @@
|
||||
(clobber (match_dup 0))
|
||||
(clobber (match_dup 1))]
|
||||
""
|
||||
"
|
||||
ld __tmp_reg__,%a1+
|
||||
"ld __tmp_reg__,%a1+
|
||||
st %a0+,__tmp_reg__
|
||||
dec %2
|
||||
brne _PC_-8"
|
||||
@ -409,8 +408,7 @@
|
||||
(clobber (match_dup 1))
|
||||
(clobber (match_dup 0))]
|
||||
""
|
||||
"
|
||||
st %a0+,__zero_reg__
|
||||
"st %a0+,__zero_reg__
|
||||
dec %1
|
||||
brne _PC_-6"
|
||||
[(set_attr "length" "3")
|
||||
@ -555,12 +553,11 @@
|
||||
[(set_attr "length" "2,1,1,2,3,3")
|
||||
(set_attr "cc" "set_n,set_czn,set_czn,set_czn,set_n,set_n")])
|
||||
|
||||
;; TODO: use "movw" if available
|
||||
(define_insn "addsi3"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r,!w,!w,d,r,r,&*!w,&*!w")
|
||||
[(set (match_operand:SI 0 "register_operand" "=r,!w,!w,d,r,r")
|
||||
(plus:SI
|
||||
(match_operand:SI 1 "register_operand" "%0,0,0,0,0,0,r,r")
|
||||
(match_operand:SI 2 "nonmemory_operand" "r,I,J,i,P,N,#I,#J")))]
|
||||
(match_operand:SI 1 "register_operand" "%0,0,0,0,0,0")
|
||||
(match_operand:SI 2 "nonmemory_operand" "r,I,J,i,P,N")))]
|
||||
""
|
||||
"@
|
||||
add %A0,%A2\;adc %B0,%B2\;adc %C0,%C2\;adc %D0,%D2
|
||||
@ -568,11 +565,9 @@
|
||||
sbiw %0,%n2\;sbc %C0,__zero_reg__\;sbc %D0,__zero_reg__
|
||||
subi %0,lo8(-(%2))\;sbci %B0,hi8(-(%2))\;sbci %C0,hlo8(-(%2))\;sbci %D0,hhi8(-(%2))
|
||||
sec\;adc %A0,__zero_reg__\;adc %B0,__zero_reg__\;adc %C0,__zero_reg__\;adc %D0,__zero_reg__
|
||||
sec\;sbc %A0,__zero_reg__\;sbc %B0,__zero_reg__\;sbc %C0,__zero_reg__\;sbc %D0,__zero_reg__
|
||||
mov %A0,%A1\;mov %B0,%B1\;mov %C0,%C1\;mov %D0,%D1\;adiw %0,%2\;adc %C0,__zero_reg__\;adc %D0,__zero_reg__
|
||||
mov %A0,%A1\;mov %B0,%B1\;mov %C0,%C1\;mov %D0,%D1\;sbiw %0,%n2\;sbc %C0,__zero_reg__\;sbc %D0,__zero_reg__"
|
||||
[(set_attr "length" "4,3,3,4,5,5,7,7")
|
||||
(set_attr "cc" "set_n,set_n,set_czn,set_czn,set_n,set_n,set_n,set_czn")])
|
||||
sec\;sbc %A0,__zero_reg__\;sbc %B0,__zero_reg__\;sbc %C0,__zero_reg__\;sbc %D0,__zero_reg__"
|
||||
[(set_attr "length" "4,3,3,4,5,5")
|
||||
(set_attr "cc" "set_n,set_n,set_czn,set_czn,set_n,set_n")])
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
; sub bytes
|
||||
@ -852,7 +847,8 @@
|
||||
(xor:HI (match_operand:HI 1 "register_operand" "%0")
|
||||
(match_operand:HI 2 "register_operand" "r")))]
|
||||
""
|
||||
"eor %0,%2\;eor %B0,%B2"
|
||||
"eor %0,%2
|
||||
eor %B0,%B2"
|
||||
[(set_attr "length" "2")
|
||||
(set_attr "cc" "set_n")])
|
||||
|
||||
@ -971,7 +967,8 @@
|
||||
[(set (match_operand:QI 0 "register_operand" "=r")
|
||||
(abs:QI (match_operand:QI 1 "register_operand" "0")))]
|
||||
""
|
||||
"sbrc %0,7\;neg %0"
|
||||
"sbrc %0,7
|
||||
neg %0"
|
||||
[(set_attr "length" "2")
|
||||
(set_attr "cc" "clobber")])
|
||||
|
||||
@ -1043,7 +1040,8 @@
|
||||
[(set (match_operand:HI 0 "register_operand" "=r")
|
||||
(not:HI (match_operand:HI 1 "register_operand" "0")))]
|
||||
""
|
||||
"com %0\;com %B0"
|
||||
"com %0
|
||||
com %B0"
|
||||
[(set_attr "length" "2")
|
||||
(set_attr "cc" "set_n")])
|
||||
|
||||
@ -1051,7 +1049,10 @@
|
||||
[(set (match_operand:SI 0 "register_operand" "=r")
|
||||
(not:SI (match_operand:SI 1 "register_operand" "0")))]
|
||||
""
|
||||
"com %0\;com %B0\;com %C0\;com %D0"
|
||||
"com %0
|
||||
com %B0
|
||||
com %C0
|
||||
com %D0"
|
||||
[(set_attr "length" "4")
|
||||
(set_attr "cc" "set_n")])
|
||||
|
||||
@ -1078,15 +1079,22 @@
|
||||
[(set_attr "length" "5,6")
|
||||
(set_attr "cc" "clobber,clobber")])
|
||||
|
||||
;; TODO: use "movw" if available
|
||||
(define_insn "extendhisi2"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r,&r")
|
||||
(sign_extend:SI (match_operand:HI 1 "register_operand" "0,*r")))]
|
||||
""
|
||||
"@
|
||||
clr %C0\;sbrc %B0,7\;com %C0\;mov %D0,%C0
|
||||
mov %A0,%A1\;mov %B0,%B1\;clr %C0\;sbrc %B0,7\;com %C0\;mov %D0,%C0"
|
||||
[(set_attr "length" "4,6")
|
||||
{mov %A0,%A1\;mov %B0,%B1|movw %A0,%A1}\;clr %C0\;sbrc %B0,7\;com %C0\;mov %D0,%C0"
|
||||
[(set (attr "length")
|
||||
(if_then_else
|
||||
(eq (symbol_ref "AVR_ENHANCED") (const_int 0))
|
||||
(if_then_else (eq (symbol_ref "which_alternative") (const_int 0))
|
||||
(const_int 4)
|
||||
(const_int 6))
|
||||
(if_then_else (eq (symbol_ref "which_alternative") (const_int 0))
|
||||
(const_int 4)
|
||||
(const_int 5))))
|
||||
(set_attr "cc" "clobber,clobber")])
|
||||
|
||||
;; xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x xx<---x
|
||||
@ -1112,15 +1120,22 @@
|
||||
[(set_attr "length" "3,4")
|
||||
(set_attr "cc" "set_n,set_n")])
|
||||
|
||||
;; TODO: use "movw" if available
|
||||
(define_insn "zero_extendhisi2"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r,&r")
|
||||
(zero_extend:SI (match_operand:HI 1 "register_operand" "0,*r")))]
|
||||
""
|
||||
"@
|
||||
clr %C0\;clr %D0
|
||||
mov %A0,%A1\;mov %B0,%B1\;clr %C0\;clr %D0"
|
||||
[(set_attr "length" "2,4")
|
||||
{mov %A0,%A1\;mov %B0,%B1|movw %A0,%B0}\;clr %C0\;clr %D0"
|
||||
[(set (attr "length")
|
||||
(if_then_else
|
||||
(eq (symbol_ref "AVR_ENHANCED") (const_int 0))
|
||||
(if_then_else (eq (symbol_ref "which_alternative") (const_int 0))
|
||||
(const_int 2)
|
||||
(const_int 4))
|
||||
(if_then_else (eq (symbol_ref "which_alternative") (const_int 0))
|
||||
(const_int 2)
|
||||
(const_int 3))))
|
||||
(set_attr "cc" "set_n,set_n")])
|
||||
|
||||
;;<=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=><=>
|
||||
|
Loading…
Reference in New Issue
Block a user