diff options
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.c | 15 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.h | 1 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.md | 14 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.opt | 4 |
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) |