parent
5005dee96e
commit
552ecbd900
|
@ -1,3 +1,15 @@
|
|||
2001-06-20 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* config/sh/sh.md (interrupt_function): Use
|
||||
current_function_interrupt.
|
||||
(define_delay): Schedule in delay slot if TARGET_SH3, even if it is
|
||||
an interrupt function.
|
||||
|
||||
* config/sh/sh.h (current_function_interrupt): Define extern.
|
||||
|
||||
* config/sh/sh.c (current_function_interrupt): New global.
|
||||
(sh_expand_prologue): Set current_function_interrupt.
|
||||
|
||||
2001-06-21 Phil Edwards <pme@sources.redhat.com>
|
||||
|
||||
* doc/install.texi: Add 'c' to list of --enable-languages choices.
|
||||
|
|
|
@ -43,6 +43,9 @@ int code_for_indirect_jump_scratch = CODE_FOR_indirect_jump_scratch;
|
|||
#define MSW (TARGET_LITTLE_ENDIAN ? 1 : 0)
|
||||
#define LSW (TARGET_LITTLE_ENDIAN ? 0 : 1)
|
||||
|
||||
/* Set to 1 by expand_prologue() when the function is an interrupt handler. */
|
||||
int current_function_interrupt;
|
||||
|
||||
/* ??? The pragma interrupt support will not work for SH3. */
|
||||
/* This is set by #pragma interrupt and #pragma trapa, and causes gcc to
|
||||
output code for the next function appropriate for an interrupt handler. */
|
||||
|
@ -4009,6 +4012,11 @@ sh_expand_prologue ()
|
|||
int live_regs_mask2;
|
||||
int save_flags = target_flags;
|
||||
|
||||
current_function_interrupt
|
||||
= lookup_attribute ("interrupt_handler",
|
||||
DECL_MACHINE_ATTRIBUTES (current_function_decl))
|
||||
!= NULL_TREE;
|
||||
|
||||
/* We have pretend args if we had an object sent partially in registers
|
||||
and partially on the stack, e.g. a large structure. */
|
||||
output_stack_adjust (-current_function_pretend_args_size,
|
||||
|
|
|
@ -2299,6 +2299,10 @@ extern enum mdep_reorg_phase_e mdep_reorg_phase;
|
|||
|
||||
extern int pragma_interrupt;
|
||||
|
||||
/* Set when processing a function with interrupt attribute. */
|
||||
|
||||
extern int current_function_interrupt;
|
||||
|
||||
/* Set to an RTX containing the address of the stack to switch to
|
||||
for interrupt functions. */
|
||||
extern struct rtx_def *sp_switch;
|
||||
|
|
|
@ -547,7 +547,7 @@
|
|||
(const_string "yes")))
|
||||
|
||||
(define_attr "interrupt_function" "no,yes"
|
||||
(const (symbol_ref "pragma_interrupt")))
|
||||
(const (symbol_ref "current_function_interrupt")))
|
||||
|
||||
(define_attr "in_delay_slot" "yes,no"
|
||||
(cond [(eq_attr "type" "cbranch") (const_string "no")
|
||||
|
@ -577,7 +577,9 @@
|
|||
(ior (and (eq_attr "interrupt_function" "no")
|
||||
(eq_attr "type" "!pload,prset"))
|
||||
(and (eq_attr "interrupt_function" "yes")
|
||||
(eq_attr "hit_stack" "no")))) (nil) (nil)])
|
||||
(ior
|
||||
(ne (symbol_ref "TARGET_SH3") (const_int 0))
|
||||
(eq_attr "hit_stack" "no"))))) (nil) (nil)])
|
||||
|
||||
;; Since a call implicitly uses the PR register, we can't allow
|
||||
;; a PR register store in a jsr delay slot.
|
||||
|
|
Loading…
Reference in New Issue