diff options
author | Anatoly Sokolov <aesok@post.ru> | 2010-10-01 00:54:27 +0400 |
---|---|---|
committer | Anatoly Sokolov <aesok@gcc.gnu.org> | 2010-10-01 00:54:27 +0400 |
commit | b95491a041e1c7da0aaab650e4f3cad2c341baae (patch) | |
tree | 8f837f5547c3d25944e6a589f132018d2a45b0df /gcc | |
parent | 45c13d4cec5c33c3971a42d673503e93c2fbb424 (diff) | |
download | gcc-b95491a041e1c7da0aaab650e4f3cad2c341baae.zip gcc-b95491a041e1c7da0aaab650e4f3cad2c341baae.tar.gz gcc-b95491a041e1c7da0aaab650e4f3cad2c341baae.tar.bz2 |
m32c.c (cris_memory_move_cost): New.
* config/cris/m32c.c (cris_memory_move_cost): New.
(cris_register_move_cost): Make static. Change arguments type from
enum reg_class to reg_class_t.
(TARGET_REGISTER_MOVE_COST, TARGET_MEMORY_MOVE_COST): Define.
* config/cris/cris.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove.
* config/cris/cris-protos.h (cris_register_move_cost): Remove.
From-SVN: r164768
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/config/cris/cris-protos.h | 2 | ||||
-rw-r--r-- | gcc/config/cris/cris.c | 29 | ||||
-rw-r--r-- | gcc/config/cris/cris.h | 8 |
4 files changed, 35 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b82c99d..0409d96 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2010-09-30 Anatoly Sokolov <aesok@post.ru> + + * config/cris/m32c.c (cris_memory_move_cost): New. + (cris_register_move_cost): Make static. Change arguments type from + enum reg_class to reg_class_t. + (TARGET_REGISTER_MOVE_COST, TARGET_MEMORY_MOVE_COST): Define. + * config/cris/cris.h (REGISTER_MOVE_COST, MEMORY_MOVE_COST): Remove. + * config/cris/cris-protos.h (cris_register_move_cost): Remove. + 2010-09-30 Jakub Jelinek <jakub@redhat.com> PR target/45843 diff --git a/gcc/config/cris/cris-protos.h b/gcc/config/cris/cris-protos.h index 84191c0..16acb52 100644 --- a/gcc/config/cris/cris-protos.h +++ b/gcc/config/cris/cris-protos.h @@ -31,8 +31,6 @@ extern bool cris_simple_epilogue (void); extern const char *cris_op_str (rtx); extern void cris_notice_update_cc (rtx, rtx); extern bool cris_reload_address_legitimized (rtx, enum machine_mode, int, int, int); -extern int cris_register_move_cost (enum machine_mode, enum reg_class, - enum reg_class); extern int cris_side_effect_mode_ok (enum rtx_code, rtx *, int, int, int, int, int); extern bool cris_cc0_user_requires_cmp (rtx); diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c index 52367c2..3163022 100644 --- a/gcc/config/cris/cris.c +++ b/gcc/config/cris/cris.c @@ -121,6 +121,8 @@ static void cris_asm_output_mi_thunk static void cris_file_start (void); static void cris_init_libfuncs (void); +static int cris_register_move_cost (enum machine_mode, reg_class_t, reg_class_t); +static int cris_memory_move_cost (enum machine_mode, reg_class_t, bool); static bool cris_rtx_costs (rtx, int, int, int *, bool); static int cris_address_cost (rtx, bool); static bool cris_pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode, @@ -185,6 +187,10 @@ int cris_cpu_version = CRIS_DEFAULT_CPU_VERSION; #undef TARGET_INIT_LIBFUNCS #define TARGET_INIT_LIBFUNCS cris_init_libfuncs +#undef TARGET_REGISTER_MOVE_COST +#define TARGET_REGISTER_MOVE_COST cris_register_move_cost +#undef TARGET_MEMORY_MOVE_COST +#define TARGET_MEMORY_MOVE_COST cris_memory_move_cost #undef TARGET_RTX_COSTS #define TARGET_RTX_COSTS cris_rtx_costs #undef TARGET_ADDRESS_COST @@ -1378,11 +1384,11 @@ cris_reload_address_legitimized (rtx x, return false; } -/* Worker function for REGISTER_MOVE_COST. */ +/* Worker function for TARGET_REGISTER_MOVE_COST. */ -int +static int cris_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, - enum reg_class from, enum reg_class to) + reg_class_t from, reg_class_t to) { if (!TARGET_V32) { @@ -1424,6 +1430,23 @@ cris_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, return 2; } +/* Worker function for TARGET_MEMORY_MOVE_COST. + + This isn't strictly correct for v0..3 in buswidth-8bit mode, but should + suffice. */ + +static int +cris_memory_move_cost (enum machine_mode mode, + reg_class_t rclass ATTRIBUTE_UNUSED, + bool in ATTRIBUTE_UNUSED) +{ + if (mode == QImode + || mode == HImode) + return 4; + else + return 6; +} + /* Worker for cris_notice_update_cc; handles the "normal" cases. FIXME: this code is historical; its functionality should be refactored to look at insn attributes and moved to diff --git a/gcc/config/cris/cris.h b/gcc/config/cris/cris.h index cd4a22d2..090bcd1 100644 --- a/gcc/config/cris/cris.h +++ b/gcc/config/cris/cris.h @@ -1073,14 +1073,6 @@ struct cum_args {int regs;}; /* Node: Costs */ -#define REGISTER_MOVE_COST(MODE, FROM, TO) \ - cris_register_move_cost (MODE, FROM, TO) - -/* This isn't strictly correct for v0..3 in buswidth-8bit mode, but - should suffice. */ -#define MEMORY_MOVE_COST(M, CLASS, IN) \ - (((M) == QImode) ? 4 : ((M) == HImode) ? 4 : 6) - /* Regardless of the presence of delay slots, the default value of 1 for BRANCH_COST is the best in the range (1, 2, 3), tested with gcc-2.7.2 with testcases ipps and gcc, giving smallest and fastest code. */ |