| 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 // This is forked from Dart revision df52deea9f25690eb8b66c5995da92b70f7ac1fe | 5 // This is forked from Dart revision df52deea9f25690eb8b66c5995da92b70f7ac1fe |
| 6 // Please update the (git) revision if we merge changes from Dart. | 6 // Please update the (git) revision if we merge changes from Dart. |
| 7 // https://code.google.com/p/dart/wiki/GettingTheSource | 7 // https://code.google.com/p/dart/wiki/GettingTheSource |
| 8 | 8 |
| 9 #include "vm/globals.h" // NOLINT | 9 #include "vm/globals.h" // NOLINT |
| 10 #if defined(TARGET_ARCH_ARM) | 10 #if defined(TARGET_ARCH_ARM) |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 Address ad) { | 125 Address ad) { |
| 126 ASSERT(rd != kNoRegister); | 126 ASSERT(rd != kNoRegister); |
| 127 ASSERT(cond != kNoCondition); | 127 ASSERT(cond != kNoCondition); |
| 128 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | | 128 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
| 129 mode | | 129 mode | |
| 130 (static_cast<int32_t>(rd) << kRdShift) | | 130 (static_cast<int32_t>(rd) << kRdShift) | |
| 131 ad.encoding3(); | 131 ad.encoding3(); |
| 132 Emit(encoding); | 132 Emit(encoding); |
| 133 } | 133 } |
| 134 | 134 |
| 135 | 135 #if 0 |
| 136 // Moved to ARM32::AssemblerARM32::emitMuliMemOp() |
| 136 void Assembler::EmitMultiMemOp(Condition cond, | 137 void Assembler::EmitMultiMemOp(Condition cond, |
| 137 BlockAddressMode am, | 138 BlockAddressMode am, |
| 138 bool load, | 139 bool load, |
| 139 Register base, | 140 Register base, |
| 140 RegList regs) { | 141 RegList regs) { |
| 141 ASSERT(base != kNoRegister); | 142 ASSERT(base != kNoRegister); |
| 142 ASSERT(cond != kNoCondition); | 143 ASSERT(cond != kNoCondition); |
| 143 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | | 144 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
| 144 B27 | | 145 B27 | |
| 145 am | | 146 am | |
| 146 (load ? L : 0) | | 147 (load ? L : 0) | |
| 147 (static_cast<int32_t>(base) << kRnShift) | | 148 (static_cast<int32_t>(base) << kRnShift) | |
| 148 regs; | 149 regs; |
| 149 Emit(encoding); | 150 Emit(encoding); |
| 150 } | 151 } |
| 151 | 152 #endif |
| 152 | 153 |
| 153 void Assembler::EmitShiftImmediate(Condition cond, | 154 void Assembler::EmitShiftImmediate(Condition cond, |
| 154 Shift opcode, | 155 Shift opcode, |
| 155 Register rd, | 156 Register rd, |
| 156 Register rm, | 157 Register rm, |
| 157 Operand o) { | 158 Operand o) { |
| 158 ASSERT(cond != kNoCondition); | 159 ASSERT(cond != kNoCondition); |
| 159 ASSERT(o.type() == 1); | 160 ASSERT(o.type() == 1); |
| 160 int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | | 161 int32_t encoding = static_cast<int32_t>(cond) << kConditionShift | |
| 161 static_cast<int32_t>(MOV) << kOpcodeShift | | 162 static_cast<int32_t>(MOV) << kOpcodeShift | |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 548 } | 549 } |
| 549 | 550 |
| 550 | 551 |
| 551 void Assembler::ldm(BlockAddressMode am, Register base, RegList regs, | 552 void Assembler::ldm(BlockAddressMode am, Register base, RegList regs, |
| 552 Condition cond) { | 553 Condition cond) { |
| 553 ASSERT(regs != 0); | 554 ASSERT(regs != 0); |
| 554 EmitMultiMemOp(cond, am, true, base, regs); | 555 EmitMultiMemOp(cond, am, true, base, regs); |
| 555 } | 556 } |
| 556 | 557 |
| 557 | 558 |
| 559 #if 0 |
| 560 // Folded into ARM32::AssemblerARM32::pushList(), since it is its only |
| 561 // use (and doesn't implement ARM STM instruction). |
| 558 void Assembler::stm(BlockAddressMode am, Register base, RegList regs, | 562 void Assembler::stm(BlockAddressMode am, Register base, RegList regs, |
| 559 Condition cond) { | 563 Condition cond) { |
| 560 ASSERT(regs != 0); | 564 ASSERT(regs != 0); |
| 561 EmitMultiMemOp(cond, am, false, base, regs); | 565 EmitMultiMemOp(cond, am, false, base, regs); |
| 562 } | 566 } |
| 567 #endif |
| 563 | 568 |
| 564 | 569 |
| 565 void Assembler::ldrex(Register rt, Register rn, Condition cond) { | 570 void Assembler::ldrex(Register rt, Register rn, Condition cond) { |
| 566 ASSERT(TargetCPUFeatures::arm_version() != ARMv5TE); | 571 ASSERT(TargetCPUFeatures::arm_version() != ARMv5TE); |
| 567 ASSERT(rn != kNoRegister); | 572 ASSERT(rn != kNoRegister); |
| 568 ASSERT(rt != kNoRegister); | 573 ASSERT(rt != kNoRegister); |
| 569 ASSERT(cond != kNoCondition); | 574 ASSERT(cond != kNoCondition); |
| 570 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | | 575 int32_t encoding = (static_cast<int32_t>(cond) << kConditionShift) | |
| 571 B24 | | 576 B24 | |
| 572 B23 | | 577 B23 | |
| (...skipping 1981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2554 bool Address::CanHoldImmediateOffset( | 2559 bool Address::CanHoldImmediateOffset( |
| 2555 bool is_load, intptr_t cid, int64_t offset) { | 2560 bool is_load, intptr_t cid, int64_t offset) { |
| 2556 int32_t offset_mask = 0; | 2561 int32_t offset_mask = 0; |
| 2557 if (is_load) { | 2562 if (is_load) { |
| 2558 return CanHoldLoadOffset(OperandSizeFor(cid), offset, &offset_mask); | 2563 return CanHoldLoadOffset(OperandSizeFor(cid), offset, &offset_mask); |
| 2559 } else { | 2564 } else { |
| 2560 return CanHoldStoreOffset(OperandSizeFor(cid), offset, &offset_mask); | 2565 return CanHoldStoreOffset(OperandSizeFor(cid), offset, &offset_mask); |
| 2561 } | 2566 } |
| 2562 } | 2567 } |
| 2563 | 2568 |
| 2564 | 2569 #if 0 |
| 2570 // Moved to ARM32::AssemblerARM32::push(); |
| 2565 void Assembler::Push(Register rd, Condition cond) { | 2571 void Assembler::Push(Register rd, Condition cond) { |
| 2566 str(rd, Address(SP, -kWordSize, Address::PreIndex), cond); | 2572 str(rd, Address(SP, -kWordSize, Address::PreIndex), cond); |
| 2567 } | 2573 } |
| 2568 | 2574 #endif |
| 2569 | 2575 |
| 2570 void Assembler::Pop(Register rd, Condition cond) { | 2576 void Assembler::Pop(Register rd, Condition cond) { |
| 2571 ldr(rd, Address(SP, kWordSize, Address::PostIndex), cond); | 2577 ldr(rd, Address(SP, kWordSize, Address::PostIndex), cond); |
| 2572 } | 2578 } |
| 2573 | 2579 |
| 2574 | 2580 #if 0 |
| 2581 // Moved to ARM32::AssemblerARM32::pushList(); |
| 2575 void Assembler::PushList(RegList regs, Condition cond) { | 2582 void Assembler::PushList(RegList regs, Condition cond) { |
| 2576 stm(DB_W, SP, regs, cond); | 2583 stm(DB_W, SP, regs, cond); |
| 2577 } | 2584 } |
| 2578 | 2585 #endif |
| 2579 | 2586 |
| 2580 void Assembler::PopList(RegList regs, Condition cond) { | 2587 void Assembler::PopList(RegList regs, Condition cond) { |
| 2581 ldm(IA_W, SP, regs, cond); | 2588 ldm(IA_W, SP, regs, cond); |
| 2582 } | 2589 } |
| 2583 | 2590 |
| 2584 | 2591 |
| 2585 void Assembler::MoveRegister(Register rd, Register rm, Condition cond) { | 2592 void Assembler::MoveRegister(Register rd, Register rm, Condition cond) { |
| 2586 if (rd != rm) { | 2593 if (rd != rm) { |
| 2587 mov(rd, Operand(rm), cond); | 2594 mov(rd, Operand(rm), cond); |
| 2588 } | 2595 } |
| (...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3683 | 3690 |
| 3684 | 3691 |
| 3685 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3692 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
| 3686 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 3693 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
| 3687 return fpu_reg_names[reg]; | 3694 return fpu_reg_names[reg]; |
| 3688 } | 3695 } |
| 3689 | 3696 |
| 3690 } // namespace dart | 3697 } // namespace dart |
| 3691 | 3698 |
| 3692 #endif // defined TARGET_ARCH_ARM | 3699 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |