summaryrefslogtreecommitdiffstats
path: root/compiler/utils/arm/assembler_arm.cc
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2014-11-18 13:46:46 -0800
committerAndreas Gampe <agampe@google.com>2014-11-20 14:32:46 -0800
commit849cc5e54cbd05f4efbd6082e03547ed9284639f (patch)
treea7f156569bc680583cc0c4d722284cfd15008bc6 /compiler/utils/arm/assembler_arm.cc
parente5f88fe4f832d8e50452aa137a7b0c03beb57185 (diff)
downloadandroid_art-849cc5e54cbd05f4efbd6082e03547ed9284639f.tar.gz
android_art-849cc5e54cbd05f4efbd6082e03547ed9284639f.tar.bz2
android_art-849cc5e54cbd05f4efbd6082e03547ed9284639f.zip
ART: Assembler_arm_test
Add some generic test infrastructure, and update the arm32 test. Supports many of the GPR instructions. Change-Id: I8a270ec377f3266d6ab486e636abb50c56b87823
Diffstat (limited to 'compiler/utils/arm/assembler_arm.cc')
-rw-r--r--compiler/utils/arm/assembler_arm.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/compiler/utils/arm/assembler_arm.cc b/compiler/utils/arm/assembler_arm.cc
index 591d461244..9c84bc1e37 100644
--- a/compiler/utils/arm/assembler_arm.cc
+++ b/compiler/utils/arm/assembler_arm.cc
@@ -92,16 +92,29 @@ uint32_t ShifterOperand::encodingArm() const {
break;
case kRegister:
if (is_shift_) {
+ uint32_t shift_type;
+ switch (shift_) {
+ case arm::Shift::ROR:
+ shift_type = static_cast<uint32_t>(shift_);
+ CHECK_NE(immed_, 0U);
+ break;
+ case arm::Shift::RRX:
+ shift_type = static_cast<uint32_t>(arm::Shift::ROR); // Same encoding as ROR.
+ CHECK_EQ(immed_, 0U);
+ break;
+ default:
+ shift_type = static_cast<uint32_t>(shift_);
+ }
// Shifted immediate or register.
if (rs_ == kNoRegister) {
// Immediate shift.
return immed_ << kShiftImmShift |
- static_cast<uint32_t>(shift_) << kShiftShift |
+ shift_type << kShiftShift |
static_cast<uint32_t>(rm_);
} else {
// Register shift.
return static_cast<uint32_t>(rs_) << kShiftRegisterShift |
- static_cast<uint32_t>(shift_) << kShiftShift | (1 << 4) |
+ shift_type << kShiftShift | (1 << 4) |
static_cast<uint32_t>(rm_);
}
} else {