summaryrefslogtreecommitdiff
path: root/gcc/config/arm/arm.md
diff options
context:
space:
mode:
authordgutson <dgutson@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-04 02:52:08 +0000
committerdgutson <dgutson@138bc75d-0d04-0410-961f-82ee72b054a4>2009-09-04 02:52:08 +0000
commit099ad98bec593bb050d56890e317c565356f80f3 (patch)
treec42128928f5a992274cc7e584fea7e404deb3a4b /gcc/config/arm/arm.md
parent93fa13b87ea0b0e73ea8b54b539657e15f2546d6 (diff)
downloadgcc-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.md21
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"