| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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_X64) | 6 #if defined(TARGET_ARCH_X64) |
| 7 | 7 |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/heap.h" | 9 #include "vm/heap.h" |
| 10 #include "vm/memory_region.h" | 10 #include "vm/memory_region.h" |
| (...skipping 1634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1645 return; | 1645 return; |
| 1646 } | 1646 } |
| 1647 addq(RSP, Immediate(stack_elements * kWordSize)); | 1647 addq(RSP, Immediate(stack_elements * kWordSize)); |
| 1648 } | 1648 } |
| 1649 | 1649 |
| 1650 | 1650 |
| 1651 void Assembler::LoadObject(Register dst, const Object& object) { | 1651 void Assembler::LoadObject(Register dst, const Object& object) { |
| 1652 if (object.IsSmi() || object.IsNull()) { | 1652 if (object.IsSmi() || object.IsNull()) { |
| 1653 movq(dst, Immediate(reinterpret_cast<int64_t>(object.raw()))); | 1653 movq(dst, Immediate(reinterpret_cast<int64_t>(object.raw()))); |
| 1654 } else { | 1654 } else { |
| 1655 ASSERT(object.IsZoneHandle()); | 1655 ASSERT(object.IsPredefinedHandle() || object.IsZoneHandle()); |
| 1656 ASSERT(object.IsOld()); | 1656 ASSERT(object.IsOld()); |
| 1657 AssemblerBuffer::EnsureCapacity ensured(&buffer_); | 1657 AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
| 1658 EmitRegisterREX(dst, REX_W); | 1658 EmitRegisterREX(dst, REX_W); |
| 1659 EmitUint8(0xB8 | (dst & 7)); | 1659 EmitUint8(0xB8 | (dst & 7)); |
| 1660 buffer_.EmitObject(object); | 1660 buffer_.EmitObject(object); |
| 1661 } | 1661 } |
| 1662 } | 1662 } |
| 1663 | 1663 |
| 1664 | 1664 |
| 1665 void Assembler::StoreObject(const Address& dst, const Object& object) { | 1665 void Assembler::StoreObject(const Address& dst, const Object& object) { |
| 1666 if (object.IsSmi() || object.IsNull()) { | 1666 if (object.IsSmi() || object.IsNull()) { |
| 1667 movq(dst, Immediate(reinterpret_cast<int64_t>(object.raw()))); | 1667 movq(dst, Immediate(reinterpret_cast<int64_t>(object.raw()))); |
| 1668 } else { | 1668 } else { |
| 1669 ASSERT(object.IsZoneHandle()); | 1669 ASSERT(object.IsPredefinedHandle() || object.IsZoneHandle()); |
| 1670 ASSERT(object.IsOld()); | 1670 ASSERT(object.IsOld()); |
| 1671 LoadObject(TMP, object); | 1671 LoadObject(TMP, object); |
| 1672 movq(dst, TMP); | 1672 movq(dst, TMP); |
| 1673 } | 1673 } |
| 1674 } | 1674 } |
| 1675 | 1675 |
| 1676 | 1676 |
| 1677 void Assembler::PushObject(const Object& object) { | 1677 void Assembler::PushObject(const Object& object) { |
| 1678 if (object.IsSmi() || object.IsNull()) { | 1678 if (object.IsSmi() || object.IsNull()) { |
| 1679 pushq(Immediate(reinterpret_cast<int64_t>(object.raw()))); | 1679 pushq(Immediate(reinterpret_cast<int64_t>(object.raw()))); |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2110 | 2110 |
| 2111 const char* Assembler::XmmRegisterName(XmmRegister reg) { | 2111 const char* Assembler::XmmRegisterName(XmmRegister reg) { |
| 2112 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); | 2112 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); |
| 2113 return xmm_reg_names[reg]; | 2113 return xmm_reg_names[reg]; |
| 2114 } | 2114 } |
| 2115 | 2115 |
| 2116 | 2116 |
| 2117 } // namespace dart | 2117 } // namespace dart |
| 2118 | 2118 |
| 2119 #endif // defined TARGET_ARCH_X64 | 2119 #endif // defined TARGET_ARCH_X64 |
| OLD | NEW |