aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShiva Chen <shiva0217@gmail.com>2018-04-22 09:05:10 +0000
committerChung-Ju Wu <jasonwucj@gcc.gnu.org>2018-04-22 09:05:10 +0000
commitc411e9aa4fd63e03a8e4594776ceb22ff3966dbc (patch)
tree18c910d33e9b81820e865510cc9a238f2e9d8e0a
parent029db20edd88bf6aa038cc949f70ba5c3890a5fc (diff)
downloadgcc-c411e9aa4fd63e03a8e4594776ceb22ff3966dbc.zip
gcc-c411e9aa4fd63e03a8e4594776ceb22ff3966dbc.tar.gz
gcc-c411e9aa4fd63e03a8e4594776ceb22ff3966dbc.tar.bz2
[NDS32] Implment USE_LOAD_POST_INCREMENT, USE_LOAD_POST_DECREMENT, USE_STORE_POST_DECREMENT and USE_STORE_POST_INCREMENT.
gcc/ * config/nds32/nds32-protos.h (nds32_use_load_post_increment): Declare. * config/nds32/nds32.c (nds32_use_load_post_increment): New. * config/nds32/nds32.h (USE_LOAD_POST_INCREMENT, USE_LOAD_POST_DECREMENT): Define. (USE_STORE_POST_INCREMENT, USE_STORE_POST_DECREMENT): Define. From-SVN: r259552
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/nds32/nds32-protos.h2
-rw-r--r--gcc/config/nds32/nds32.c8
-rw-r--r--gcc/config/nds32/nds32.h6
4 files changed, 24 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d84f5bc..3aa5542 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2018-04-22 Shiva Chen <shiva0217@gmail.com>
+ * config/nds32/nds32-protos.h (nds32_use_load_post_increment): Declare.
+ * config/nds32/nds32.c (nds32_use_load_post_increment): New.
+ * config/nds32/nds32.h
+ (USE_LOAD_POST_INCREMENT, USE_LOAD_POST_DECREMENT): Define.
+ (USE_STORE_POST_INCREMENT, USE_STORE_POST_DECREMENT): Define.
+
+2018-04-22 Shiva Chen <shiva0217@gmail.com>
+
* config/nds32/nds32-protos.h (nds32_ls_333_p): Remove.
* config/nds32/nds32.c (nds32_ls_333_p): Remove.
diff --git a/gcc/config/nds32/nds32-protos.h b/gcc/config/nds32/nds32-protos.h
index 7e8111e..e7b7d41 100644
--- a/gcc/config/nds32/nds32-protos.h
+++ b/gcc/config/nds32/nds32-protos.h
@@ -275,6 +275,8 @@ rtx extract_branch_target_rtx (rtx_insn *);
rtx extract_branch_condition_rtx (rtx_insn *);
} // namespace nds32
+extern bool nds32_use_load_post_increment(machine_mode);
+
/* Functions for create nds32 specific optimization pass. */
extern rtl_opt_pass *make_pass_nds32_relax_opt (gcc::context *);
diff --git a/gcc/config/nds32/nds32.c b/gcc/config/nds32/nds32.c
index 997cc76..9a8c712 100644
--- a/gcc/config/nds32/nds32.c
+++ b/gcc/config/nds32/nds32.c
@@ -1354,6 +1354,14 @@ nds32_naked_function_p (tree func)
return (t != NULL_TREE);
}
+/* Function that determine whether a load postincrement is a good thing to use
+ for a given mode. */
+bool
+nds32_use_load_post_increment (machine_mode mode)
+{
+ return (GET_MODE_SIZE (mode) <= GET_MODE_SIZE(E_DImode));
+}
+
/* Function that check if 'X' is a valid address register.
The variable 'STRICT' is very important to
make decision for register number.
diff --git a/gcc/config/nds32/nds32.h b/gcc/config/nds32/nds32.h
index c5d1e27..29edccd 100644
--- a/gcc/config/nds32/nds32.h
+++ b/gcc/config/nds32/nds32.h
@@ -1083,6 +1083,12 @@ enum reg_class
/* We have "LW.bi Rt, [Ra], Rb" instruction form. */
#define HAVE_POST_MODIFY_REG 1
+#define USE_LOAD_POST_INCREMENT(mode) \
+ nds32_use_load_post_increment(mode)
+#define USE_LOAD_POST_DECREMENT(mode) USE_LOAD_POST_INCREMENT(mode)
+#define USE_STORE_POST_DECREMENT(mode) USE_LOAD_POST_DECREMENT(mode)
+#define USE_STORE_POST_INCREMENT(mode) USE_LOAD_POST_INCREMENT(mode)
+
#define CONSTANT_ADDRESS_P(x) (CONSTANT_P (x) && GET_CODE (x) != CONST_DOUBLE)
#define MAX_REGS_PER_ADDRESS 3