diff options
author | dgutson <dgutson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-04 02:52:08 +0000 |
---|---|---|
committer | dgutson <dgutson@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-09-04 02:52:08 +0000 |
commit | 099ad98bec593bb050d56890e317c565356f80f3 (patch) | |
tree | c42128928f5a992274cc7e584fea7e404deb3a4b /gcc/config/arm/arm.md | |
parent | 93fa13b87ea0b0e73ea8b54b539657e15f2546d6 (diff) | |
download | gcc-099ad98bec593bb050d56890e317c565356f80f3.tar.gz |
2009-09-03 Daniel Gutson <dgutson@codesourcery.com>
* config/arm/arm.md (UNSPEC_RBIT): New constant.
(rbitsi2): New insn.
(ctzsi2): New expand.
* config/arm/arm.h (CTZ_DEFINED_VALUE_AT_ZERO): New macro.
testsuite/
* gcc.target/arm/ctz.c: New test case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@151402 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm/arm.md')
-rw-r--r-- | gcc/config/arm/arm.md | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 09a1b0841e9..fd00c707df4 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -100,6 +100,7 @@ (UNSPEC_GOTSYM_OFF 24) ; The offset of the start of the the GOT from a ; a given symbolic address. (UNSPEC_THUMB1_CASESI 25) ; A Thumb1 compressed dispatch-table call. + (UNSPEC_RBIT 26) ; rbit operation. ] ) @@ -10955,6 +10956,26 @@ [(set_attr "predicable" "yes") (set_attr "insn" "clz")]) +(define_insn "rbitsi2" + [(set (match_operand:SI 0 "s_register_operand" "=r") + (unspec:SI [(match_operand:SI 1 "s_register_operand" "r")] UNSPEC_RBIT))] + "TARGET_32BIT && arm_arch_thumb2" + "rbit%?\\t%0, %1" + [(set_attr "predicable" "yes") + (set_attr "insn" "clz")]) + +(define_expand "ctzsi2" + [(set (match_operand:SI 0 "s_register_operand" "") + (ctz:SI (match_operand:SI 1 "s_register_operand" "")))] + "TARGET_32BIT && arm_arch_thumb2" + " + rtx tmp = gen_reg_rtx (SImode); + emit_insn (gen_rbitsi2 (tmp, operands[1])); + emit_insn (gen_clzsi2 (operands[0], tmp)); + DONE; + " +) + ;; V5E instructions. (define_insn "prefetch" |