| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" | 5 #include "vm/globals.h" |
| 6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/simulator.h" | 9 #include "vm/simulator.h" |
| 10 #include "vm/runtime_entry.h" | 10 #include "vm/runtime_entry.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 // ldrex/strex register field encodings. | 93 // ldrex/strex register field encodings. |
| 94 kLdExRnShift = 16, | 94 kLdExRnShift = 16, |
| 95 kLdExRtShift = 12, | 95 kLdExRtShift = 12, |
| 96 kStrExRnShift = 16, | 96 kStrExRnShift = 16, |
| 97 kStrExRdShift = 12, | 97 kStrExRdShift = 12, |
| 98 kStrExRtShift = 0, | 98 kStrExRtShift = 0, |
| 99 }; | 99 }; |
| 100 | 100 |
| 101 | 101 |
| 102 uint32_t Address::encoding3() const { | 102 uint32_t Address::encoding3() const { |
| 103 ASSERT(kind_ == Immediate); | 103 if (kind_ == Immediate) { |
| 104 uint32_t offset = encoding_ & kOffset12Mask; | 104 uint32_t offset = encoding_ & kOffset12Mask; |
| 105 ASSERT(offset < 256); | 105 ASSERT(offset < 256); |
| 106 return (encoding_ & ~kOffset12Mask) | ((offset & 0xf0) << 4) | (offset & 0xf); | 106 return (encoding_ & ~kOffset12Mask) | B22 | |
| 107 ((offset & 0xf0) << 4) | (offset & 0xf); |
| 108 } |
| 109 ASSERT(kind_ == IndexRegister); |
| 110 return encoding_; |
| 107 } | 111 } |
| 108 | 112 |
| 109 | 113 |
| 110 uint32_t Address::vencoding() const { | 114 uint32_t Address::vencoding() const { |
| 111 ASSERT(kind_ == Immediate); | 115 ASSERT(kind_ == Immediate); |
| 112 uint32_t offset = encoding_ & kOffset12Mask; | 116 uint32_t offset = encoding_ & kOffset12Mask; |
| 113 ASSERT(offset < (1 << 10)); // In the range 0 to +1020. | 117 ASSERT(offset < (1 << 10)); // In the range 0 to +1020. |
| 114 ASSERT(Utils::IsAligned(offset, 4)); // Multiple of 4. | 118 ASSERT(Utils::IsAligned(offset, 4)); // Multiple of 4. |
| 115 int mode = encoding_ & ((8|4|1) << 21); | 119 int mode = encoding_ & ((8|4|1) << 21); |
| 116 ASSERT((mode == Offset) || (mode == NegOffset)); | 120 ASSERT((mode == Offset) || (mode == NegOffset)); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 185 } | 189 } |
| 186 | 190 |
| 187 | 191 |
| 188 void Assembler::EmitMemOpAddressMode3(Condition cond, | 192 void Assembler::EmitMemOpAddressMode3(Condition cond, |
| 189 int32_t mode, | 193 int32_t mode, |
| 190 Register rd, | 194 Register rd, |
| 191 Address ad) { | 195 Address ad) { |
| 192 ASSERT(rd != kNoRegister); | 196 ASSERT(rd != kNoRegister); |
| 193 ASSERT(cond != kNoCondition); | 197 ASSERT(cond != kNoCondition); |
| 194 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | | 198 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
| 195 B22 | | |
| 196 mode | | 199 mode | |
| 197 (static_cast<int32_t>(rd) << kRdShift) | | 200 (static_cast<int32_t>(rd) << kRdShift) | |
| 198 ad.encoding3(); | 201 ad.encoding3(); |
| 199 Emit(encoding); | 202 Emit(encoding); |
| 200 } | 203 } |
| 201 | 204 |
| 202 | 205 |
| 203 void Assembler::EmitMultiMemOp(Condition cond, | 206 void Assembler::EmitMultiMemOp(Condition cond, |
| 204 BlockAddressMode am, | 207 BlockAddressMode am, |
| 205 bool load, | 208 bool load, |
| (...skipping 1917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2123 | 2126 |
| 2124 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 2127 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
| 2125 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 2128 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
| 2126 return fpu_reg_names[reg]; | 2129 return fpu_reg_names[reg]; |
| 2127 } | 2130 } |
| 2128 | 2131 |
| 2129 } // namespace dart | 2132 } // namespace dart |
| 2130 | 2133 |
| 2131 #endif // defined TARGET_ARCH_ARM | 2134 #endif // defined TARGET_ARCH_ARM |
| 2132 | 2135 |
| OLD | NEW |