diff options
author | Calin Juravle <calin@google.com> | 2014-12-16 17:02:57 +0000 |
---|---|---|
committer | Calin Juravle <calin@google.com> | 2014-12-19 09:58:27 +0000 |
commit | 52c489645b6e9ae33623f1ec24143cde5444906e (patch) | |
tree | a39667aa354645bd42a7a061d08ca82df3004143 /compiler/utils/arm/assembler_thumb2.cc | |
parent | 193c7a94822f765b0b6b0cecd54c9f08dfd26425 (diff) | |
download | art-52c489645b6e9ae33623f1ec24143cde5444906e.tar.gz art-52c489645b6e9ae33623f1ec24143cde5444906e.tar.bz2 art-52c489645b6e9ae33623f1ec24143cde5444906e.zip |
[optimizing compiler] Add support for volatile
- for backends: arm, x86, x86_64
- added necessary instructions to assemblies
- clean up code gen for field set/get
- fixed InstructionDataEquals for some instructions
- fixed comments in compiler_enums
* 003-opcode test verifies basic volatile functionality
Change-Id: I144393efa312dfb2c332cb84056b00edffee338a
Diffstat (limited to 'compiler/utils/arm/assembler_thumb2.cc')
-rw-r--r-- | compiler/utils/arm/assembler_thumb2.cc | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/compiler/utils/arm/assembler_thumb2.cc b/compiler/utils/arm/assembler_thumb2.cc index 3eaae56376..3eccd3f9df 100644 --- a/compiler/utils/arm/assembler_thumb2.cc +++ b/compiler/utils/arm/assembler_thumb2.cc @@ -1662,9 +1662,6 @@ void Thumb2Assembler::ldrex(Register rt, Register rn, uint16_t imm, Condition co CHECK_NE(rn, kNoRegister); CHECK_NE(rt, kNoRegister); CheckCondition(cond); - CHECK_NE(rn, kNoRegister); - CHECK_NE(rt, kNoRegister); - CheckCondition(cond); CHECK_LT(imm, (1u << 10)); int32_t encoding = B31 | B30 | B29 | B27 | B22 | B20 | @@ -1701,6 +1698,22 @@ void Thumb2Assembler::strex(Register rd, } +void Thumb2Assembler::ldrexd(Register rt, Register rt2, Register rn, Condition cond) { + CHECK_NE(rn, kNoRegister); + CHECK_NE(rt, kNoRegister); + CHECK_NE(rt2, kNoRegister); + CHECK_NE(rt, rt2); + CheckCondition(cond); + + int32_t encoding = B31 | B30 | B29 | B27 | B23 | B22 | B20 | + static_cast<uint32_t>(rn) << 16 | + static_cast<uint32_t>(rt) << 12 | + static_cast<uint32_t>(rt2) << 8 | + B6 | B5 | B4 | B3 | B2 | B1 | B0; + Emit32(encoding); +} + + void Thumb2Assembler::strex(Register rd, Register rt, Register rn, @@ -1709,6 +1722,26 @@ void Thumb2Assembler::strex(Register rd, } +void Thumb2Assembler::strexd(Register rd, Register rt, Register rt2, Register rn, Condition cond) { + CHECK_NE(rd, kNoRegister); + CHECK_NE(rn, kNoRegister); + CHECK_NE(rt, kNoRegister); + CHECK_NE(rt2, kNoRegister); + CHECK_NE(rt, rt2); + CHECK_NE(rd, rt); + CHECK_NE(rd, rt2); + CheckCondition(cond); + + int32_t encoding = B31 | B30 | B29 | B27 | B23 | B22 | + static_cast<uint32_t>(rn) << 16 | + static_cast<uint32_t>(rt) << 12 | + static_cast<uint32_t>(rt2) << 8 | + B6 | B5 | B4 | + static_cast<uint32_t>(rd); + Emit32(encoding); +} + + void Thumb2Assembler::clrex(Condition cond) { CheckCondition(cond); int32_t encoding = B31 | B30 | B29 | B27 | B28 | B25 | B24 | B23 | |