Index: runtime/vm/assembler_arm.cc |
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc |
index 89977e49c2d28134aba95ab93207024a715e97a4..3618bcedf7154a7a7fe586c4765efda5f168bf47 100644 |
--- a/runtime/vm/assembler_arm.cc |
+++ b/runtime/vm/assembler_arm.cc |
@@ -14,7 +14,7 @@ |
#include "vm/stub_code.h" |
// An extra check since we are assuming the existence of /proc/cpuinfo below. |
-#if !defined(USING_SIMULATOR) && !defined(__linux__) && !defined(ANDROID) && \ |
+#if !defined(USING_SIMULATOR) && !defined(__linux__) && !defined(ANDROID) && \ |
!TARGET_OS_IOS |
#error ARM cross-compile only supported on Linux |
#endif |
@@ -28,8 +28,8 @@ uint32_t Address::encoding3() const { |
if (kind_ == Immediate) { |
uint32_t offset = encoding_ & kOffset12Mask; |
ASSERT(offset < 256); |
- return (encoding_ & ~kOffset12Mask) | B22 | |
- ((offset & 0xf0) << 4) | (offset & 0xf); |
+ return (encoding_ & ~kOffset12Mask) | B22 | ((offset & 0xf0) << 4) | |
+ (offset & 0xf); |
} |
ASSERT(kind_ == IndexRegister); |
return encoding_; |
@@ -39,9 +39,9 @@ uint32_t Address::encoding3() const { |
uint32_t Address::vencoding() const { |
ASSERT(kind_ == Immediate); |
uint32_t offset = encoding_ & kOffset12Mask; |
- ASSERT(offset < (1 << 10)); // In the range 0 to +1020. |
+ ASSERT(offset < (1 << 10)); // In the range 0 to +1020. |
ASSERT(Utils::IsAligned(offset, 4)); // Multiple of 4. |
- int mode = encoding_ & ((8|4|1) << 21); |
+ int mode = encoding_ & ((8 | 4 | 1) << 21); |
ASSERT((mode == Offset) || (mode == NegOffset)); |
uint32_t vencoding = (encoding_ & (0xf << kRnShift)) | (offset >> 2); |
if (mode == Offset) { |
@@ -80,10 +80,8 @@ void Assembler::EmitType01(Condition cond, |
int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | |
type << kTypeShift | |
static_cast<int32_t>(opcode) << kOpcodeShift | |
- set_cc << kSShift | |
- static_cast<int32_t>(rn) << kRnShift | |
- static_cast<int32_t>(rd) << kRdShift | |
- o.encoding(); |
+ set_cc << kSShift | static_cast<int32_t>(rn) << kRnShift | |
+ static_cast<int32_t>(rd) << kRdShift | o.encoding(); |
Emit(encoding); |
} |
@@ -91,8 +89,7 @@ void Assembler::EmitType01(Condition cond, |
void Assembler::EmitType5(Condition cond, int32_t offset, bool link) { |
ASSERT(cond != kNoCondition); |
int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | |
- 5 << kTypeShift | |
- (link ? 1 : 0) << kLinkShift; |
+ 5 << kTypeShift | (link ? 1 : 0) << kLinkShift; |
Emit(Assembler::EncodeBranchOffset(offset, encoding)); |
} |
@@ -106,12 +103,10 @@ void Assembler::EmitMemOp(Condition cond, |
ASSERT(cond != kNoCondition); |
ASSERT(!ad.has_writeback() || (ad.rn() != rd)); // Unpredictable. |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B26 | (ad.kind() == Address::Immediate ? 0 : B25) | |
- (load ? L : 0) | |
- (byte ? B : 0) | |
- (static_cast<int32_t>(rd) << kRdShift) | |
- ad.encoding(); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B26 | |
+ (ad.kind() == Address::Immediate ? 0 : B25) | |
+ (load ? L : 0) | (byte ? B : 0) | |
+ (static_cast<int32_t>(rd) << kRdShift) | ad.encoding(); |
Emit(encoding); |
} |
@@ -122,10 +117,8 @@ void Assembler::EmitMemOpAddressMode3(Condition cond, |
Address ad) { |
ASSERT(rd != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- mode | |
- (static_cast<int32_t>(rd) << kRdShift) | |
- ad.encoding3(); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | mode | |
+ (static_cast<int32_t>(rd) << kRdShift) | ad.encoding3(); |
Emit(encoding); |
} |
@@ -137,12 +130,9 @@ void Assembler::EmitMultiMemOp(Condition cond, |
RegList regs) { |
ASSERT(base != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | |
- am | |
- (load ? L : 0) | |
- (static_cast<int32_t>(base) << kRnShift) | |
- regs; |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ am | (load ? L : 0) | |
+ (static_cast<int32_t>(base) << kRnShift) | regs; |
Emit(encoding); |
} |
@@ -154,12 +144,11 @@ void Assembler::EmitShiftImmediate(Condition cond, |
Operand o) { |
ASSERT(cond != kNoCondition); |
ASSERT(o.type() == 1); |
- int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | |
- static_cast<int32_t>(MOV) << kOpcodeShift | |
- static_cast<int32_t>(rd) << kRdShift | |
- o.encoding() << kShiftImmShift | |
- static_cast<int32_t>(opcode) << kShiftShift | |
- static_cast<int32_t>(rm); |
+ int32_t encoding = |
+ static_cast<int32_t>(cond) << kConditionShift | |
+ static_cast<int32_t>(MOV) << kOpcodeShift | |
+ static_cast<int32_t>(rd) << kRdShift | o.encoding() << kShiftImmShift | |
+ static_cast<int32_t>(opcode) << kShiftShift | static_cast<int32_t>(rm); |
Emit(encoding); |
} |
@@ -175,8 +164,7 @@ void Assembler::EmitShiftRegister(Condition cond, |
static_cast<int32_t>(MOV) << kOpcodeShift | |
static_cast<int32_t>(rd) << kRdShift | |
o.encoding() << kShiftRegisterShift | |
- static_cast<int32_t>(opcode) << kShiftShift | |
- B4 | |
+ static_cast<int32_t>(opcode) << kShiftShift | B4 | |
static_cast<int32_t>(rm); |
Emit(encoding); |
} |
@@ -311,18 +299,18 @@ void Assembler::clz(Register rd, Register rm, Condition cond) { |
ASSERT(cond != kNoCondition); |
ASSERT(rd != PC); |
ASSERT(rm != PC); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B24 | B22 | B21 | (0xf << 16) | |
- (static_cast<int32_t>(rd) << kRdShift) | |
- (0xf << 8) | B4 | static_cast<int32_t>(rm); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B24 | |
+ B22 | B21 | (0xf << 16) | |
+ (static_cast<int32_t>(rd) << kRdShift) | (0xf << 8) | B4 | |
+ static_cast<int32_t>(rm); |
Emit(encoding); |
} |
void Assembler::movw(Register rd, uint16_t imm16, Condition cond) { |
ASSERT(cond != kNoCondition); |
- int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | |
- B25 | B24 | ((imm16 >> 12) << 16) | |
+ int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | B25 | B24 | |
+ ((imm16 >> 12) << 16) | |
static_cast<int32_t>(rd) << kRdShift | (imm16 & 0xfff); |
Emit(encoding); |
} |
@@ -330,28 +318,29 @@ void Assembler::movw(Register rd, uint16_t imm16, Condition cond) { |
void Assembler::movt(Register rd, uint16_t imm16, Condition cond) { |
ASSERT(cond != kNoCondition); |
- int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | |
- B25 | B24 | B22 | ((imm16 >> 12) << 16) | |
+ int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | B25 | B24 | |
+ B22 | ((imm16 >> 12) << 16) | |
static_cast<int32_t>(rd) << kRdShift | (imm16 & 0xfff); |
Emit(encoding); |
} |
-void Assembler::EmitMulOp(Condition cond, int32_t opcode, |
- Register rd, Register rn, |
- Register rm, Register rs) { |
+void Assembler::EmitMulOp(Condition cond, |
+ int32_t opcode, |
+ Register rd, |
+ Register rn, |
+ Register rm, |
+ Register rs) { |
ASSERT(rd != kNoRegister); |
ASSERT(rn != kNoRegister); |
ASSERT(rm != kNoRegister); |
ASSERT(rs != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = opcode | |
- (static_cast<int32_t>(cond) << kConditionShift) | |
- (static_cast<int32_t>(rn) << kRnShift) | |
- (static_cast<int32_t>(rd) << kRdShift) | |
- (static_cast<int32_t>(rs) << kRsShift) | |
- B7 | B4 | |
- (static_cast<int32_t>(rm) << kRmShift); |
+ int32_t encoding = opcode | (static_cast<int32_t>(cond) << kConditionShift) | |
+ (static_cast<int32_t>(rn) << kRnShift) | |
+ (static_cast<int32_t>(rd) << kRdShift) | |
+ (static_cast<int32_t>(rs) << kRsShift) | B7 | B4 | |
+ (static_cast<int32_t>(rm) << kRmShift); |
Emit(encoding); |
} |
@@ -368,16 +357,22 @@ void Assembler::muls(Register rd, Register rn, Register rm, Condition cond) { |
} |
-void Assembler::mla(Register rd, Register rn, |
- Register rm, Register ra, Condition cond) { |
+void Assembler::mla(Register rd, |
+ Register rn, |
+ Register rm, |
+ Register ra, |
+ Condition cond) { |
// rd <- ra + rn * rm. |
// Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd. |
EmitMulOp(cond, B21, ra, rd, rn, rm); |
} |
-void Assembler::mls(Register rd, Register rn, |
- Register rm, Register ra, Condition cond) { |
+void Assembler::mls(Register rd, |
+ Register rn, |
+ Register rm, |
+ Register ra, |
+ Condition cond) { |
// rd <- ra - rn * rm. |
if (TargetCPUFeatures::arm_version() == ARMv7) { |
// Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd. |
@@ -389,29 +384,40 @@ void Assembler::mls(Register rd, Register rn, |
} |
-void Assembler::smull(Register rd_lo, Register rd_hi, |
- Register rn, Register rm, Condition cond) { |
+void Assembler::smull(Register rd_lo, |
+ Register rd_hi, |
+ Register rn, |
+ Register rm, |
+ Condition cond) { |
// Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
EmitMulOp(cond, B23 | B22, rd_lo, rd_hi, rn, rm); |
} |
-void Assembler::umull(Register rd_lo, Register rd_hi, |
- Register rn, Register rm, Condition cond) { |
+void Assembler::umull(Register rd_lo, |
+ Register rd_hi, |
+ Register rn, |
+ Register rm, |
+ Condition cond) { |
// Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
EmitMulOp(cond, B23, rd_lo, rd_hi, rn, rm); |
} |
-void Assembler::umlal(Register rd_lo, Register rd_hi, |
- Register rn, Register rm, Condition cond) { |
+void Assembler::umlal(Register rd_lo, |
+ Register rd_hi, |
+ Register rn, |
+ Register rm, |
+ Condition cond) { |
// Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
EmitMulOp(cond, B23 | B21, rd_lo, rd_hi, rn, rm); |
} |
-void Assembler::umaal(Register rd_lo, Register rd_hi, |
- Register rn, Register rm) { |
+void Assembler::umaal(Register rd_lo, |
+ Register rd_hi, |
+ Register rn, |
+ Register rm) { |
ASSERT(rd_lo != IP); |
ASSERT(rd_hi != IP); |
ASSERT(rn != IP); |
@@ -428,19 +434,20 @@ void Assembler::umaal(Register rd_lo, Register rd_hi, |
} |
-void Assembler::EmitDivOp(Condition cond, int32_t opcode, |
- Register rd, Register rn, Register rm) { |
+void Assembler::EmitDivOp(Condition cond, |
+ int32_t opcode, |
+ Register rd, |
+ Register rn, |
+ Register rm) { |
ASSERT(TargetCPUFeatures::integer_division_supported()); |
ASSERT(rd != kNoRegister); |
ASSERT(rn != kNoRegister); |
ASSERT(rm != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = opcode | |
- (static_cast<int32_t>(cond) << kConditionShift) | |
- (static_cast<int32_t>(rn) << kDivRnShift) | |
- (static_cast<int32_t>(rd) << kDivRdShift) | |
- B26 | B25 | B24 | B20 | B4 | |
- (static_cast<int32_t>(rm) << kDivRmShift); |
+ int32_t encoding = opcode | (static_cast<int32_t>(cond) << kConditionShift) | |
+ (static_cast<int32_t>(rn) << kDivRnShift) | |
+ (static_cast<int32_t>(rd) << kDivRdShift) | B26 | B25 | |
+ B24 | B20 | B4 | (static_cast<int32_t>(rm) << kDivRmShift); |
Emit(encoding); |
} |
@@ -451,7 +458,7 @@ void Assembler::sdiv(Register rd, Register rn, Register rm, Condition cond) { |
void Assembler::udiv(Register rd, Register rn, Register rm, Condition cond) { |
- EmitDivOp(cond, B21 , rd, rn, rm); |
+ EmitDivOp(cond, B21, rd, rn, rm); |
} |
@@ -495,7 +502,10 @@ void Assembler::ldrsh(Register rd, Address ad, Condition cond) { |
} |
-void Assembler::ldrd(Register rd, Register rd2, Register rn, int32_t offset, |
+void Assembler::ldrd(Register rd, |
+ Register rd2, |
+ Register rn, |
+ int32_t offset, |
Condition cond) { |
ASSERT((rd % 2) == 0); |
ASSERT(rd2 == rd + 1); |
@@ -508,7 +518,10 @@ void Assembler::ldrd(Register rd, Register rd2, Register rn, int32_t offset, |
} |
-void Assembler::strd(Register rd, Register rd2, Register rn, int32_t offset, |
+void Assembler::strd(Register rd, |
+ Register rd2, |
+ Register rn, |
+ int32_t offset, |
Condition cond) { |
ASSERT((rd % 2) == 0); |
ASSERT(rd2 == rd + 1); |
@@ -521,14 +534,18 @@ void Assembler::strd(Register rd, Register rd2, Register rn, int32_t offset, |
} |
-void Assembler::ldm(BlockAddressMode am, Register base, RegList regs, |
+void Assembler::ldm(BlockAddressMode am, |
+ Register base, |
+ RegList regs, |
Condition cond) { |
ASSERT(regs != 0); |
EmitMultiMemOp(cond, am, true, base, regs); |
} |
-void Assembler::stm(BlockAddressMode am, Register base, RegList regs, |
+void Assembler::stm(BlockAddressMode am, |
+ Register base, |
+ RegList regs, |
Condition cond) { |
ASSERT(regs != 0); |
EmitMultiMemOp(cond, am, false, base, regs); |
@@ -540,13 +557,10 @@ void Assembler::ldrex(Register rt, Register rn, Condition cond) { |
ASSERT(rn != kNoRegister); |
ASSERT(rt != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B24 | |
- B23 | |
- L | |
- (static_cast<int32_t>(rn) << kLdExRnShift) | |
- (static_cast<int32_t>(rt) << kLdExRtShift) | |
- B11 | B10 | B9 | B8 | B7 | B4 | B3 | B2 | B1 | B0; |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B24 | |
+ B23 | L | (static_cast<int32_t>(rn) << kLdExRnShift) | |
+ (static_cast<int32_t>(rt) << kLdExRtShift) | B11 | B10 | |
+ B9 | B8 | B7 | B4 | B3 | B2 | B1 | B0; |
Emit(encoding); |
} |
@@ -557,12 +571,10 @@ void Assembler::strex(Register rd, Register rt, Register rn, Condition cond) { |
ASSERT(rd != kNoRegister); |
ASSERT(rt != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B24 | |
- B23 | |
- (static_cast<int32_t>(rn) << kStrExRnShift) | |
- (static_cast<int32_t>(rd) << kStrExRdShift) | |
- B11 | B10 | B9 | B8 | B7 | B4 | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B24 | |
+ B23 | (static_cast<int32_t>(rn) << kStrExRnShift) | |
+ (static_cast<int32_t>(rd) << kStrExRdShift) | B11 | B10 | |
+ B9 | B8 | B7 | B4 | |
(static_cast<int32_t>(rt) << kStrExRtShift); |
Emit(encoding); |
} |
@@ -570,16 +582,16 @@ void Assembler::strex(Register rd, Register rt, Register rn, Condition cond) { |
void Assembler::clrex() { |
ASSERT(TargetCPUFeatures::arm_version() != ARMv5TE); |
- int32_t encoding = (kSpecialCondition << kConditionShift) | |
- B26 | B24 | B22 | B21 | B20 | (0xff << 12) | B4 | 0xf; |
+ int32_t encoding = (kSpecialCondition << kConditionShift) | B26 | B24 | B22 | |
+ B21 | B20 | (0xff << 12) | B4 | 0xf; |
Emit(encoding); |
} |
void Assembler::nop(Condition cond) { |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B25 | B24 | B21 | (0xf << 12); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B25 | |
+ B24 | B21 | (0xf << 12); |
Emit(encoding); |
} |
@@ -591,11 +603,10 @@ void Assembler::vmovsr(SRegister sn, Register rt, Condition cond) { |
ASSERT(rt != SP); |
ASSERT(rt != PC); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | |
- ((static_cast<int32_t>(sn) >> 1)*B16) | |
- (static_cast<int32_t>(rt)*B12) | B11 | B9 | |
- ((static_cast<int32_t>(sn) & 1)*B7) | B4; |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B25 | ((static_cast<int32_t>(sn) >> 1) * B16) | |
+ (static_cast<int32_t>(rt) * B12) | B11 | B9 | |
+ ((static_cast<int32_t>(sn) & 1) * B7) | B4; |
Emit(encoding); |
} |
@@ -607,16 +618,17 @@ void Assembler::vmovrs(Register rt, SRegister sn, Condition cond) { |
ASSERT(rt != SP); |
ASSERT(rt != PC); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | B20 | |
- ((static_cast<int32_t>(sn) >> 1)*B16) | |
- (static_cast<int32_t>(rt)*B12) | B11 | B9 | |
- ((static_cast<int32_t>(sn) & 1)*B7) | B4; |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B25 | B20 | ((static_cast<int32_t>(sn) >> 1) * B16) | |
+ (static_cast<int32_t>(rt) * B12) | B11 | B9 | |
+ ((static_cast<int32_t>(sn) & 1) * B7) | B4; |
Emit(encoding); |
} |
-void Assembler::vmovsrr(SRegister sm, Register rt, Register rt2, |
+void Assembler::vmovsrr(SRegister sm, |
+ Register rt, |
+ Register rt2, |
Condition cond) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(sm != kNoSRegister); |
@@ -628,17 +640,18 @@ void Assembler::vmovsrr(SRegister sm, Register rt, Register rt2, |
ASSERT(rt2 != SP); |
ASSERT(rt2 != PC); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B22 | |
- (static_cast<int32_t>(rt2)*B16) | |
- (static_cast<int32_t>(rt)*B12) | B11 | B9 | |
- ((static_cast<int32_t>(sm) & 1)*B5) | B4 | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B22 | (static_cast<int32_t>(rt2) * B16) | |
+ (static_cast<int32_t>(rt) * B12) | B11 | B9 | |
+ ((static_cast<int32_t>(sm) & 1) * B5) | B4 | |
(static_cast<int32_t>(sm) >> 1); |
Emit(encoding); |
} |
-void Assembler::vmovrrs(Register rt, Register rt2, SRegister sm, |
+void Assembler::vmovrrs(Register rt, |
+ Register rt2, |
+ SRegister sm, |
Condition cond) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(sm != kNoSRegister); |
@@ -651,11 +664,10 @@ void Assembler::vmovrrs(Register rt, Register rt2, SRegister sm, |
ASSERT(rt2 != PC); |
ASSERT(rt != rt2); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B22 | B20 | |
- (static_cast<int32_t>(rt2)*B16) | |
- (static_cast<int32_t>(rt)*B12) | B11 | B9 | |
- ((static_cast<int32_t>(sm) & 1)*B5) | B4 | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B22 | B20 | (static_cast<int32_t>(rt2) * B16) | |
+ (static_cast<int32_t>(rt) * B12) | B11 | B9 | |
+ ((static_cast<int32_t>(sm) & 1) * B5) | B4 | |
(static_cast<int32_t>(sm) >> 1); |
Emit(encoding); |
} |
@@ -669,17 +681,17 @@ void Assembler::vmovdr(DRegister dn, int i, Register rt, Condition cond) { |
ASSERT(rt != PC); |
ASSERT(dn != kNoDRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | |
- (i*B21) | |
- (static_cast<int32_t>(rt)*B12) | B11 | B9 | B8 | |
- ((static_cast<int32_t>(dn) >> 4)*B7) | |
- ((static_cast<int32_t>(dn) & 0xf)*B16) | B4; |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B25 | (i * B21) | (static_cast<int32_t>(rt) * B12) | |
+ B11 | B9 | B8 | ((static_cast<int32_t>(dn) >> 4) * B7) | |
+ ((static_cast<int32_t>(dn) & 0xf) * B16) | B4; |
Emit(encoding); |
} |
-void Assembler::vmovdrr(DRegister dm, Register rt, Register rt2, |
+void Assembler::vmovdrr(DRegister dm, |
+ Register rt, |
+ Register rt2, |
Condition cond) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(dm != kNoDRegister); |
@@ -690,17 +702,18 @@ void Assembler::vmovdrr(DRegister dm, Register rt, Register rt2, |
ASSERT(rt2 != SP); |
ASSERT(rt2 != PC); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B22 | |
- (static_cast<int32_t>(rt2)*B16) | |
- (static_cast<int32_t>(rt)*B12) | B11 | B9 | B8 | |
- ((static_cast<int32_t>(dm) >> 4)*B5) | B4 | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B22 | (static_cast<int32_t>(rt2) * B16) | |
+ (static_cast<int32_t>(rt) * B12) | B11 | B9 | B8 | |
+ ((static_cast<int32_t>(dm) >> 4) * B5) | B4 | |
(static_cast<int32_t>(dm) & 0xf); |
Emit(encoding); |
} |
-void Assembler::vmovrrd(Register rt, Register rt2, DRegister dm, |
+void Assembler::vmovrrd(Register rt, |
+ Register rt2, |
+ DRegister dm, |
Condition cond) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(dm != kNoDRegister); |
@@ -712,11 +725,10 @@ void Assembler::vmovrrd(Register rt, Register rt2, DRegister dm, |
ASSERT(rt2 != PC); |
ASSERT(rt != rt2); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B22 | B20 | |
- (static_cast<int32_t>(rt2)*B16) | |
- (static_cast<int32_t>(rt)*B12) | B11 | B9 | B8 | |
- ((static_cast<int32_t>(dm) >> 4)*B5) | B4 | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B22 | B20 | (static_cast<int32_t>(rt2) * B16) | |
+ (static_cast<int32_t>(rt) * B12) | B11 | B9 | B8 | |
+ ((static_cast<int32_t>(dm) >> 4) * B5) | B4 | |
(static_cast<int32_t>(dm) & 0xf); |
Emit(encoding); |
} |
@@ -726,11 +738,10 @@ void Assembler::vldrs(SRegister sd, Address ad, Condition cond) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(sd != kNoSRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B24 | B20 | |
- ((static_cast<int32_t>(sd) & 1)*B22) | |
- ((static_cast<int32_t>(sd) >> 1)*B12) | |
- B11 | B9 | ad.vencoding(); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B24 | B20 | ((static_cast<int32_t>(sd) & 1) * B22) | |
+ ((static_cast<int32_t>(sd) >> 1) * B12) | B11 | B9 | |
+ ad.vencoding(); |
Emit(encoding); |
} |
@@ -740,11 +751,10 @@ void Assembler::vstrs(SRegister sd, Address ad, Condition cond) { |
ASSERT(static_cast<Register>(ad.encoding_ & (0xf << kRnShift)) != PC); |
ASSERT(sd != kNoSRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B24 | |
- ((static_cast<int32_t>(sd) & 1)*B22) | |
- ((static_cast<int32_t>(sd) >> 1)*B12) | |
- B11 | B9 | ad.vencoding(); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B24 | ((static_cast<int32_t>(sd) & 1) * B22) | |
+ ((static_cast<int32_t>(sd) >> 1) * B12) | B11 | B9 | |
+ ad.vencoding(); |
Emit(encoding); |
} |
@@ -753,11 +763,10 @@ void Assembler::vldrd(DRegister dd, Address ad, Condition cond) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(dd != kNoDRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B24 | B20 | |
- ((static_cast<int32_t>(dd) >> 4)*B22) | |
- ((static_cast<int32_t>(dd) & 0xf)*B12) | |
- B11 | B9 | B8 | ad.vencoding(); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B24 | B20 | ((static_cast<int32_t>(dd) >> 4) * B22) | |
+ ((static_cast<int32_t>(dd) & 0xf) * B12) | B11 | B9 | B8 | |
+ ad.vencoding(); |
Emit(encoding); |
} |
@@ -767,44 +776,40 @@ void Assembler::vstrd(DRegister dd, Address ad, Condition cond) { |
ASSERT(static_cast<Register>(ad.encoding_ & (0xf << kRnShift)) != PC); |
ASSERT(dd != kNoDRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B24 | |
- ((static_cast<int32_t>(dd) >> 4)*B22) | |
- ((static_cast<int32_t>(dd) & 0xf)*B12) | |
- B11 | B9 | B8 | ad.vencoding(); |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B24 | ((static_cast<int32_t>(dd) >> 4) * B22) | |
+ ((static_cast<int32_t>(dd) & 0xf) * B12) | B11 | B9 | B8 | |
+ ad.vencoding(); |
Emit(encoding); |
} |
void Assembler::EmitMultiVSMemOp(Condition cond, |
- BlockAddressMode am, |
- bool load, |
- Register base, |
- SRegister start, |
- uint32_t count) { |
+ BlockAddressMode am, |
+ bool load, |
+ Register base, |
+ SRegister start, |
+ uint32_t count) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(base != kNoRegister); |
ASSERT(cond != kNoCondition); |
ASSERT(start != kNoSRegister); |
ASSERT(static_cast<int32_t>(start) + count <= kNumberOfSRegisters); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B11 | B9 | |
- am | |
- (load ? L : 0) | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B11 | B9 | am | (load ? L : 0) | |
(static_cast<int32_t>(base) << kRnShift) | |
((static_cast<int32_t>(start) & 0x1) ? D : 0) | |
- ((static_cast<int32_t>(start) >> 1) << 12) | |
- count; |
+ ((static_cast<int32_t>(start) >> 1) << 12) | count; |
Emit(encoding); |
} |
void Assembler::EmitMultiVDMemOp(Condition cond, |
- BlockAddressMode am, |
- bool load, |
- Register base, |
- DRegister start, |
- int32_t count) { |
+ BlockAddressMode am, |
+ bool load, |
+ Register base, |
+ DRegister start, |
+ int32_t count) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(base != kNoRegister); |
ASSERT(cond != kNoCondition); |
@@ -812,36 +817,42 @@ void Assembler::EmitMultiVDMemOp(Condition cond, |
ASSERT(static_cast<int32_t>(start) + count <= kNumberOfDRegisters); |
const int armv5te = TargetCPUFeatures::arm_version() == ARMv5TE ? 1 : 0; |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B11 | B9 | B8 | |
- am | |
- (load ? L : 0) | |
- (static_cast<int32_t>(base) << kRnShift) | |
- ((static_cast<int32_t>(start) & 0x10) ? D : 0) | |
- ((static_cast<int32_t>(start) & 0xf) << 12) | |
- (count << 1) | armv5te; |
+ int32_t encoding = |
+ (static_cast<int32_t>(cond) << kConditionShift) | B27 | B26 | B11 | B9 | |
+ B8 | am | (load ? L : 0) | (static_cast<int32_t>(base) << kRnShift) | |
+ ((static_cast<int32_t>(start) & 0x10) ? D : 0) | |
+ ((static_cast<int32_t>(start) & 0xf) << 12) | (count << 1) | armv5te; |
Emit(encoding); |
} |
-void Assembler::vldms(BlockAddressMode am, Register base, |
- SRegister first, SRegister last, Condition cond) { |
+void Assembler::vldms(BlockAddressMode am, |
+ Register base, |
+ SRegister first, |
+ SRegister last, |
+ Condition cond) { |
ASSERT((am == IA) || (am == IA_W) || (am == DB_W)); |
ASSERT(last > first); |
EmitMultiVSMemOp(cond, am, true, base, first, last - first + 1); |
} |
-void Assembler::vstms(BlockAddressMode am, Register base, |
- SRegister first, SRegister last, Condition cond) { |
+void Assembler::vstms(BlockAddressMode am, |
+ Register base, |
+ SRegister first, |
+ SRegister last, |
+ Condition cond) { |
ASSERT((am == IA) || (am == IA_W) || (am == DB_W)); |
ASSERT(last > first); |
EmitMultiVSMemOp(cond, am, false, base, first, last - first + 1); |
} |
-void Assembler::vldmd(BlockAddressMode am, Register base, |
- DRegister first, intptr_t count, Condition cond) { |
+void Assembler::vldmd(BlockAddressMode am, |
+ Register base, |
+ DRegister first, |
+ intptr_t count, |
+ Condition cond) { |
ASSERT((am == IA) || (am == IA_W) || (am == DB_W)); |
ASSERT(count <= 16); |
ASSERT(first + count <= kNumberOfDRegisters); |
@@ -849,8 +860,11 @@ void Assembler::vldmd(BlockAddressMode am, Register base, |
} |
-void Assembler::vstmd(BlockAddressMode am, Register base, |
- DRegister first, intptr_t count, Condition cond) { |
+void Assembler::vstmd(BlockAddressMode am, |
+ Register base, |
+ DRegister first, |
+ intptr_t count, |
+ Condition cond) { |
ASSERT((am == IA) || (am == IA_W) || (am == DB_W)); |
ASSERT(count <= 16); |
ASSERT(first + count <= kNumberOfDRegisters); |
@@ -858,40 +872,44 @@ void Assembler::vstmd(BlockAddressMode am, Register base, |
} |
-void Assembler::EmitVFPsss(Condition cond, int32_t opcode, |
- SRegister sd, SRegister sn, SRegister sm) { |
+void Assembler::EmitVFPsss(Condition cond, |
+ int32_t opcode, |
+ SRegister sd, |
+ SRegister sn, |
+ SRegister sm) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(sd != kNoSRegister); |
ASSERT(sn != kNoSRegister); |
ASSERT(sm != kNoSRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | B11 | B9 | opcode | |
- ((static_cast<int32_t>(sd) & 1)*B22) | |
- ((static_cast<int32_t>(sn) >> 1)*B16) | |
- ((static_cast<int32_t>(sd) >> 1)*B12) | |
- ((static_cast<int32_t>(sn) & 1)*B7) | |
- ((static_cast<int32_t>(sm) & 1)*B5) | |
- (static_cast<int32_t>(sm) >> 1); |
+ int32_t encoding = |
+ (static_cast<int32_t>(cond) << kConditionShift) | B27 | B26 | B25 | B11 | |
+ B9 | opcode | ((static_cast<int32_t>(sd) & 1) * B22) | |
+ ((static_cast<int32_t>(sn) >> 1) * B16) | |
+ ((static_cast<int32_t>(sd) >> 1) * B12) | |
+ ((static_cast<int32_t>(sn) & 1) * B7) | |
+ ((static_cast<int32_t>(sm) & 1) * B5) | (static_cast<int32_t>(sm) >> 1); |
Emit(encoding); |
} |
-void Assembler::EmitVFPddd(Condition cond, int32_t opcode, |
- DRegister dd, DRegister dn, DRegister dm) { |
+void Assembler::EmitVFPddd(Condition cond, |
+ int32_t opcode, |
+ DRegister dd, |
+ DRegister dn, |
+ DRegister dm) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(dd != kNoDRegister); |
ASSERT(dn != kNoDRegister); |
ASSERT(dm != kNoDRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | B11 | B9 | B8 | opcode | |
- ((static_cast<int32_t>(dd) >> 4)*B22) | |
- ((static_cast<int32_t>(dn) & 0xf)*B16) | |
- ((static_cast<int32_t>(dd) & 0xf)*B12) | |
- ((static_cast<int32_t>(dn) >> 4)*B7) | |
- ((static_cast<int32_t>(dm) >> 4)*B5) | |
- (static_cast<int32_t>(dm) & 0xf); |
+ int32_t encoding = |
+ (static_cast<int32_t>(cond) << kConditionShift) | B27 | B26 | B25 | B11 | |
+ B9 | B8 | opcode | ((static_cast<int32_t>(dd) >> 4) * B22) | |
+ ((static_cast<int32_t>(dn) & 0xf) * B16) | |
+ ((static_cast<int32_t>(dd) & 0xf) * B12) | |
+ ((static_cast<int32_t>(dn) >> 4) * B7) | |
+ ((static_cast<int32_t>(dm) >> 4) * B5) | (static_cast<int32_t>(dm) & 0xf); |
Emit(encoding); |
} |
@@ -913,11 +931,11 @@ bool Assembler::vmovs(SRegister sd, float s_imm, Condition cond) { |
uint32_t imm32 = bit_cast<uint32_t, float>(s_imm); |
if (((imm32 & ((1 << 19) - 1)) == 0) && |
((((imm32 >> 25) & ((1 << 6) - 1)) == (1 << 5)) || |
- (((imm32 >> 25) & ((1 << 6) - 1)) == ((1 << 5) -1)))) { |
+ (((imm32 >> 25) & ((1 << 6) - 1)) == ((1 << 5) - 1)))) { |
uint8_t imm8 = ((imm32 >> 31) << 7) | (((imm32 >> 29) & 1) << 6) | |
- ((imm32 >> 19) & ((1 << 6) -1)); |
- EmitVFPsss(cond, B23 | B21 | B20 | ((imm8 >> 4)*B16) | (imm8 & 0xf), |
- sd, S0, S0); |
+ ((imm32 >> 19) & ((1 << 6) - 1)); |
+ EmitVFPsss(cond, B23 | B21 | B20 | ((imm8 >> 4) * B16) | (imm8 & 0xf), sd, |
+ S0, S0); |
return true; |
} |
return false; |
@@ -931,10 +949,10 @@ bool Assembler::vmovd(DRegister dd, double d_imm, Condition cond) { |
uint64_t imm64 = bit_cast<uint64_t, double>(d_imm); |
if (((imm64 & ((1LL << 48) - 1)) == 0) && |
((((imm64 >> 54) & ((1 << 9) - 1)) == (1 << 8)) || |
- (((imm64 >> 54) & ((1 << 9) - 1)) == ((1 << 8) -1)))) { |
+ (((imm64 >> 54) & ((1 << 9) - 1)) == ((1 << 8) - 1)))) { |
uint8_t imm8 = ((imm64 >> 63) << 7) | (((imm64 >> 61) & 1) << 6) | |
- ((imm64 >> 48) & ((1 << 6) -1)); |
- EmitVFPddd(cond, B23 | B21 | B20 | ((imm8 >> 4)*B16) | B8 | (imm8 & 0xf), |
+ ((imm64 >> 48) & ((1 << 6) - 1)); |
+ EmitVFPddd(cond, B23 | B21 | B20 | ((imm8 >> 4) * B16) | B8 | (imm8 & 0xf), |
dd, D0, D0); |
return true; |
} |
@@ -942,73 +960,97 @@ bool Assembler::vmovd(DRegister dd, double d_imm, Condition cond) { |
} |
-void Assembler::vadds(SRegister sd, SRegister sn, SRegister sm, |
+void Assembler::vadds(SRegister sd, |
+ SRegister sn, |
+ SRegister sm, |
Condition cond) { |
EmitVFPsss(cond, B21 | B20, sd, sn, sm); |
} |
-void Assembler::vaddd(DRegister dd, DRegister dn, DRegister dm, |
+void Assembler::vaddd(DRegister dd, |
+ DRegister dn, |
+ DRegister dm, |
Condition cond) { |
EmitVFPddd(cond, B21 | B20, dd, dn, dm); |
} |
-void Assembler::vsubs(SRegister sd, SRegister sn, SRegister sm, |
+void Assembler::vsubs(SRegister sd, |
+ SRegister sn, |
+ SRegister sm, |
Condition cond) { |
EmitVFPsss(cond, B21 | B20 | B6, sd, sn, sm); |
} |
-void Assembler::vsubd(DRegister dd, DRegister dn, DRegister dm, |
+void Assembler::vsubd(DRegister dd, |
+ DRegister dn, |
+ DRegister dm, |
Condition cond) { |
EmitVFPddd(cond, B21 | B20 | B6, dd, dn, dm); |
} |
-void Assembler::vmuls(SRegister sd, SRegister sn, SRegister sm, |
+void Assembler::vmuls(SRegister sd, |
+ SRegister sn, |
+ SRegister sm, |
Condition cond) { |
EmitVFPsss(cond, B21, sd, sn, sm); |
} |
-void Assembler::vmuld(DRegister dd, DRegister dn, DRegister dm, |
+void Assembler::vmuld(DRegister dd, |
+ DRegister dn, |
+ DRegister dm, |
Condition cond) { |
EmitVFPddd(cond, B21, dd, dn, dm); |
} |
-void Assembler::vmlas(SRegister sd, SRegister sn, SRegister sm, |
+void Assembler::vmlas(SRegister sd, |
+ SRegister sn, |
+ SRegister sm, |
Condition cond) { |
EmitVFPsss(cond, 0, sd, sn, sm); |
} |
-void Assembler::vmlad(DRegister dd, DRegister dn, DRegister dm, |
+void Assembler::vmlad(DRegister dd, |
+ DRegister dn, |
+ DRegister dm, |
Condition cond) { |
EmitVFPddd(cond, 0, dd, dn, dm); |
} |
-void Assembler::vmlss(SRegister sd, SRegister sn, SRegister sm, |
+void Assembler::vmlss(SRegister sd, |
+ SRegister sn, |
+ SRegister sm, |
Condition cond) { |
EmitVFPsss(cond, B6, sd, sn, sm); |
} |
-void Assembler::vmlsd(DRegister dd, DRegister dn, DRegister dm, |
+void Assembler::vmlsd(DRegister dd, |
+ DRegister dn, |
+ DRegister dm, |
Condition cond) { |
EmitVFPddd(cond, B6, dd, dn, dm); |
} |
-void Assembler::vdivs(SRegister sd, SRegister sn, SRegister sm, |
+void Assembler::vdivs(SRegister sd, |
+ SRegister sn, |
+ SRegister sm, |
Condition cond) { |
EmitVFPsss(cond, B23, sd, sn, sm); |
} |
-void Assembler::vdivd(DRegister dd, DRegister dn, DRegister dm, |
+void Assembler::vdivd(DRegister dd, |
+ DRegister dn, |
+ DRegister dm, |
Condition cond) { |
EmitVFPddd(cond, B23, dd, dn, dm); |
} |
@@ -1043,34 +1085,36 @@ void Assembler::vsqrtd(DRegister dd, DRegister dm, Condition cond) { |
} |
-void Assembler::EmitVFPsd(Condition cond, int32_t opcode, |
- SRegister sd, DRegister dm) { |
+void Assembler::EmitVFPsd(Condition cond, |
+ int32_t opcode, |
+ SRegister sd, |
+ DRegister dm) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(sd != kNoSRegister); |
ASSERT(dm != kNoDRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | B11 | B9 | opcode | |
- ((static_cast<int32_t>(sd) & 1)*B22) | |
- ((static_cast<int32_t>(sd) >> 1)*B12) | |
- ((static_cast<int32_t>(dm) >> 4)*B5) | |
- (static_cast<int32_t>(dm) & 0xf); |
+ int32_t encoding = |
+ (static_cast<int32_t>(cond) << kConditionShift) | B27 | B26 | B25 | B11 | |
+ B9 | opcode | ((static_cast<int32_t>(sd) & 1) * B22) | |
+ ((static_cast<int32_t>(sd) >> 1) * B12) | |
+ ((static_cast<int32_t>(dm) >> 4) * B5) | (static_cast<int32_t>(dm) & 0xf); |
Emit(encoding); |
} |
-void Assembler::EmitVFPds(Condition cond, int32_t opcode, |
- DRegister dd, SRegister sm) { |
+void Assembler::EmitVFPds(Condition cond, |
+ int32_t opcode, |
+ DRegister dd, |
+ SRegister sm) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(dd != kNoDRegister); |
ASSERT(sm != kNoSRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | B11 | B9 | opcode | |
- ((static_cast<int32_t>(dd) >> 4)*B22) | |
- ((static_cast<int32_t>(dd) & 0xf)*B12) | |
- ((static_cast<int32_t>(sm) & 1)*B5) | |
- (static_cast<int32_t>(sm) >> 1); |
+ int32_t encoding = |
+ (static_cast<int32_t>(cond) << kConditionShift) | B27 | B26 | B25 | B11 | |
+ B9 | opcode | ((static_cast<int32_t>(dd) >> 4) * B22) | |
+ ((static_cast<int32_t>(dd) & 0xf) * B12) | |
+ ((static_cast<int32_t>(sm) & 1) * B5) | (static_cast<int32_t>(sm) >> 1); |
Emit(encoding); |
} |
@@ -1148,10 +1192,9 @@ void Assembler::vcmpdz(DRegister dd, Condition cond) { |
void Assembler::vmrs(Register rd, Condition cond) { |
ASSERT(TargetCPUFeatures::vfp_supported()); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B27 | B26 | B25 | B23 | B22 | B21 | B20 | B16 | |
- (static_cast<int32_t>(rd)*B12) | |
- B11 | B9 | B4; |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B27 | |
+ B26 | B25 | B23 | B22 | B21 | B20 | B16 | |
+ (static_cast<int32_t>(rd) * B12) | B11 | B9 | B4; |
Emit(encoding); |
} |
@@ -1187,38 +1230,40 @@ static inline int ShiftOfOperandSize(OperandSize size) { |
} |
-void Assembler::EmitSIMDqqq(int32_t opcode, OperandSize size, |
- QRegister qd, QRegister qn, QRegister qm) { |
+void Assembler::EmitSIMDqqq(int32_t opcode, |
+ OperandSize size, |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
ASSERT(TargetCPUFeatures::neon_supported()); |
int sz = ShiftOfOperandSize(size); |
int32_t encoding = |
- (static_cast<int32_t>(kSpecialCondition) << kConditionShift) | |
- B25 | B6 | |
+ (static_cast<int32_t>(kSpecialCondition) << kConditionShift) | B25 | B6 | |
opcode | ((sz & 0x3) * B20) | |
- ((static_cast<int32_t>(qd * 2) >> 4)*B22) | |
- ((static_cast<int32_t>(qn * 2) & 0xf)*B16) | |
- ((static_cast<int32_t>(qd * 2) & 0xf)*B12) | |
- ((static_cast<int32_t>(qn * 2) >> 4)*B7) | |
- ((static_cast<int32_t>(qm * 2) >> 4)*B5) | |
+ ((static_cast<int32_t>(qd * 2) >> 4) * B22) | |
+ ((static_cast<int32_t>(qn * 2) & 0xf) * B16) | |
+ ((static_cast<int32_t>(qd * 2) & 0xf) * B12) | |
+ ((static_cast<int32_t>(qn * 2) >> 4) * B7) | |
+ ((static_cast<int32_t>(qm * 2) >> 4) * B5) | |
(static_cast<int32_t>(qm * 2) & 0xf); |
Emit(encoding); |
} |
-void Assembler::EmitSIMDddd(int32_t opcode, OperandSize size, |
- DRegister dd, DRegister dn, DRegister dm) { |
+void Assembler::EmitSIMDddd(int32_t opcode, |
+ OperandSize size, |
+ DRegister dd, |
+ DRegister dn, |
+ DRegister dm) { |
ASSERT(TargetCPUFeatures::neon_supported()); |
int sz = ShiftOfOperandSize(size); |
int32_t encoding = |
- (static_cast<int32_t>(kSpecialCondition) << kConditionShift) | |
- B25 | |
- opcode | ((sz & 0x3) * B20) | |
- ((static_cast<int32_t>(dd) >> 4)*B22) | |
- ((static_cast<int32_t>(dn) & 0xf)*B16) | |
- ((static_cast<int32_t>(dd) & 0xf)*B12) | |
- ((static_cast<int32_t>(dn) >> 4)*B7) | |
- ((static_cast<int32_t>(dm) >> 4)*B5) | |
- (static_cast<int32_t>(dm) & 0xf); |
+ (static_cast<int32_t>(kSpecialCondition) << kConditionShift) | B25 | |
+ opcode | ((sz & 0x3) * B20) | ((static_cast<int32_t>(dd) >> 4) * B22) | |
+ ((static_cast<int32_t>(dn) & 0xf) * B16) | |
+ ((static_cast<int32_t>(dd) & 0xf) * B12) | |
+ ((static_cast<int32_t>(dn) >> 4) * B7) | |
+ ((static_cast<int32_t>(dm) >> 4) * B5) | (static_cast<int32_t>(dm) & 0xf); |
Emit(encoding); |
} |
@@ -1229,7 +1274,9 @@ void Assembler::vmovq(QRegister qd, QRegister qm) { |
void Assembler::vaddqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B11, sz, qd, qn, qm); |
} |
@@ -1240,7 +1287,9 @@ void Assembler::vaddqs(QRegister qd, QRegister qn, QRegister qm) { |
void Assembler::vsubqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B24 | B11, sz, qd, qn, qm); |
} |
@@ -1251,7 +1300,9 @@ void Assembler::vsubqs(QRegister qd, QRegister qn, QRegister qm) { |
void Assembler::vmulqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B11 | B8 | B4, sz, qd, qn, qm); |
} |
@@ -1262,13 +1313,17 @@ void Assembler::vmulqs(QRegister qd, QRegister qn, QRegister qm) { |
void Assembler::vshlqi(OperandSize sz, |
- QRegister qd, QRegister qm, QRegister qn) { |
+ QRegister qd, |
+ QRegister qm, |
+ QRegister qn) { |
EmitSIMDqqq(B25 | B10, sz, qd, qn, qm); |
} |
void Assembler::vshlqu(OperandSize sz, |
- QRegister qd, QRegister qm, QRegister qn) { |
+ QRegister qd, |
+ QRegister qm, |
+ QRegister qn) { |
EmitSIMDqqq(B25 | B24 | B10, sz, qd, qn, qm); |
} |
@@ -1309,8 +1364,8 @@ void Assembler::vmaxqs(QRegister qd, QRegister qn, QRegister qm) { |
void Assembler::vabsqs(QRegister qd, QRegister qm) { |
- EmitSIMDqqq(B24 | B23 | B21 | B20 | B19 | B16 | B10 | B9 | B8, kSWord, |
- qd, Q0, qm); |
+ EmitSIMDqqq(B24 | B23 | B21 | B20 | B19 | B16 | B10 | B9 | B8, kSWord, qd, Q0, |
+ qm); |
} |
@@ -1321,8 +1376,8 @@ void Assembler::vnegqs(QRegister qd, QRegister qm) { |
void Assembler::vrecpeqs(QRegister qd, QRegister qm) { |
- EmitSIMDqqq(B24 | B23 | B21 | B20 | B19 | B17 | B16 | B10 | B8, kSWord, |
- qd, Q0, qm); |
+ EmitSIMDqqq(B24 | B23 | B21 | B20 | B19 | B17 | B16 | B10 | B8, kSWord, qd, |
+ Q0, qm); |
} |
@@ -1332,8 +1387,8 @@ void Assembler::vrecpsqs(QRegister qd, QRegister qn, QRegister qm) { |
void Assembler::vrsqrteqs(QRegister qd, QRegister qm) { |
- EmitSIMDqqq(B24 | B23 | B21 | B20 | B19 | B17 | B16 | B10 | B8 | B7, |
- kSWord, qd, Q0, qm); |
+ EmitSIMDqqq(B24 | B23 | B21 | B20 | B19 | B17 | B16 | B10 | B8 | B7, kSWord, |
+ qd, Q0, qm); |
} |
@@ -1365,15 +1420,12 @@ void Assembler::vdup(OperandSize sz, QRegister qd, DRegister dm, int idx) { |
code = 4 | (idx << 3); |
break; |
} |
- default: { |
- break; |
- } |
+ default: { break; } |
} |
EmitSIMDddd(B24 | B23 | B11 | B10 | B6, kWordPair, |
static_cast<DRegister>(qd * 2), |
- static_cast<DRegister>(code & 0xf), |
- dm); |
+ static_cast<DRegister>(code & 0xf), dm); |
} |
@@ -1389,7 +1441,9 @@ void Assembler::vzipqw(QRegister qd, QRegister qm) { |
void Assembler::vceqqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B24 | B11 | B4, sz, qd, qn, qm); |
} |
@@ -1400,13 +1454,17 @@ void Assembler::vceqqs(QRegister qd, QRegister qn, QRegister qm) { |
void Assembler::vcgeqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B9 | B8 | B4, sz, qd, qn, qm); |
} |
void Assembler::vcugeqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B24 | B9 | B8 | B4, sz, qd, qn, qm); |
} |
@@ -1417,13 +1475,17 @@ void Assembler::vcgeqs(QRegister qd, QRegister qn, QRegister qm) { |
void Assembler::vcgtqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B9 | B8, sz, qd, qn, qm); |
} |
void Assembler::vcugtqi(OperandSize sz, |
- QRegister qd, QRegister qn, QRegister qm) { |
+ QRegister qd, |
+ QRegister qn, |
+ QRegister qm) { |
EmitSIMDqqq(B24 | B9 | B8, sz, qd, qn, qm); |
} |
@@ -1451,8 +1513,8 @@ void Assembler::bl(Label* label, Condition cond) { |
void Assembler::bx(Register rm, Condition cond) { |
ASSERT(rm != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B24 | B21 | (0xfff << 8) | B4 | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B24 | |
+ B21 | (0xfff << 8) | B4 | |
(static_cast<int32_t>(rm) << kRmShift); |
Emit(encoding); |
} |
@@ -1461,8 +1523,8 @@ void Assembler::bx(Register rm, Condition cond) { |
void Assembler::blx(Register rm, Condition cond) { |
ASSERT(rm != kNoRegister); |
ASSERT(cond != kNoCondition); |
- int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
- B24 | B21 | (0xfff << 8) | B5 | B4 | |
+ int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | B24 | |
+ B21 | (0xfff << 8) | B5 | B4 | |
(static_cast<int32_t>(rm) << kRmShift); |
Emit(encoding); |
} |
@@ -1530,7 +1592,7 @@ void Assembler::CheckCodePointer() { |
Bind(&cid_ok); |
const intptr_t offset = CodeSize() + Instr::kPCReadOffset + |
- Instructions::HeaderSize() - kHeapObjectTag; |
+ Instructions::HeaderSize() - kHeapObjectTag; |
mov(R0, Operand(PC)); |
AddImmediate(R0, R0, -offset); |
ldr(IP, FieldAddress(CODE_REG, Code::saved_instructions_offset())); |
@@ -1595,8 +1657,8 @@ void Assembler::LoadObjectHelper(Register rd, |
// Make sure that class CallPattern is able to decode this load from the |
// object pool. |
const int32_t offset = ObjectPool::element_offset( |
- is_unique ? object_pool_wrapper_.AddObject(object) |
- : object_pool_wrapper_.FindObject(object)); |
+ is_unique ? object_pool_wrapper_.AddObject(object) |
+ : object_pool_wrapper_.FindObject(object)); |
LoadWordFromPoolOffset(rd, offset - kHeapObjectTag, pp, cond); |
} else { |
UNREACHABLE(); |
@@ -1700,9 +1762,11 @@ Register UseRegister(Register reg, RegList* used) { |
Register AllocateRegister(RegList* used) { |
const RegList free = ~*used; |
- return (free == 0) ? |
- kNoRegister : |
- UseRegister(static_cast<Register>(Utils::CountTrailingZeros(free)), used); |
+ return (free == 0) |
+ ? kNoRegister |
+ : UseRegister( |
+ static_cast<Register>(Utils::CountTrailingZeros(free)), |
+ used); |
} |
@@ -1741,8 +1805,8 @@ void Assembler::StoreIntoObjectOffset(Register object, |
bool can_value_be_smi) { |
int32_t ignored = 0; |
if (Address::CanHoldStoreOffset(kWord, offset - kHeapObjectTag, &ignored)) { |
- StoreIntoObject( |
- object, FieldAddress(object, offset), value, can_value_be_smi); |
+ StoreIntoObject(object, FieldAddress(object, offset), value, |
+ can_value_be_smi); |
} else { |
AddImmediate(IP, object, offset - kHeapObjectTag); |
StoreIntoObject(object, Address(IP), value, can_value_be_smi); |
@@ -1845,7 +1909,7 @@ void Assembler::InitializeFieldsNoBarrierUnrolled(Register object, |
intptr_t current_offset = begin_offset; |
while (current_offset + kWordSize < end_offset) { |
strd(value_even, value_odd, base, current_offset); |
- current_offset += 2*kWordSize; |
+ current_offset += 2 * kWordSize; |
} |
while (current_offset < end_offset) { |
str(value_even, Address(base, current_offset)); |
@@ -1877,8 +1941,8 @@ void Assembler::StoreIntoSmiField(const Address& dest, Register value) { |
void Assembler::LoadClassId(Register result, Register object, Condition cond) { |
ASSERT(RawObject::kClassIdTagPos == 16); |
ASSERT(RawObject::kClassIdTagSize == 16); |
- const intptr_t class_id_offset = Object::tags_offset() + |
- RawObject::kClassIdTagPos / kBitsPerByte; |
+ const intptr_t class_id_offset = |
+ Object::tags_offset() + RawObject::kClassIdTagPos / kBitsPerByte; |
ldrh(result, FieldAddress(object, class_id_offset), cond); |
} |
@@ -1933,8 +1997,7 @@ int32_t Assembler::EncodeBranchOffset(int32_t offset, int32_t inst) { |
if (!CanEncodeBranchOffset(offset)) { |
ASSERT(!use_far_branches()); |
- Thread::Current()->long_jump_base()->Jump( |
- 1, Object::branch_offset_error()); |
+ Thread::Current()->long_jump_base()->Jump(1, Object::branch_offset_error()); |
} |
// Properly preserve only the bits supported in the instruction. |
@@ -1960,8 +2023,10 @@ static int32_t DecodeARMv7LoadImmediate(int32_t movt, int32_t movw) { |
} |
-static int32_t DecodeARMv6LoadImmediate(int32_t mov, int32_t or1, |
- int32_t or2, int32_t or3) { |
+static int32_t DecodeARMv6LoadImmediate(int32_t mov, |
+ int32_t or1, |
+ int32_t or2, |
+ int32_t or3) { |
int32_t offset = 0; |
offset |= (mov & 0xff) << 24; |
offset |= (or1 & 0xff) << 16; |
@@ -1988,10 +2053,10 @@ class PatchFarBranch : public AssemblerFixup { |
private: |
void ProcessARMv6(const MemoryRegion& region, intptr_t position) { |
const int32_t mov = region.Load<int32_t>(position); |
- const int32_t or1 = region.Load<int32_t>(position + 1*Instr::kInstrSize); |
- const int32_t or2 = region.Load<int32_t>(position + 2*Instr::kInstrSize); |
- const int32_t or3 = region.Load<int32_t>(position + 3*Instr::kInstrSize); |
- const int32_t bx = region.Load<int32_t>(position + 4*Instr::kInstrSize); |
+ const int32_t or1 = region.Load<int32_t>(position + 1 * Instr::kInstrSize); |
+ const int32_t or2 = region.Load<int32_t>(position + 2 * Instr::kInstrSize); |
+ const int32_t or3 = region.Load<int32_t>(position + 3 * Instr::kInstrSize); |
+ const int32_t bx = region.Load<int32_t>(position + 4 * Instr::kInstrSize); |
if (((mov & 0xffffff00) == 0xe3a0c400) && // mov IP, (byte3 rot 4) |
((or1 & 0xffffff00) == 0xe38cc800) && // orr IP, IP, (byte2 rot 8) |
@@ -2018,10 +2083,8 @@ class PatchFarBranch : public AssemblerFixup { |
// If the offset loading instructions aren't there, we must have replaced |
// the far branch with a near one, and so these instructions |
// should be NOPs. |
- ASSERT((or1 == Instr::kNopInstruction) && |
- (or2 == Instr::kNopInstruction) && |
- (or3 == Instr::kNopInstruction) && |
- (bx == Instr::kNopInstruction)); |
+ ASSERT((or1 == Instr::kNopInstruction) && (or2 == Instr::kNopInstruction) && |
+ (or3 == Instr::kNopInstruction) && (bx == Instr::kNopInstruction)); |
} |
@@ -2031,7 +2094,7 @@ class PatchFarBranch : public AssemblerFixup { |
const int32_t bx = region.Load<int32_t>(position + 2 * Instr::kInstrSize); |
if (((movt & 0xfff0f000) == 0xe340c000) && // movt IP, high |
- ((movw & 0xfff0f000) == 0xe300c000)) { // movw IP, low |
+ ((movw & 0xfff0f000) == 0xe300c000)) { // movw IP, low |
const int32_t offset = DecodeARMv7LoadImmediate(movt, movw); |
const int32_t dest = region.start() + offset; |
const uint16_t dest_high = Utils::High16Bits(dest); |
@@ -2049,8 +2112,7 @@ class PatchFarBranch : public AssemblerFixup { |
// If the offset loading instructions aren't there, we must have replaced |
// the far branch with a near one, and so these instructions |
// should be NOPs. |
- ASSERT((movt == Instr::kNopInstruction) && |
- (bx == Instr::kNopInstruction)); |
+ ASSERT((movt == Instr::kNopInstruction) && (bx == Instr::kNopInstruction)); |
} |
virtual bool IsPointerOffset() const { return false; } |
@@ -2100,8 +2162,7 @@ void Assembler::BindARMv6(Label* label) { |
// Far branches are enabled and we can't encode the branch offset. |
// Grab instructions that load the offset. |
- const int32_t mov = |
- buffer_.Load<int32_t>(position); |
+ const int32_t mov = buffer_.Load<int32_t>(position); |
const int32_t or1 = |
buffer_.Load<int32_t>(position + 1 * Instr::kInstrSize); |
const int32_t or2 = |
@@ -2129,8 +2190,7 @@ void Assembler::BindARMv6(Label* label) { |
label->position_ = DecodeARMv6LoadImmediate(mov, or1, or2, or3); |
} else if (use_far_branches() && CanEncodeBranchOffset(dest)) { |
// Grab instructions that load the offset, and the branch. |
- const int32_t mov = |
- buffer_.Load<int32_t>(position); |
+ const int32_t mov = buffer_.Load<int32_t>(position); |
const int32_t or1 = |
buffer_.Load<int32_t>(position + 1 * Instr::kInstrSize); |
const int32_t or2 = |
@@ -2151,13 +2211,13 @@ void Assembler::BindARMv6(Label* label) { |
// Write the encoded branch instruction followed by two nops. |
buffer_.Store<int32_t>(position, encoded); |
buffer_.Store<int32_t>(position + 1 * Instr::kInstrSize, |
- Instr::kNopInstruction); |
+ Instr::kNopInstruction); |
buffer_.Store<int32_t>(position + 2 * Instr::kInstrSize, |
- Instr::kNopInstruction); |
+ Instr::kNopInstruction); |
buffer_.Store<int32_t>(position + 3 * Instr::kInstrSize, |
- Instr::kNopInstruction); |
+ Instr::kNopInstruction); |
buffer_.Store<int32_t>(position + 4 * Instr::kInstrSize, |
- Instr::kNopInstruction); |
+ Instr::kNopInstruction); |
label->position_ = DecodeARMv6LoadImmediate(mov, or1, or2, or3); |
} else { |
@@ -2220,12 +2280,11 @@ void Assembler::BindARMv7(Label* label) { |
const int32_t encoded = EncodeBranchOffset(dest, new_branch); |
// Write the encoded branch instruction followed by two nops. |
- buffer_.Store<int32_t>(position + 0 * Instr::kInstrSize, |
- encoded); |
+ buffer_.Store<int32_t>(position + 0 * Instr::kInstrSize, encoded); |
buffer_.Store<int32_t>(position + 1 * Instr::kInstrSize, |
- Instr::kNopInstruction); |
+ Instr::kNopInstruction); |
buffer_.Store<int32_t>(position + 2 * Instr::kInstrSize, |
- Instr::kNopInstruction); |
+ Instr::kNopInstruction); |
label->position_ = DecodeARMv7LoadImmediate(movt, movw); |
} else { |
@@ -2368,8 +2427,9 @@ bool Address::CanHoldStoreOffset(OperandSize size, |
} |
-bool Address::CanHoldImmediateOffset( |
- bool is_load, intptr_t cid, int64_t offset) { |
+bool Address::CanHoldImmediateOffset(bool is_load, |
+ intptr_t cid, |
+ int64_t offset) { |
int32_t offset_mask = 0; |
if (is_load) { |
return CanHoldLoadOffset(OperandSizeFor(cid), offset, &offset_mask); |
@@ -2406,7 +2466,9 @@ void Assembler::MoveRegister(Register rd, Register rm, Condition cond) { |
} |
-void Assembler::Lsl(Register rd, Register rm, const Operand& shift_imm, |
+void Assembler::Lsl(Register rd, |
+ Register rm, |
+ const Operand& shift_imm, |
Condition cond) { |
ASSERT(shift_imm.type() == 1); |
ASSERT(shift_imm.encoding() != 0); // Do not use Lsl if no shift is wanted. |
@@ -2419,7 +2481,9 @@ void Assembler::Lsl(Register rd, Register rm, Register rs, Condition cond) { |
} |
-void Assembler::Lsr(Register rd, Register rm, const Operand& shift_imm, |
+void Assembler::Lsr(Register rd, |
+ Register rm, |
+ const Operand& shift_imm, |
Condition cond) { |
ASSERT(shift_imm.type() == 1); |
uint32_t shift = shift_imm.encoding(); |
@@ -2436,7 +2500,9 @@ void Assembler::Lsr(Register rd, Register rm, Register rs, Condition cond) { |
} |
-void Assembler::Asr(Register rd, Register rm, const Operand& shift_imm, |
+void Assembler::Asr(Register rd, |
+ Register rm, |
+ const Operand& shift_imm, |
Condition cond) { |
ASSERT(shift_imm.type() == 1); |
uint32_t shift = shift_imm.encoding(); |
@@ -2448,7 +2514,9 @@ void Assembler::Asr(Register rd, Register rm, const Operand& shift_imm, |
} |
-void Assembler::Asrs(Register rd, Register rm, const Operand& shift_imm, |
+void Assembler::Asrs(Register rd, |
+ Register rm, |
+ const Operand& shift_imm, |
Condition cond) { |
ASSERT(shift_imm.type() == 1); |
uint32_t shift = shift_imm.encoding(); |
@@ -2465,7 +2533,9 @@ void Assembler::Asr(Register rd, Register rm, Register rs, Condition cond) { |
} |
-void Assembler::Ror(Register rd, Register rm, const Operand& shift_imm, |
+void Assembler::Ror(Register rd, |
+ Register rm, |
+ const Operand& shift_imm, |
Condition cond) { |
ASSERT(shift_imm.type() == 1); |
ASSERT(shift_imm.encoding() != 0); // Use Rrx instruction. |
@@ -2510,9 +2580,9 @@ void Assembler::VreciprocalSqrtqs(QRegister qd, QRegister qm) { |
vrsqrteqs(qd, qm); |
// 2 Newton-Raphson steps. xn+1 = xn * (3 - Q1*xn^2) / 2. |
// First step. |
- vmulqs(QTMP, qd, qd); // QTMP <- xn^2 |
+ vmulqs(QTMP, qd, qd); // QTMP <- xn^2 |
vrsqrtsqs(QTMP, qm, QTMP); // QTMP <- (3 - Q1*QTMP) / 2. |
- vmulqs(qd, qd, QTMP); // xn+1 <- xn * QTMP |
+ vmulqs(qd, qd, QTMP); // xn+1 <- xn * QTMP |
// Second step. |
vmulqs(QTMP, qd, qd); |
vrsqrtsqs(QTMP, qm, QTMP); |
@@ -2625,8 +2695,9 @@ void Assembler::BranchLinkOffset(Register base, int32_t offset) { |
} |
-void Assembler::LoadPatchableImmediate( |
- Register rd, int32_t value, Condition cond) { |
+void Assembler::LoadPatchableImmediate(Register rd, |
+ int32_t value, |
+ Condition cond) { |
const ARMVersion version = TargetCPUFeatures::arm_version(); |
if ((version == ARMv5TE) || (version == ARMv6)) { |
// This sequence is patched in a few places, and should remain fixed. |
@@ -2648,8 +2719,9 @@ void Assembler::LoadPatchableImmediate( |
} |
-void Assembler::LoadDecodableImmediate( |
- Register rd, int32_t value, Condition cond) { |
+void Assembler::LoadDecodableImmediate(Register rd, |
+ int32_t value, |
+ Condition cond) { |
const ARMVersion version = TargetCPUFeatures::arm_version(); |
if ((version == ARMv5TE) || (version == ARMv6)) { |
if (constant_pool_allowed()) { |
@@ -2853,78 +2925,93 @@ void Assembler::StoreMultipleDToOffset(DRegister first, |
} |
-void Assembler::CopyDoubleField( |
- Register dst, Register src, Register tmp1, Register tmp2, DRegister dtmp) { |
+void Assembler::CopyDoubleField(Register dst, |
+ Register src, |
+ Register tmp1, |
+ Register tmp2, |
+ DRegister dtmp) { |
if (TargetCPUFeatures::vfp_supported()) { |
LoadDFromOffset(dtmp, src, Double::value_offset() - kHeapObjectTag); |
StoreDToOffset(dtmp, dst, Double::value_offset() - kHeapObjectTag); |
} else { |
- LoadFromOffset(kWord, tmp1, src, |
- Double::value_offset() - kHeapObjectTag); |
+ LoadFromOffset(kWord, tmp1, src, Double::value_offset() - kHeapObjectTag); |
LoadFromOffset(kWord, tmp2, src, |
- Double::value_offset() + kWordSize - kHeapObjectTag); |
- StoreToOffset(kWord, tmp1, dst, |
- Double::value_offset() - kHeapObjectTag); |
+ Double::value_offset() + kWordSize - kHeapObjectTag); |
+ StoreToOffset(kWord, tmp1, dst, Double::value_offset() - kHeapObjectTag); |
StoreToOffset(kWord, tmp2, dst, |
- Double::value_offset() + kWordSize - kHeapObjectTag); |
+ Double::value_offset() + kWordSize - kHeapObjectTag); |
} |
} |
-void Assembler::CopyFloat32x4Field( |
- Register dst, Register src, Register tmp1, Register tmp2, DRegister dtmp) { |
+void Assembler::CopyFloat32x4Field(Register dst, |
+ Register src, |
+ Register tmp1, |
+ Register tmp2, |
+ DRegister dtmp) { |
if (TargetCPUFeatures::neon_supported()) { |
LoadMultipleDFromOffset(dtmp, 2, src, |
- Float32x4::value_offset() - kHeapObjectTag); |
+ Float32x4::value_offset() - kHeapObjectTag); |
StoreMultipleDToOffset(dtmp, 2, dst, |
- Float32x4::value_offset() - kHeapObjectTag); |
+ Float32x4::value_offset() - kHeapObjectTag); |
} else { |
- LoadFromOffset(kWord, tmp1, src, |
+ LoadFromOffset( |
+ kWord, tmp1, src, |
(Float32x4::value_offset() + 0 * kWordSize) - kHeapObjectTag); |
- LoadFromOffset(kWord, tmp2, src, |
+ LoadFromOffset( |
+ kWord, tmp2, src, |
(Float32x4::value_offset() + 1 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp1, dst, |
- (Float32x4::value_offset() + 0 * kWordSize) - kHeapObjectTag); |
+ (Float32x4::value_offset() + 0 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp2, dst, |
- (Float32x4::value_offset() + 1 * kWordSize) - kHeapObjectTag); |
+ (Float32x4::value_offset() + 1 * kWordSize) - kHeapObjectTag); |
- LoadFromOffset(kWord, tmp1, src, |
+ LoadFromOffset( |
+ kWord, tmp1, src, |
(Float32x4::value_offset() + 2 * kWordSize) - kHeapObjectTag); |
- LoadFromOffset(kWord, tmp2, src, |
+ LoadFromOffset( |
+ kWord, tmp2, src, |
(Float32x4::value_offset() + 3 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp1, dst, |
- (Float32x4::value_offset() + 2 * kWordSize) - kHeapObjectTag); |
+ (Float32x4::value_offset() + 2 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp2, dst, |
- (Float32x4::value_offset() + 3 * kWordSize) - kHeapObjectTag); |
+ (Float32x4::value_offset() + 3 * kWordSize) - kHeapObjectTag); |
} |
} |
-void Assembler::CopyFloat64x2Field( |
- Register dst, Register src, Register tmp1, Register tmp2, DRegister dtmp) { |
+void Assembler::CopyFloat64x2Field(Register dst, |
+ Register src, |
+ Register tmp1, |
+ Register tmp2, |
+ DRegister dtmp) { |
if (TargetCPUFeatures::neon_supported()) { |
LoadMultipleDFromOffset(dtmp, 2, src, |
- Float64x2::value_offset() - kHeapObjectTag); |
+ Float64x2::value_offset() - kHeapObjectTag); |
StoreMultipleDToOffset(dtmp, 2, dst, |
- Float64x2::value_offset() - kHeapObjectTag); |
+ Float64x2::value_offset() - kHeapObjectTag); |
} else { |
- LoadFromOffset(kWord, tmp1, src, |
+ LoadFromOffset( |
+ kWord, tmp1, src, |
(Float64x2::value_offset() + 0 * kWordSize) - kHeapObjectTag); |
- LoadFromOffset(kWord, tmp2, src, |
+ LoadFromOffset( |
+ kWord, tmp2, src, |
(Float64x2::value_offset() + 1 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp1, dst, |
- (Float64x2::value_offset() + 0 * kWordSize) - kHeapObjectTag); |
+ (Float64x2::value_offset() + 0 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp2, dst, |
- (Float64x2::value_offset() + 1 * kWordSize) - kHeapObjectTag); |
+ (Float64x2::value_offset() + 1 * kWordSize) - kHeapObjectTag); |
- LoadFromOffset(kWord, tmp1, src, |
+ LoadFromOffset( |
+ kWord, tmp1, src, |
(Float64x2::value_offset() + 2 * kWordSize) - kHeapObjectTag); |
- LoadFromOffset(kWord, tmp2, src, |
+ LoadFromOffset( |
+ kWord, tmp2, src, |
(Float64x2::value_offset() + 3 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp1, dst, |
- (Float64x2::value_offset() + 2 * kWordSize) - kHeapObjectTag); |
+ (Float64x2::value_offset() + 2 * kWordSize) - kHeapObjectTag); |
StoreToOffset(kWord, tmp2, dst, |
- (Float64x2::value_offset() + 3 * kWordSize) - kHeapObjectTag); |
+ (Float64x2::value_offset() + 3 * kWordSize) - kHeapObjectTag); |
} |
} |
@@ -2934,7 +3021,9 @@ void Assembler::AddImmediate(Register rd, int32_t value, Condition cond) { |
} |
-void Assembler::AddImmediate(Register rd, Register rn, int32_t value, |
+void Assembler::AddImmediate(Register rd, |
+ Register rn, |
+ int32_t value, |
Condition cond) { |
if (value == 0) { |
if (rd != rn) { |
@@ -2966,7 +3055,9 @@ void Assembler::AddImmediate(Register rd, Register rn, int32_t value, |
} |
-void Assembler::AddImmediateSetFlags(Register rd, Register rn, int32_t value, |
+void Assembler::AddImmediateSetFlags(Register rd, |
+ Register rn, |
+ int32_t value, |
Condition cond) { |
Operand o; |
if (Operand::CanHold(value, &o)) { |
@@ -2992,8 +3083,10 @@ void Assembler::AddImmediateSetFlags(Register rd, Register rn, int32_t value, |
} |
-void Assembler::SubImmediateSetFlags(Register rd, Register rn, int32_t value, |
- Condition cond) { |
+void Assembler::SubImmediateSetFlags(Register rd, |
+ Register rn, |
+ int32_t value, |
+ Condition cond) { |
Operand o; |
if (Operand::CanHold(value, &o)) { |
// Handles value == kMinInt32. |
@@ -3018,7 +3111,9 @@ void Assembler::SubImmediateSetFlags(Register rd, Register rn, int32_t value, |
} |
-void Assembler::AndImmediate(Register rd, Register rs, int32_t imm, |
+void Assembler::AndImmediate(Register rd, |
+ Register rs, |
+ int32_t imm, |
Condition cond) { |
Operand o; |
if (Operand::CanHold(imm, &o)) { |
@@ -3052,8 +3147,11 @@ void Assembler::TestImmediate(Register rn, int32_t imm, Condition cond) { |
} |
} |
-void Assembler::IntegerDivide(Register result, Register left, Register right, |
- DRegister tmpl, DRegister tmpr) { |
+void Assembler::IntegerDivide(Register result, |
+ Register left, |
+ Register right, |
+ DRegister tmpl, |
+ DRegister tmpr) { |
ASSERT(tmpl != tmpr); |
if (TargetCPUFeatures::integer_division_supported()) { |
sdiv(result, left, right); |
@@ -3151,8 +3249,9 @@ void Assembler::LeaveCallRuntimeFrame() { |
// and ensure proper alignment of the stack frame. |
// We need to restore it before restoring registers. |
const intptr_t kPushedFpuRegisterSize = |
- TargetCPUFeatures::vfp_supported() ? |
- kDartVolatileFpuRegCount * kFpuRegisterSize : 0; |
+ TargetCPUFeatures::vfp_supported() |
+ ? kDartVolatileFpuRegCount * kFpuRegisterSize |
+ : 0; |
COMPILE_ASSERT(PP < FP); |
COMPILE_ASSERT((kDartVolatileCpuRegs & (1 << PP)) == 0); |
@@ -3282,8 +3381,7 @@ void Assembler::MaybeTraceAllocation(intptr_t cid, |
} |
-void Assembler::LoadAllocationStatsAddress(Register dest, |
- intptr_t cid) { |
+void Assembler::LoadAllocationStatsAddress(Register dest, intptr_t cid) { |
ASSERT(dest != kNoRegister); |
ASSERT(dest != TMP); |
ASSERT(cid > 0); |
@@ -3302,9 +3400,10 @@ void Assembler::IncrementAllocationStats(Register stats_addr_reg, |
ASSERT(stats_addr_reg != kNoRegister); |
ASSERT(stats_addr_reg != TMP); |
ASSERT(cid > 0); |
- const uword count_field_offset = (space == Heap::kNew) ? |
- ClassHeapStats::allocated_since_gc_new_space_offset() : |
- ClassHeapStats::allocated_since_gc_old_space_offset(); |
+ const uword count_field_offset = |
+ (space == Heap::kNew) |
+ ? ClassHeapStats::allocated_since_gc_new_space_offset() |
+ : ClassHeapStats::allocated_since_gc_old_space_offset(); |
const Address& count_address = Address(stats_addr_reg, count_field_offset); |
ldr(TMP, count_address); |
AddImmediate(TMP, 1); |
@@ -3317,12 +3416,14 @@ void Assembler::IncrementAllocationStatsWithSize(Register stats_addr_reg, |
Heap::Space space) { |
ASSERT(stats_addr_reg != kNoRegister); |
ASSERT(stats_addr_reg != TMP); |
- const uword count_field_offset = (space == Heap::kNew) ? |
- ClassHeapStats::allocated_since_gc_new_space_offset() : |
- ClassHeapStats::allocated_since_gc_old_space_offset(); |
- const uword size_field_offset = (space == Heap::kNew) ? |
- ClassHeapStats::allocated_size_since_gc_new_space_offset() : |
- ClassHeapStats::allocated_size_since_gc_old_space_offset(); |
+ const uword count_field_offset = |
+ (space == Heap::kNew) |
+ ? ClassHeapStats::allocated_since_gc_new_space_offset() |
+ : ClassHeapStats::allocated_since_gc_old_space_offset(); |
+ const uword size_field_offset = |
+ (space == Heap::kNew) |
+ ? ClassHeapStats::allocated_size_since_gc_new_space_offset() |
+ : ClassHeapStats::allocated_size_since_gc_old_space_offset(); |
const Address& count_address = Address(stats_addr_reg, count_field_offset); |
const Address& size_address = Address(stats_addr_reg, size_field_offset); |
ldr(TMP, count_address); |
@@ -3348,8 +3449,7 @@ void Assembler::TryAllocate(const Class& cls, |
// If this allocation is traced, program will jump to failure path |
// (i.e. the allocation stub) which will allocate the object and trace the |
// allocation call site. |
- NOT_IN_PRODUCT( |
- MaybeTraceAllocation(cls.id(), temp_reg, failure)); |
+ NOT_IN_PRODUCT(MaybeTraceAllocation(cls.id(), temp_reg, failure)); |
Heap::Space space = Heap::kNew; |
ldr(temp_reg, Address(THR, Thread::heap_offset())); |
ldr(instance_reg, Address(temp_reg, Heap::TopOffset(space))); |
@@ -3462,8 +3562,8 @@ Address Assembler::ElementAddressForIntIndex(bool is_load, |
Register temp) { |
const int64_t offset_base = |
(is_external ? 0 : (Instance::DataOffsetFor(cid) - kHeapObjectTag)); |
- const int64_t offset = offset_base + |
- static_cast<int64_t>(index) * index_scale; |
+ const int64_t offset = |
+ offset_base + static_cast<int64_t>(index) * index_scale; |
ASSERT(Utils::IsInt(32, offset)); |
if (Address::CanHoldImmediateOffset(is_load, cid, offset)) { |
@@ -3485,8 +3585,8 @@ void Assembler::LoadElementAddressForIntIndex(Register address, |
intptr_t index) { |
const int64_t offset_base = |
(is_external ? 0 : (Instance::DataOffsetFor(cid) - kHeapObjectTag)); |
- const int64_t offset = offset_base + |
- static_cast<int64_t>(index) * index_scale; |
+ const int64_t offset = |
+ offset_base + static_cast<int64_t>(index) * index_scale; |
ASSERT(Utils::IsInt(32, offset)); |
AddImmediate(address, array, offset); |
} |
@@ -3506,8 +3606,8 @@ Address Assembler::ElementAddressForRegIndex(bool is_load, |
ASSERT(array != IP); |
ASSERT(index != IP); |
const Register base = is_load ? IP : index; |
- if ((offset != 0) || |
- (size == kSWord) || (size == kDWord) || (size == kRegList)) { |
+ if ((offset != 0) || (size == kSWord) || (size == kDWord) || |
+ (size == kRegList)) { |
if (shift < 0) { |
ASSERT(shift == -1); |
add(base, array, Operand(index, ASR, 1)); |
@@ -3523,12 +3623,8 @@ Address Assembler::ElementAddressForRegIndex(bool is_load, |
} |
} |
int32_t offset_mask = 0; |
- if ((is_load && !Address::CanHoldLoadOffset(size, |
- offset, |
- &offset_mask)) || |
- (!is_load && !Address::CanHoldStoreOffset(size, |
- offset, |
- &offset_mask))) { |
+ if ((is_load && !Address::CanHoldLoadOffset(size, offset, &offset_mask)) || |
+ (!is_load && !Address::CanHoldStoreOffset(size, offset, &offset_mask))) { |
AddImmediate(base, offset & ~offset_mask); |
offset = offset & offset_mask; |
} |
@@ -3612,8 +3708,8 @@ void Assembler::StoreWordUnaligned(Register src, Register addr, Register tmp) { |
static const char* cpu_reg_names[kNumberOfCpuRegisters] = { |
- "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", |
- "r8", "ctx", "pp", "fp", "ip", "sp", "lr", "pc", |
+ "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", |
+ "r8", "ctx", "pp", "fp", "ip", "sp", "lr", "pc", |
}; |
@@ -3624,9 +3720,9 @@ const char* Assembler::RegisterName(Register reg) { |
static const char* fpu_reg_names[kNumberOfFpuRegisters] = { |
- "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", |
+ "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", |
#if defined(VFPv3_D32) |
- "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15", |
+ "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15", |
#endif |
}; |