Commit 93f90be6 by Fariborz Jahanian Committed by Fariborz Jahanian

Patch to fix -mcpu=G5 interface to EH runtime library.

Reviewed by Geoff Keating.

From-SVN: r86074
parent 392765bf
2004-08-16 Fariborz Jahanian <fjahanian@apple.com>
* except.c (get_exception_filter, build_post_landing_pads,
dw2_build_landing_pads): Use target-specific mode for 'filter'.
* target-def.h (TARGET_EH_RETURN_FILTER_MODE): macro defined and used.
* target.h (eh_return_filter_mode): New field added.
* targhooks.c (default_eh_return_filter_mode): Defined.
* targhooks.h (default_eh_return_filter_mode): Declared.
* config/rs6000/rs6000.c (rs6000_eh_return_filter_mode): Defined.
2004-08-16 Nathanael Nerode <neroden@gcc.gnu.org> 2004-08-16 Nathanael Nerode <neroden@gcc.gnu.org>
* configure.ac: Replace _GCC_TOPLEV_NONCANONICAL_TARGET with * configure.ac: Replace _GCC_TOPLEV_NONCANONICAL_TARGET with
......
...@@ -748,6 +748,8 @@ static tree rs6000_build_builtin_va_list (void); ...@@ -748,6 +748,8 @@ static tree rs6000_build_builtin_va_list (void);
static tree rs6000_gimplify_va_arg (tree, tree, tree *, tree *); static tree rs6000_gimplify_va_arg (tree, tree, tree *, tree *);
static bool rs6000_must_pass_in_stack (enum machine_mode, tree); static bool rs6000_must_pass_in_stack (enum machine_mode, tree);
static enum machine_mode rs6000_eh_return_filter_mode (void);
/* Hash table stuff for keeping track of TOC entries. */ /* Hash table stuff for keeping track of TOC entries. */
struct toc_hash_struct GTY(()) struct toc_hash_struct GTY(())
...@@ -964,6 +966,9 @@ static const char alt_reg_names[][8] = ...@@ -964,6 +966,9 @@ static const char alt_reg_names[][8] =
#undef TARGET_GIMPLIFY_VA_ARG_EXPR #undef TARGET_GIMPLIFY_VA_ARG_EXPR
#define TARGET_GIMPLIFY_VA_ARG_EXPR rs6000_gimplify_va_arg #define TARGET_GIMPLIFY_VA_ARG_EXPR rs6000_gimplify_va_arg
#undef TARGET_EH_RETURN_FILTER_MODE
#define TARGET_EH_RETURN_FILTER_MODE rs6000_eh_return_filter_mode
struct gcc_target targetm = TARGET_INITIALIZER; struct gcc_target targetm = TARGET_INITIALIZER;
...@@ -17171,4 +17176,11 @@ rs6000_dbx_register_number (unsigned int regno) ...@@ -17171,4 +17176,11 @@ rs6000_dbx_register_number (unsigned int regno)
abort (); abort ();
} }
/* target hook eh_return_filter_mode */
static enum machine_mode
rs6000_eh_return_filter_mode (void)
{
return TARGET_32BIT ? SImode : word_mode;
}
#include "gt-rs6000.h" #include "gt-rs6000.h"
...@@ -628,7 +628,7 @@ get_exception_filter (struct function *fun) ...@@ -628,7 +628,7 @@ get_exception_filter (struct function *fun)
rtx filter = fun->eh->filter; rtx filter = fun->eh->filter;
if (fun == cfun && ! filter) if (fun == cfun && ! filter)
{ {
filter = gen_reg_rtx (word_mode); filter = gen_reg_rtx (targetm.eh_return_filter_mode ());
fun->eh->filter = filter; fun->eh->filter = filter;
} }
return filter; return filter;
...@@ -1528,7 +1528,8 @@ build_post_landing_pads (void) ...@@ -1528,7 +1528,8 @@ build_post_landing_pads (void)
emit_cmp_and_jump_insns emit_cmp_and_jump_insns
(cfun->eh->filter, (cfun->eh->filter,
GEN_INT (tree_low_cst (TREE_VALUE (flt_node), 0)), GEN_INT (tree_low_cst (TREE_VALUE (flt_node), 0)),
EQ, NULL_RTX, word_mode, 0, c->label); EQ, NULL_RTX,
targetm.eh_return_filter_mode (), 0, c->label);
tp_node = TREE_CHAIN (tp_node); tp_node = TREE_CHAIN (tp_node);
flt_node = TREE_CHAIN (flt_node); flt_node = TREE_CHAIN (flt_node);
...@@ -1560,7 +1561,8 @@ build_post_landing_pads (void) ...@@ -1560,7 +1561,8 @@ build_post_landing_pads (void)
emit_cmp_and_jump_insns (cfun->eh->filter, emit_cmp_and_jump_insns (cfun->eh->filter,
GEN_INT (region->u.allowed.filter), GEN_INT (region->u.allowed.filter),
EQ, NULL_RTX, word_mode, 0, region->label); EQ, NULL_RTX,
targetm.eh_return_filter_mode (), 0, region->label);
/* We delay the generation of the _Unwind_Resume until we generate /* We delay the generation of the _Unwind_Resume until we generate
landing pads. We emit a marker here so as to get good control landing pads. We emit a marker here so as to get good control
...@@ -1738,7 +1740,8 @@ dw2_build_landing_pads (void) ...@@ -1738,7 +1740,8 @@ dw2_build_landing_pads (void)
emit_move_insn (cfun->eh->exc_ptr, emit_move_insn (cfun->eh->exc_ptr,
gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0))); gen_rtx_REG (ptr_mode, EH_RETURN_DATA_REGNO (0)));
emit_move_insn (cfun->eh->filter, emit_move_insn (cfun->eh->filter,
gen_rtx_REG (word_mode, EH_RETURN_DATA_REGNO (1))); gen_rtx_REG (targetm.eh_return_filter_mode (),
EH_RETURN_DATA_REGNO (1)));
seq = get_insns (); seq = get_insns ();
end_sequence (); end_sequence ();
......
...@@ -268,6 +268,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ...@@ -268,6 +268,9 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
TARGET_SCHED_DFA_NEW_CYCLE, \ TARGET_SCHED_DFA_NEW_CYCLE, \
TARGET_SCHED_IS_COSTLY_DEPENDENCE} TARGET_SCHED_IS_COSTLY_DEPENDENCE}
/* In except.c */
#define TARGET_EH_RETURN_FILTER_MODE default_eh_return_filter_mode;
/* In tree.c. */ /* In tree.c. */
#define TARGET_MERGE_DECL_ATTRIBUTES merge_decl_attributes #define TARGET_MERGE_DECL_ATTRIBUTES merge_decl_attributes
#define TARGET_MERGE_TYPE_ATTRIBUTES merge_type_attributes #define TARGET_MERGE_TYPE_ATTRIBUTES merge_type_attributes
...@@ -436,6 +439,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ...@@ -436,6 +439,7 @@ Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
{ \ { \
TARGET_ASM_OUT, \ TARGET_ASM_OUT, \
TARGET_SCHED, \ TARGET_SCHED, \
TARGET_EH_RETURN_FILTER_MODE, \
TARGET_MERGE_DECL_ATTRIBUTES, \ TARGET_MERGE_DECL_ATTRIBUTES, \
TARGET_MERGE_TYPE_ATTRIBUTES, \ TARGET_MERGE_TYPE_ATTRIBUTES, \
TARGET_ATTRIBUTE_TABLE, \ TARGET_ATTRIBUTE_TABLE, \
......
...@@ -276,6 +276,9 @@ struct gcc_target ...@@ -276,6 +276,9 @@ struct gcc_target
bool (* is_costly_dependence) (rtx, rtx, rtx, int, int); bool (* is_costly_dependence) (rtx, rtx, rtx, int, int);
} sched; } sched;
/* Return machine mode for filter value. */
enum machine_mode (* eh_return_filter_mode) (void);
/* Given two decls, merge their attributes and return the result. */ /* Given two decls, merge their attributes and return the result. */
tree (* merge_decl_attributes) (tree, tree); tree (* merge_decl_attributes) (tree, tree);
......
...@@ -128,6 +128,12 @@ default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED) ...@@ -128,6 +128,12 @@ default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *ca ATTRIBUTE_UNUSED)
!= default_setup_incoming_varargs); != default_setup_incoming_varargs);
} }
enum machine_mode
default_eh_return_filter_mode (void)
{
return word_mode;
}
/* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */ /* Generic hook that takes a CUMULATIVE_ARGS pointer and returns true. */
bool bool
......
...@@ -31,6 +31,8 @@ extern rtx default_builtin_setjmp_frame_value (void); ...@@ -31,6 +31,8 @@ extern rtx default_builtin_setjmp_frame_value (void);
extern bool hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *); extern bool hook_bool_CUMULATIVE_ARGS_false (CUMULATIVE_ARGS *);
extern bool default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *); extern bool default_pretend_outgoing_varargs_named (CUMULATIVE_ARGS *);
extern enum machine_mode default_eh_return_filter_mode (void);
extern bool hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS *); extern bool hook_bool_CUMULATIVE_ARGS_true (CUMULATIVE_ARGS *);
extern tree default_cxx_guard_type (void); extern tree default_cxx_guard_type (void);
extern tree default_cxx_get_cookie_size (tree); extern tree default_cxx_get_cookie_size (tree);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment