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_X64) | 6 #if defined(TARGET_ARCH_X64) |
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/heap.h" | 10 #include "vm/heap.h" |
(...skipping 2611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2622 | 2622 |
2623 | 2623 |
2624 void Assembler::LoadWordFromPoolOffset(Register dst, Register pp, | 2624 void Assembler::LoadWordFromPoolOffset(Register dst, Register pp, |
2625 int32_t offset) { | 2625 int32_t offset) { |
2626 // This sequence must be of fixed size. AddressBaseImm32 | 2626 // This sequence must be of fixed size. AddressBaseImm32 |
2627 // forces the address operand to use a fixed-size imm32 encoding. | 2627 // forces the address operand to use a fixed-size imm32 encoding. |
2628 movq(dst, Address::AddressBaseImm32(pp, offset)); | 2628 movq(dst, Address::AddressBaseImm32(pp, offset)); |
2629 } | 2629 } |
2630 | 2630 |
2631 | 2631 |
| 2632 void Assembler::LoadIsolate(Register dst) { |
| 2633 movq(dst, Immediate(reinterpret_cast<uword>(Isolate::Current()))); |
| 2634 } |
| 2635 |
| 2636 |
2632 void Assembler::LoadObject(Register dst, const Object& object, Register pp) { | 2637 void Assembler::LoadObject(Register dst, const Object& object, Register pp) { |
2633 if (CanLoadFromObjectPool(object)) { | 2638 if (CanLoadFromObjectPool(object)) { |
2634 const int32_t offset = | 2639 const int32_t offset = |
2635 Array::element_offset(FindObject(object, kNotPatchable)); | 2640 Array::element_offset(FindObject(object, kNotPatchable)); |
2636 LoadWordFromPoolOffset(dst, pp, offset - kHeapObjectTag); | 2641 LoadWordFromPoolOffset(dst, pp, offset - kHeapObjectTag); |
2637 } else { | 2642 } else { |
2638 ASSERT((Isolate::Current() == Dart::vm_isolate()) || | 2643 ASSERT((Isolate::Current() == Dart::vm_isolate()) || |
2639 object.IsSmi() || | 2644 object.IsSmi() || |
2640 object.InVMHeap()); | 2645 object.InVMHeap()); |
2641 LoadImmediate(dst, Immediate(reinterpret_cast<int64_t>(object.raw())), pp); | 2646 LoadImmediate(dst, Immediate(reinterpret_cast<int64_t>(object.raw())), pp); |
(...skipping 917 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3559 | 3564 |
3560 | 3565 |
3561 const char* Assembler::FpuRegisterName(FpuRegister reg) { | 3566 const char* Assembler::FpuRegisterName(FpuRegister reg) { |
3562 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); | 3567 ASSERT((0 <= reg) && (reg < kNumberOfXmmRegisters)); |
3563 return xmm_reg_names[reg]; | 3568 return xmm_reg_names[reg]; |
3564 } | 3569 } |
3565 | 3570 |
3566 } // namespace dart | 3571 } // namespace dart |
3567 | 3572 |
3568 #endif // defined TARGET_ARCH_X64 | 3573 #endif // defined TARGET_ARCH_X64 |
OLD | NEW |