summaryrefslogtreecommitdiff
path: root/compiler/utils/arm/assembler_arm32.cc
diff options
context:
space:
mode:
author Scott Wakeling <scott.wakeling@linaro.org> 2015-07-23 10:44:35 +0100
committer Scott Wakeling <scott.wakeling@linaro.org> 2015-09-11 09:51:58 +0100
commit9ee23f4273efed8d6378f6ad8e63c65e30a17139 (patch)
tree3b1bfb8a6260a57ccb2f025fcdc457464714701e /compiler/utils/arm/assembler_arm32.cc
parent62ba40149be3d1c65e4db1f455822a585149d32f (diff)
ARM/ARM64: Intrinsics - numberOfTrailingZeros, rotateLeft, rotateRight
Change-Id: I2a07c279756ee804fb7c129416bdc4a3962e93ed
Diffstat (limited to 'compiler/utils/arm/assembler_arm32.cc')
-rw-r--r--compiler/utils/arm/assembler_arm32.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler/utils/arm/assembler_arm32.cc b/compiler/utils/arm/assembler_arm32.cc
index d91ddee9b9..64fa9a4c0d 100644
--- a/compiler/utils/arm/assembler_arm32.cc
+++ b/compiler/utils/arm/assembler_arm32.cc
@@ -735,6 +735,20 @@ void Arm32Assembler::movt(Register rd, uint16_t imm16, Condition cond) {
}
+void Arm32Assembler::rbit(Register rd, Register rm, Condition cond) {
+ CHECK_NE(rd, kNoRegister);
+ CHECK_NE(rm, kNoRegister);
+ CHECK_NE(cond, kNoCondition);
+ CHECK_NE(rd, PC);
+ CHECK_NE(rm, PC);
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) |
+ B26 | B25 | B23 | B22 | B21 | B20 | (0xf << 16) |
+ (static_cast<int32_t>(rd) << kRdShift) |
+ (0xf << 8) | B5 | B4 | static_cast<int32_t>(rm);
+ Emit(encoding);
+}
+
+
void Arm32Assembler::EmitMulOp(Condition cond, int32_t opcode,
Register rd, Register rn,
Register rm, Register rs) {