diff options
author | denisc <denisc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-10-20 15:21:16 +0000 |
---|---|---|
committer | denisc <denisc@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-10-20 15:21:16 +0000 |
commit | b681d9718bbe0f414c502558a76f20b3b440be8a (patch) | |
tree | 56649df2c76f6c4e0999603720aa367e1746381d /gcc/config/avr/avr-protos.h | |
parent | 1cda6ca028ad1e88fc419b664e052eb0996fd05b (diff) | |
download | gcc-b681d9718bbe0f414c502558a76f20b3b440be8a.tar.gz |
* config/avr/avr-protos.h (avr_output_bld): New.
(out_shift_with_cnt): Add t_len argument.
* config/avr/avr.c (avr_num_arg_regs): Remove -mpack-args.
(output_movqi, output_movhi, output_movsisf): Optimize loading
any constant with exactly one bit set to NO_LD_REGS.
(out_shift_with_cnt): Optimize output code for size or speed,
depending on optimize_size. Handle small shift counts as well
(if not hand-optimized in ?sh??i3_out). Shifts can be done
with or without a scratch register, with help of __tmp_reg__
or __zero_reg__ if necessary. Add T_LEN argument to pass the
length of TEMPLATE in words, return total insn length in *LEN.
(ashlqi3_out, ashrqi3_out, lshrqi3_out): Change all calls to
out_shift_with_cnt to work with the above change.
(ashlhi3_out, ashlsi3_out, ashrhi3_out, ashrsi3_out, lshrhi3_out,
lshrsi3_out): Likewise. Optimize more known shift count cases.
Remove cases already well optimized in out_shift_with_cnt.
(avr_output_bld): New function.
* config/avr/avr.h (MASK_PACK_ARGS, TARGET_PACK_ARGS): Remove.
(TARGET_SWITCHES): Remove -mpack-args backward compatibility.
* config/avr/avr.md (*reload_inqi, *reload_inhi, *reload_insi):
Add reload_completed to insn condition - only for peepholes.
(ashlqi3, ashrqi3, lshrqi3): Correct insn length for shift counts
in a register or memory.
(ashlhi3, ashlsi3, ashrhi3, ashrsi3, lshrhi3, lshrsi3): Likewise.
Do not require a scratch register.
(*ashlhi3_const, *ashlsi3_const, *ashrhi3_const, *ashrsi3_const,
*lshrhi3_const, *lshrsi3_const): New insns and matching peepholes.
Optimize shifts by known count using a scratch register, but only
if one is still available after register allocation.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@36963 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/avr/avr-protos.h')
-rw-r--r-- | gcc/config/avr/avr-protos.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/config/avr/avr-protos.h b/gcc/config/avr/avr-protos.h index 6c34cf323b7..14d34d18d61 100644 --- a/gcc/config/avr/avr-protos.h +++ b/gcc/config/avr/avr-protos.h @@ -109,6 +109,8 @@ extern const char * lshrqi3_out PARAMS ((rtx insn, rtx operands[], int *len)); extern const char * lshrhi3_out PARAMS ((rtx insn, rtx operands[], int *len)); extern const char * lshrsi3_out PARAMS ((rtx insn, rtx operands[], int *len)); +extern void avr_output_bld PARAMS ((rtx operands[], int bit_nr)); + extern enum reg_class preferred_reload_class PARAMS ((rtx x, enum reg_class class)); extern int avr_address_cost PARAMS ((rtx x)); @@ -150,7 +152,8 @@ extern int avr_simplify_comparision_p PARAMS ((enum machine_mode mode, extern RTX_CODE avr_normalize_condition PARAMS ((RTX_CODE condition)); extern int compare_eq_p PARAMS ((rtx insn)); extern void out_shift_with_cnt PARAMS ((const char *template, rtx insn, - rtx operands[], int *len)); + rtx operands[], int *len, + int t_len)); extern int const_int_pow2_p PARAMS ((rtx x)); #endif /* RTX_CODE */ |