diff options
author | Christian Bruel <christian.bruel@st.com> | 2014-05-13 10:50:51 +0200 |
---|---|---|
committer | Christian Bruel <chrbr@gcc.gnu.org> | 2014-05-13 10:50:51 +0200 |
commit | 06b906021422980e8b9b7aea0509d24e94777a19 (patch) | |
tree | 2492f596015f55629c1fed3420c824e3fc566559 /gcc/config/epiphany | |
parent | 455464ab334ad9fad4a1d2513581ecd21fd92c2b (diff) | |
download | gcc-06b906021422980e8b9b7aea0509d24e94777a19.tar.gz |
target.def (mode_switching): New hook vector.
2014-05-13 Christian Bruel <christian.bruel@st.com>
* target.def (mode_switching): New hook vector.
(mode_emit, mode_needed, mode_after, mode_entry): New hooks.
(mode_exit, modepriority_to_mode): Likewise.
* mode-switching.c (MODE_NEEDED, MODE_AFTER, MODE_ENTRY): Hookify.
(MODE_EXIT, MODE_PRIORITY_TO_MODE, EMIT_MODE_SET): Likewise.
(default_priority_to_mode): Define.
* targhooks.h (default_priority_to_mode): Declare.
* target.h: Include tm.h and hard-reg-set.h.
* doc/tm.texi.in (EMIT_MODE_SET, MODE_NEEDED, MODE_AFTER, MODE_ENTRY)
(MODE_EXIT, MODE_PRIORITY_TO_MODE): Delete and hookify.
* doc/tm.texi Regenerate.
* config/sh/sh.h (MODE_NEEDED, MODE_AFTER, MODE_ENTRY): Delete
(MODE_EXIT, MODE_PRIORITY_TO_MODE, EMIT_MODE_SET): Likewise.
* config/sh/sh.c (sh_emit_mode_set, sh_mode_priority): Hookify.
(sh_mode_needed, sh_mode_after, sh_mode_entry, sh_mode_exit): Likewise.
* config/i386/i386.h (MODE_NEEDED, MODE_AFTER, MODE_ENTRY): Delete
(MODE_EXIT, MODE_PRIORITY_TO_MODE, EMIT_MODE_SET): Likewise.
* config/i386/i386-protos.h (ix86_mode_needed, ix86_mode_after)
(ix86_mode_entrym, ix86_emit_mode_set): Remove external declaration.
* config/i386/i386.c (ix86_mode_needed, ix86_mode_after, ix86_mode_exit,
(ix86_mode_entry, ix86_mode_priority, ix86_emit_mode_set): Hookify.
* config/epiphany/epiphany.h (MODE_NEEDED, MODE_AFTER, MODE_ENTRY):
Delete
(MODE_EXIT, MODE_PRIORITY_TO_MODE, EMIT_MODE_SET): Likewise.
* config/sh/sh.h (MODE_NEEDED, MODE_AFTER, MODE_ENTRY): Delete
(MODE_EXIT, MODE_PRIORITY_TO_MODE, EMIT_MODE_SET): Likewise.
* config/sh/sh.c (sh4_emit_mode_set, sh4_mode_needed): Hookify.
(sh4_mode_after, sh4_mode_entry, sh4_mode_exit): Likewise.
* config/epiphany/epiphany-protos.h (epiphany_mode_needed)
(emit_set_fp_mode, epiphany_mode_entry_exit, epiphany_mode_after)
(epiphany_mode_priority_to_mode): Remove declaration.
* config/epiphany/epiphany.c (emit_set_fp_mode): Hookify.
(epiphany_mode_needed, epiphany_mode_priority_to_mode): Likewise.
(epiphany_mode_entry, epiphany_mode_exit, epiphany_mode_after):
Likewise.
(epiphany_mode_priority_to_mode): Change priority type. Hookify.
(epiphany_mode_needed, epiphany_mode_entry_exit): Hookify.
(epiphany_mode_after, epiphany_mode_entry, emit_set_fp_mode): Hookify.
From-SVN: r210354
Diffstat (limited to 'gcc/config/epiphany')
-rw-r--r-- | gcc/config/epiphany/epiphany-protos.h | 2 | ||||
-rw-r--r-- | gcc/config/epiphany/epiphany.c | 32 | ||||
-rw-r--r-- | gcc/config/epiphany/epiphany.h | 13 | ||||
-rw-r--r-- | gcc/config/epiphany/mode-switch-use.c | 2 |
4 files changed, 30 insertions, 19 deletions
diff --git a/gcc/config/epiphany/epiphany-protos.h b/gcc/config/epiphany/epiphany-protos.h index 9121e0c3c97..bfa48021443 100644 --- a/gcc/config/epiphany/epiphany-protos.h +++ b/gcc/config/epiphany/epiphany-protos.h @@ -45,9 +45,7 @@ extern void emit_set_fp_mode (int entity, int mode, HARD_REG_SET regs_live); extern void epiphany_insert_mode_switch_use (rtx insn, int, int); extern void epiphany_expand_set_fp_mode (rtx *operands); extern int epiphany_mode_needed (int entity, rtx insn); -extern int epiphany_mode_entry_exit (int entity, bool); extern int epiphany_mode_after (int entity, int last_mode, rtx insn); -extern int epiphany_mode_priority_to_mode (int entity, unsigned priority); extern bool epiphany_epilogue_uses (int regno); extern bool epiphany_optimize_mode_switching (int entity); extern bool epiphany_is_interrupt_p (tree); diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c index ebe6f05302d..7ee5d0a8019 100644 --- a/gcc/config/epiphany/epiphany.c +++ b/gcc/config/epiphany/epiphany.c @@ -152,6 +152,20 @@ static rtx frame_insn (rtx); /* We further restrict the minimum to be a multiple of eight. */ #define TARGET_MIN_ANCHOR_OFFSET (optimize_size ? 0 : -2040) +/* Mode switching hooks. */ + +#define TARGET_MODE_EMIT emit_set_fp_mode + +#define TARGET_MODE_NEEDED epiphany_mode_needed + +#define TARGET_MODE_PRIORITY epiphany_mode_priority + +#define TARGET_MODE_ENTRY epiphany_mode_entry + +#define TARGET_MODE_EXIT epiphany_mode_exit + +#define TARGET_MODE_AFTER epiphany_mode_after + #include "target-def.h" #undef TARGET_ASM_ALIGNED_HI_OP @@ -2319,8 +2333,8 @@ epiphany_optimize_mode_switching (int entity) gcc_unreachable (); } -int -epiphany_mode_priority_to_mode (int entity, unsigned priority) +static int +epiphany_mode_priority (int entity, int priority) { if (entity == EPIPHANY_MSW_ENTITY_AND || entity == EPIPHANY_MSW_ENTITY_OR || entity== EPIPHANY_MSW_ENTITY_CONFIG) @@ -2428,7 +2442,7 @@ epiphany_mode_needed (int entity, rtx insn) } } -int +static int epiphany_mode_entry_exit (int entity, bool exit) { int normal_mode = epiphany_normal_fp_mode ; @@ -2515,6 +2529,18 @@ epiphany_mode_after (int entity, int last_mode, rtx insn) return last_mode; } +static int +epiphany_mode_entry (int entity) +{ + return epiphany_mode_entry_exit (entity, false); +} + +static int +epiphany_mode_exit (int entity) +{ + return epiphany_mode_entry_exit (entity, true); +} + void emit_set_fp_mode (int entity, int mode, HARD_REG_SET regs_live ATTRIBUTE_UNUSED) { diff --git a/gcc/config/epiphany/epiphany.h b/gcc/config/epiphany/epiphany.h index 1ca92e07b9e..f64652e4895 100644 --- a/gcc/config/epiphany/epiphany.h +++ b/gcc/config/epiphany/epiphany.h @@ -899,19 +899,6 @@ enum epiphany_function_type { 2, 2, 2, \ FP_MODE_NONE, FP_MODE_NONE, FP_MODE_NONE, FP_MODE_NONE, FP_MODE_NONE } -#define MODE_NEEDED(ENTITY, INSN) epiphany_mode_needed((ENTITY), (INSN)) - -#define MODE_PRIORITY_TO_MODE(ENTITY, N) \ - (epiphany_mode_priority_to_mode ((ENTITY), (N))) - -#define EMIT_MODE_SET(ENTITY, MODE, HARD_REGS_LIVE) \ - emit_set_fp_mode ((ENTITY), (MODE), (HARD_REGS_LIVE)) - -#define MODE_ENTRY(ENTITY) (epiphany_mode_entry_exit ((ENTITY), false)) -#define MODE_EXIT(ENTITY) (epiphany_mode_entry_exit ((ENTITY), true)) -#define MODE_AFTER(ENTITY, LAST_MODE, INSN) \ - (epiphany_mode_after ((ENTITY), (LAST_MODE), (INSN))) - #define TARGET_INSERT_MODE_SWITCH_USE epiphany_insert_mode_switch_use /* Mode switching entities. */ diff --git a/gcc/config/epiphany/mode-switch-use.c b/gcc/config/epiphany/mode-switch-use.c index 9617041a310..cc80d103c55 100644 --- a/gcc/config/epiphany/mode-switch-use.c +++ b/gcc/config/epiphany/mode-switch-use.c @@ -58,7 +58,7 @@ insert_uses (void) { if (!INSN_P (insn)) continue; - mode = MODE_NEEDED (e, insn); + mode = epiphany_mode_needed (e, insn); if (mode == no_mode) continue; if (target_insert_mode_switch_use) |