avr.md: Fix two 0x80000000 constants to make them negative also on 64-bit hosts.
* config/avr/avr.md: Fix two 0x80000000 constants to make them negative also on 64-bit hosts. Default to -fno-reorder-blocks when optimizing for size. * config/avr/avr-protos.h (avr_optimization_options): Declare. * config/avr/avr.c (avr_optimization_options): New function. * config/avr/avr.h (OPTIMIZATION_OPTIONS): New. Optimize returning from simple functions. * config/avr/avr-protos.h (avr_simple_epilogue): Declare. * config/avr/avr.c (avr_simple_epilogue): New function. * config/avr/avr.md (return): New insn. From-SVN: r55378
This commit is contained in:
parent
21c318ba4d
commit
126dbce033
@ -1,3 +1,18 @@
|
||||
2002-07-10 Marek Michalkiewicz <marekm@amelek.gda.pl>
|
||||
|
||||
* config/avr/avr.md: Fix two 0x80000000 constants to make them
|
||||
negative also on 64-bit hosts.
|
||||
|
||||
Default to -fno-reorder-blocks when optimizing for size.
|
||||
* config/avr/avr-protos.h (avr_optimization_options): Declare.
|
||||
* config/avr/avr.c (avr_optimization_options): New function.
|
||||
* config/avr/avr.h (OPTIMIZATION_OPTIONS): New.
|
||||
|
||||
Optimize returning from simple functions.
|
||||
* config/avr/avr-protos.h (avr_simple_epilogue): Declare.
|
||||
* config/avr/avr.c (avr_simple_epilogue): New function.
|
||||
* config/avr/avr.md (return): New insn.
|
||||
|
||||
2002-07-10 Douglas B Rupp <rupp@gnat.com>
|
||||
|
||||
* config/i386/i386.c (ix86_svr3_asm_out_constructor): Add
|
||||
@ -1213,7 +1228,6 @@ Thu Jun 20 00:26:53 2002 Denis Chertykov <denisc@overta.ru>
|
||||
at start of buffer.
|
||||
* gcc.c (trad_capable_cpp): Use cc1 always.
|
||||
|
||||
>>>>>>> 1.14808
|
||||
2002-06-20 Jeffrey Law <law@redhat.com>
|
||||
|
||||
* i386.h (TARGET_DEFAULT): Do not turn on frame pointer
|
||||
|
@ -26,6 +26,7 @@ extern void asm_file_start PARAMS ((FILE *file));
|
||||
extern void asm_file_end PARAMS ((FILE *file));
|
||||
extern void avr_init_once PARAMS ((void));
|
||||
extern void avr_override_options PARAMS ((void));
|
||||
extern void avr_optimization_options PARAMS ((int level, int size));
|
||||
extern char * avr_change_section PARAMS ((char *sect_name));
|
||||
extern int avr_ret_register PARAMS ((void));
|
||||
extern enum reg_class class_likely_spilled_p PARAMS ((int c));
|
||||
@ -35,6 +36,7 @@ extern int frame_pointer_required_p PARAMS ((void));
|
||||
extern void asm_globalize_label PARAMS ((FILE *file, const char *name));
|
||||
extern void order_regs_for_local_alloc PARAMS ((void));
|
||||
extern int initial_elimination_offset PARAMS ((int from, int to));
|
||||
extern int avr_simple_epilogue PARAMS ((void));
|
||||
extern void progmem_section PARAMS ((void));
|
||||
extern int mask_one_bit_p PARAMS ((HOST_WIDE_INT mask));
|
||||
extern void gas_output_limited_string PARAMS ((FILE *file, const char *str));
|
||||
|
@ -259,6 +259,16 @@ avr_override_options ()
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
avr_optimization_options (level, size)
|
||||
int level ATTRIBUTE_UNUSED;
|
||||
int size;
|
||||
{
|
||||
if (size)
|
||||
flag_reorder_blocks = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Initialize TMP_REG_RTX and ZERO_REG_RTX */
|
||||
void
|
||||
avr_init_once ()
|
||||
@ -445,6 +455,21 @@ initial_elimination_offset (from, to)
|
||||
}
|
||||
}
|
||||
|
||||
/* Return 1 if the function epilogue is just a single "ret". */
|
||||
|
||||
int
|
||||
avr_simple_epilogue ()
|
||||
{
|
||||
return (! frame_pointer_needed
|
||||
&& get_frame_size () == 0
|
||||
&& avr_regs_to_save (NULL) == 0
|
||||
&& ! interrupt_function_p (current_function_decl)
|
||||
&& ! signal_function_p (current_function_decl)
|
||||
&& ! avr_naked_function_p (current_function_decl)
|
||||
&& ! MAIN_NAME_P (DECL_NAME (current_function_decl))
|
||||
&& ! TREE_THIS_VOLATILE (current_function_decl));
|
||||
}
|
||||
|
||||
/* This function checks sequence of live registers */
|
||||
|
||||
static int
|
||||
|
@ -121,7 +121,7 @@ extern int avr_asm_only_p;
|
||||
fprintf (stderr, " (68k, MIT syntax)");
|
||||
#endif */
|
||||
|
||||
#define OVERRIDE_OPTIONS avr_override_options()
|
||||
#define OVERRIDE_OPTIONS avr_override_options ()
|
||||
/* `OVERRIDE_OPTIONS'
|
||||
Sometimes certain combinations of command options do not make
|
||||
sense on a particular target machine. You can define a macro
|
||||
@ -132,6 +132,9 @@ extern int avr_asm_only_p;
|
||||
Don't use this macro to turn on various extra optimizations for
|
||||
`-O'. That is what `OPTIMIZATION_OPTIONS' is for. */
|
||||
|
||||
#define OPTIMIZATION_OPTIONS(LEVEL, SIZE) \
|
||||
avr_optimization_options (LEVEL, SIZE)
|
||||
|
||||
#define CAN_DEBUG_WITHOUT_FP
|
||||
/* Define this macro if debugging can be performed even without a
|
||||
frame pointer. If this macro is defined, GNU CC will turn on the
|
||||
|
@ -1966,7 +1966,7 @@
|
||||
(const_int 0))
|
||||
(label_ref (match_dup 1))
|
||||
(pc)))]
|
||||
"operands[2] = GEN_INT (0x80000000);")
|
||||
"operands[2] = GEN_INT (-2147483647 - 1);")
|
||||
|
||||
(define_peephole2
|
||||
[(set (cc0) (match_operand:SI 0 "register_operand" ""))
|
||||
@ -1978,7 +1978,7 @@
|
||||
(const_int 0))
|
||||
(label_ref (match_dup 1))
|
||||
(pc)))]
|
||||
"operands[2] = GEN_INT (0x80000000);")
|
||||
"operands[2] = GEN_INT (-2147483647 - 1);")
|
||||
|
||||
;; ************************************************************************
|
||||
;; Implementation of conditional jumps here.
|
||||
@ -2143,6 +2143,13 @@
|
||||
(const_int 2)
|
||||
(const_int 1))])])
|
||||
|
||||
(define_insn "return"
|
||||
[(return)]
|
||||
"reload_completed && avr_simple_epilogue ()"
|
||||
"ret"
|
||||
[(set_attr "cc" "none")
|
||||
(set_attr "length" "1")])
|
||||
|
||||
(define_insn "nop"
|
||||
[(const_int 0)]
|
||||
""
|
||||
|
Loading…
Reference in New Issue
Block a user