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" // Needed here to get TARGET_ARCH_ARM. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. |
6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
7 | 7 |
8 #include "vm/flow_graph_compiler.h" | 8 #include "vm/flow_graph_compiler.h" |
9 | 9 |
10 #include "vm/ast_printer.h" | 10 #include "vm/ast_printer.h" |
(...skipping 1486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1497 if (fpu_regs_count > 0) { | 1497 if (fpu_regs_count > 0) { |
1498 __ AddImmediate(SP, -(fpu_regs_count * kFpuRegisterSize)); | 1498 __ AddImmediate(SP, -(fpu_regs_count * kFpuRegisterSize)); |
1499 // Store fpu registers with the lowest register number at the lowest | 1499 // Store fpu registers with the lowest register number at the lowest |
1500 // address. | 1500 // address. |
1501 intptr_t offset = 0; | 1501 intptr_t offset = 0; |
1502 for (intptr_t i = 0; i < kNumberOfFpuRegisters; ++i) { | 1502 for (intptr_t i = 0; i < kNumberOfFpuRegisters; ++i) { |
1503 QRegister fpu_reg = static_cast<QRegister>(i); | 1503 QRegister fpu_reg = static_cast<QRegister>(i); |
1504 if (locs->live_registers()->ContainsFpuRegister(fpu_reg)) { | 1504 if (locs->live_registers()->ContainsFpuRegister(fpu_reg)) { |
1505 DRegister d1 = EvenDRegisterOf(fpu_reg); | 1505 DRegister d1 = EvenDRegisterOf(fpu_reg); |
1506 DRegister d2 = OddDRegisterOf(fpu_reg); | 1506 DRegister d2 = OddDRegisterOf(fpu_reg); |
1507 // TOOD(regis): merge stores using vstmd instruction. | 1507 // TODO(regis): merge stores using vstmd instruction. |
1508 __ vstrd(d1, Address(SP, offset)); | 1508 __ vstrd(d1, Address(SP, offset)); |
1509 __ vstrd(d2, Address(SP, offset + 2 * kWordSize)); | 1509 __ vstrd(d2, Address(SP, offset + 2 * kWordSize)); |
1510 offset += kFpuRegisterSize; | 1510 offset += kFpuRegisterSize; |
1511 } | 1511 } |
1512 } | 1512 } |
1513 ASSERT(offset == (fpu_regs_count * kFpuRegisterSize)); | 1513 ASSERT(offset == (fpu_regs_count * kFpuRegisterSize)); |
1514 } | 1514 } |
1515 | 1515 |
1516 // The order in which the registers are pushed must match the order | 1516 // The order in which the registers are pushed must match the order |
1517 // in which the registers are encoded in the safe point's stack map. | 1517 // in which the registers are encoded in the safe point's stack map. |
(...skipping 25 matching lines...) Expand all Loading... |
1543 | 1543 |
1544 const intptr_t fpu_regs_count = locs->live_registers()->FpuRegisterCount(); | 1544 const intptr_t fpu_regs_count = locs->live_registers()->FpuRegisterCount(); |
1545 if (fpu_regs_count > 0) { | 1545 if (fpu_regs_count > 0) { |
1546 // Fpu registers have the lowest register number at the lowest address. | 1546 // Fpu registers have the lowest register number at the lowest address. |
1547 intptr_t offset = 0; | 1547 intptr_t offset = 0; |
1548 for (intptr_t i = 0; i < kNumberOfFpuRegisters; ++i) { | 1548 for (intptr_t i = 0; i < kNumberOfFpuRegisters; ++i) { |
1549 QRegister fpu_reg = static_cast<QRegister>(i); | 1549 QRegister fpu_reg = static_cast<QRegister>(i); |
1550 if (locs->live_registers()->ContainsFpuRegister(fpu_reg)) { | 1550 if (locs->live_registers()->ContainsFpuRegister(fpu_reg)) { |
1551 DRegister d1 = EvenDRegisterOf(fpu_reg); | 1551 DRegister d1 = EvenDRegisterOf(fpu_reg); |
1552 DRegister d2 = OddDRegisterOf(fpu_reg); | 1552 DRegister d2 = OddDRegisterOf(fpu_reg); |
1553 // TOOD(regis): merge loads using vldmd instruction. | 1553 // TODO(regis): merge loads using vldmd instruction. |
1554 __ vldrd(d1, Address(SP, offset)); | 1554 __ vldrd(d1, Address(SP, offset)); |
1555 __ vldrd(d2, Address(SP, offset + 2 * kWordSize)); | 1555 __ vldrd(d2, Address(SP, offset + 2 * kWordSize)); |
1556 offset += kFpuRegisterSize; | 1556 offset += kFpuRegisterSize; |
1557 } | 1557 } |
1558 } | 1558 } |
1559 ASSERT(offset == (fpu_regs_count * kFpuRegisterSize)); | 1559 ASSERT(offset == (fpu_regs_count * kFpuRegisterSize)); |
1560 __ AddImmediate(SP, offset); | 1560 __ AddImmediate(SP, offset); |
1561 } | 1561 } |
1562 } | 1562 } |
1563 | 1563 |
(...skipping 412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1976 DRegister dreg = EvenDRegisterOf(reg); | 1976 DRegister dreg = EvenDRegisterOf(reg); |
1977 __ vldrd(dreg, Address(SP, kDoubleSize, Address::PostIndex)); | 1977 __ vldrd(dreg, Address(SP, kDoubleSize, Address::PostIndex)); |
1978 } | 1978 } |
1979 | 1979 |
1980 | 1980 |
1981 #undef __ | 1981 #undef __ |
1982 | 1982 |
1983 } // namespace dart | 1983 } // namespace dart |
1984 | 1984 |
1985 #endif // defined TARGET_ARCH_ARM | 1985 #endif // defined TARGET_ARCH_ARM |
OLD | NEW |