diff options
author | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2013-02-19 23:10:29 +0000 |
---|---|---|
committer | Michael Eager <eager@gcc.gnu.org> | 2013-02-19 23:10:29 +0000 |
commit | c77f83d5c5b4518e94f347a11c0d21449572e6e0 (patch) | |
tree | d01e4f8df96134d3deb0ab4146fe10868c34ce6a | |
parent | 959434e6ba489bceb258ae02936e789be894d0e7 (diff) | |
download | gcc-c77f83d5c5b4518e94f347a11c0d21449572e6e0.zip gcc-c77f83d5c5b4518e94f347a11c0d21449572e6e0.tar.gz gcc-c77f83d5c5b4518e94f347a11c0d21449572e6e0.tar.bz2 |
Add support for the CLZ insn
Add support for the CLZ insn
* config/microblaze/microblaze.c: microblaze_has_clz = 0
Add version check for v8.10.a to enable microblaze_has_clz
* config/microblaze/microblaze.h: Add TARGET_HAS_CLZ as
combined version and TARGET_PATTERN_COMPARE check
* config/microblaze/microblaze.md: New clzsi2 instruction
From-SVN: r196158
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.c | 11 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.h | 4 | ||||
-rw-r--r-- | gcc/config/microblaze/microblaze.md | 10 |
4 files changed, 32 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 98b01b4..f6d5312f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,11 @@ 2012-02-19 Edgar E. Iglesias <edgar.iglesias@gmail.com> + * config/microblaze/microblaze.c: microblaze_has_clz = 0 + Add version check for v8.10.a to enable microblaze_has_clz + * config/microblaze/microblaze.h: Add TARGET_HAS_CLZ as combined + version and TARGET_PATTERN_COMPARE check + * config/microblaze/microblaze.md: New clzsi2 instruction + +2012-02-19 Edgar E. Iglesias <edgar.iglesias@gmail.com> * config/microblaze/microblaze.md (call_value_intern): Check symbol is function before branching. diff --git a/gcc/config/microblaze/microblaze.c b/gcc/config/microblaze/microblaze.c index 449626b..fc0296e 100644 --- a/gcc/config/microblaze/microblaze.c +++ b/gcc/config/microblaze/microblaze.c @@ -143,6 +143,9 @@ int microblaze_section_threshold = -1; delay slots. -mcpu=v3.00.a or v4.00.a turns this on. */ int microblaze_no_unsafe_delay; +/* Set to one if the targeted core has the CLZ insn. */ +int microblaze_has_clz = 0; + /* Which CPU pipeline do we use. We haven't really standardized on a CPU version having only a particular type of pipeline. There can still be options on the CPU to scale pipeline features up or down. :( @@ -1369,6 +1372,14 @@ microblaze_option_override (void) "-mxl-multiply-high can be used only with -mcpu=v6.00.a or greater"); } + ver = MICROBLAZE_VERSION_COMPARE (microblaze_select_cpu, "v8.10.a"); + microblaze_has_clz = 1; + if (ver < 0) + { + /* MicroBlaze prior to 8.10.a didn't have clz. */ + microblaze_has_clz = 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 b552665..a188a2e 100644 --- a/gcc/config/microblaze/microblaze.h +++ b/gcc/config/microblaze/microblaze.h @@ -42,6 +42,7 @@ extern int microblaze_section_threshold; extern int microblaze_dbx_regno[]; extern int microblaze_no_unsafe_delay; +extern int microblaze_has_clz; extern enum pipeline_type microblaze_pipe; #define OBJECT_FORMAT_ELF @@ -58,6 +59,9 @@ extern enum pipeline_type microblaze_pipe; #define TARGET_DEFAULT (MASK_SOFT_MUL | MASK_SOFT_DIV | MASK_SOFT_FLOAT \ | TARGET_ENDIAN_DEFAULT) +/* Do we have CLZ? */ +#define TARGET_HAS_CLZ (TARGET_PATTERN_COMPARE && microblaze_has_clz) + /* The default is to support PIC. */ #define TARGET_SUPPORTS_PIC 1 diff --git a/gcc/config/microblaze/microblaze.md b/gcc/config/microblaze/microblaze.md index b3d0514..1b42003 100644 --- a/gcc/config/microblaze/microblaze.md +++ b/gcc/config/microblaze/microblaze.md @@ -2200,3 +2200,13 @@ [(set_attr "type" "multi") (set_attr "length" "12")]) +;; This insn gives the count of leading number of zeros for the second +;; operand and stores the result in first operand. +(define_insn "clzsi2" + [(set (match_operand:SI 0 "register_operand" "=r") + (clz:SI (match_operand:SI 1 "register_operand" "r")))] + "TARGET_HAS_CLZ" + "clz\t%0,%1" + [(set_attr "type" "arith") + (set_attr "mode" "SI") + (set_attr "length" "4")]) |