| 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/cpu.h" | 9 #include "vm/cpu.h" |
| 10 #include "vm/longjump.h" | 10 #include "vm/longjump.h" |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 458 | 458 |
| 459 | 459 |
| 460 void Assembler::umlal(Register rd_lo, Register rd_hi, | 460 void Assembler::umlal(Register rd_lo, Register rd_hi, |
| 461 Register rn, Register rm, Condition cond) { | 461 Register rn, Register rm, Condition cond) { |
| 462 ASSERT(TargetCPUFeatures::arm_version() == ARMv7); | 462 ASSERT(TargetCPUFeatures::arm_version() == ARMv7); |
| 463 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. | 463 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
| 464 EmitMulOp(cond, B23 | B21, rd_lo, rd_hi, rn, rm); | 464 EmitMulOp(cond, B23 | B21, rd_lo, rd_hi, rn, rm); |
| 465 } | 465 } |
| 466 | 466 |
| 467 | 467 |
| 468 void Assembler::umaal(Register rd_lo, Register rd_hi, |
| 469 Register rn, Register rm, Condition cond) { |
| 470 ASSERT(TargetCPUFeatures::arm_version() == ARMv7); |
| 471 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
| 472 EmitMulOp(cond, B22, rd_lo, rd_hi, rn, rm); |
| 473 } |
| 474 |
| 475 |
| 468 void Assembler::EmitDivOp(Condition cond, int32_t opcode, | 476 void Assembler::EmitDivOp(Condition cond, int32_t opcode, |
| 469 Register rd, Register rn, Register rm) { | 477 Register rd, Register rn, Register rm) { |
| 470 ASSERT(TargetCPUFeatures::integer_division_supported()); | 478 ASSERT(TargetCPUFeatures::integer_division_supported()); |
| 471 ASSERT(rd != kNoRegister); | 479 ASSERT(rd != kNoRegister); |
| 472 ASSERT(rn != kNoRegister); | 480 ASSERT(rn != kNoRegister); |
| 473 ASSERT(rm != kNoRegister); | 481 ASSERT(rm != kNoRegister); |
| 474 ASSERT(cond != kNoCondition); | 482 ASSERT(cond != kNoCondition); |
| 475 int32_t encoding = opcode | | 483 int32_t encoding = opcode | |
| 476 (static_cast<int32_t>(cond) << kConditionShift) | | 484 (static_cast<int32_t>(cond) << kConditionShift) | |
| 477 (static_cast<int32_t>(rn) << kDivRnShift) | | 485 (static_cast<int32_t>(rn) << kDivRnShift) | |
| (...skipping 2931 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3409 | 3417 |
| 3410 | 3418 |
| 3411 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3419 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
| 3412 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); | 3420 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); |
| 3413 return fpu_reg_names[reg]; | 3421 return fpu_reg_names[reg]; |
| 3414 } | 3422 } |
| 3415 | 3423 |
| 3416 } // namespace dart | 3424 } // namespace dart |
| 3417 | 3425 |
| 3418 #endif // defined TARGET_ARCH_ARM | 3426 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |