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" // NOLINT | 5 #include "vm/globals.h" // NOLINT |
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/cpu.h" | 9 #include "vm/cpu.h" |
10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
(...skipping 3029 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3040 } else if (Operand::CanHold(-value, &o)) { | 3040 } else if (Operand::CanHold(-value, &o)) { |
3041 sub(rd, rn, o, cond); | 3041 sub(rd, rn, o, cond); |
3042 } else { | 3042 } else { |
3043 ASSERT(rn != IP); | 3043 ASSERT(rn != IP); |
3044 if (Operand::CanHold(~value, &o)) { | 3044 if (Operand::CanHold(~value, &o)) { |
3045 mvn(IP, o, cond); | 3045 mvn(IP, o, cond); |
3046 add(rd, rn, Operand(IP), cond); | 3046 add(rd, rn, Operand(IP), cond); |
3047 } else if (Operand::CanHold(~(-value), &o)) { | 3047 } else if (Operand::CanHold(~(-value), &o)) { |
3048 mvn(IP, o, cond); | 3048 mvn(IP, o, cond); |
3049 sub(rd, rn, Operand(IP), cond); | 3049 sub(rd, rn, Operand(IP), cond); |
3050 } else { | 3050 } else if (value > 0) { |
3051 LoadDecodableImmediate(IP, value, cond); | 3051 LoadDecodableImmediate(IP, value, cond); |
3052 add(rd, rn, Operand(IP), cond); | 3052 add(rd, rn, Operand(IP), cond); |
| 3053 } else { |
| 3054 LoadDecodableImmediate(IP, -value, cond); |
| 3055 sub(rd, rn, Operand(IP), cond); |
3053 } | 3056 } |
3054 } | 3057 } |
3055 } | 3058 } |
3056 | 3059 |
3057 | 3060 |
3058 void Assembler::AddImmediateSetFlags(Register rd, | 3061 void Assembler::AddImmediateSetFlags(Register rd, |
3059 Register rn, | 3062 Register rn, |
3060 int32_t value, | 3063 int32_t value, |
3061 Condition cond) { | 3064 Condition cond) { |
3062 Operand o; | 3065 Operand o; |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3728 | 3731 |
3729 | 3732 |
3730 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3733 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
3731 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 3734 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
3732 return fpu_reg_names[reg]; | 3735 return fpu_reg_names[reg]; |
3733 } | 3736 } |
3734 | 3737 |
3735 } // namespace dart | 3738 } // namespace dart |
3736 | 3739 |
3737 #endif // defined TARGET_ARCH_ARM | 3740 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |