summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/microblaze/microblaze.c15
-rw-r--r--gcc/config/microblaze/microblaze.h1
-rw-r--r--gcc/config/microblaze/microblaze.md14
-rw-r--r--gcc/config/microblaze/microblaze.opt4
5 files changed, 45 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 32f6e4b6f0f..dabc79ad32e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,14 @@
+2013-03-02 David Holsgrove <david.holsgrove@xilinx.com>
+
+ * config/microblaze/microblaze.c:
+ Check mcpu, pcmp requirement and set TARGET_REORDER to 0 if not met.
+ * config/microblaze/microblaze.h: Add -mxl-reorder to DRIVER_SELF_SPECS
+ * config/microblaze/microblaze.md: New bswapsi2 and bswaphi2
+ instructions emitted if TARGET_REORDER
+ * config/microblaze/microblaze.opt: New option -mxl-reorder set to 1
+ or 0 for -m/-mno case, but initialises as 2 to detect default use case
+ separately
+
2013-03-01 Xinliang David Li <davidxl@google.com>
* tree-ssa-uninit.c (compute_control_dep_chain): Limit post-dom
diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c
index f45d30cf450..8458253253c 100644
--- a/gcc/config/microblaze/microblaze.c
+++ b/gcc/config/microblaze/microblaze.c
@@ -1380,6 +1380,21 @@ microblaze_option_override (void)
microblaze_has_clz = 0;
}
+ /* TARGET_REORDER defaults to 2 if -mxl-reorder not specified. */
+ ver = MICROBLAZE_VERSION_COMPARE (microblaze_select_cpu, "v8.30.a");
+ if (ver < 0)
+ {
+ if (TARGET_REORDER == 1)
+ warning (0, "-mxl-reorder can be used only with -mcpu=v8.30.a or greater");
+ TARGET_REORDER = 0;
+ }
+ else if ((ver == 0) && !TARGET_PATTERN_COMPARE)
+ {
+ if (TARGET_REORDER == 1)
+ warning (0, "-mxl-reorder requires -mxl-pattern-compare for -mcpu=v8.30.a");
+ TARGET_REORDER = 0;
+ }
+
if (TARGET_MULTIPLY_HIGH && TARGET_SOFT_MUL)
error ("-mxl-multiply-high requires -mno-xl-soft-mul");
diff --git a/gcc/config/microblaze/microblaze.h b/gcc/config/microblaze/microblaze.h
index a188a2eb113..23ed16e4f6c 100644
--- a/gcc/config/microblaze/microblaze.h
+++ b/gcc/config/microblaze/microblaze.h
@@ -78,6 +78,7 @@ extern enum pipeline_type microblaze_pipe;
"%{mno-xl-barrel-shift:%<mxl-barrel-shift}", \
"%{mno-xl-pattern-compare:%<mxl-pattern-compare}", \
"%{mxl-soft-div:%<mno-xl-soft-div}", \
+ "%{mxl-reorder:%<mno-xl-reorder}", \
"%{msoft-float:%<mhard-float}"
/* Tell collect what flags to pass to nm. */
diff --git a/gcc/config/microblaze/microblaze.md b/gcc/config/microblaze/microblaze.md
index 339186455ba..9f177331389 100644
--- a/gcc/config/microblaze/microblaze.md
+++ b/gcc/config/microblaze/microblaze.md
@@ -353,6 +353,20 @@
(automata_option "time")
(automata_option "progress")
+(define_insn "bswapsi2"
+ [(set (match_operand:SI 0 "register_operand" "=r")
+ (bswap:SI (match_operand:SI 1 "register_operand" "r")))]
+ "TARGET_REORDER"
+ "swapb %0, %1"
+)
+
+(define_insn "bswaphi2"
+ [(set (match_operand:HI 0 "register_operand" "=r")
+ (bswap:HI (match_operand:HI 1 "register_operand" "r")))]
+ "TARGET_REORDER"
+ "swaph %0, %1"
+)
+
;;----------------------------------------------------------------
;; Microblaze delay slot description
;;----------------------------------------------------------------
diff --git a/gcc/config/microblaze/microblaze.opt b/gcc/config/microblaze/microblaze.opt
index fc7d0cdd1d0..a659166372a 100644
--- a/gcc/config/microblaze/microblaze.opt
+++ b/gcc/config/microblaze/microblaze.opt
@@ -67,6 +67,10 @@ mxl-soft-mul
Target Mask(SOFT_MUL)
Use the soft multiply emulation (default)
+mxl-reorder
+Target Var(TARGET_REORDER) Init(2)
+Use reorder instructions (swap and byte reversed load/store) (default)
+
mxl-soft-div
Target Mask(SOFT_DIV)
Use the software emulation for divides (default)