diff options
author | Andreas Gampe <agampe@google.com> | 2014-11-18 13:46:46 -0800 |
---|---|---|
committer | Andreas Gampe <agampe@google.com> | 2014-11-20 14:32:46 -0800 |
commit | 849cc5e54cbd05f4efbd6082e03547ed9284639f (patch) | |
tree | a7f156569bc680583cc0c4d722284cfd15008bc6 /compiler/utils/arm/assembler_arm.cc | |
parent | e5f88fe4f832d8e50452aa137a7b0c03beb57185 (diff) | |
download | android_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.cc | 17 |
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 { |