+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.
#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. */
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,
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;
(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")
(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.