Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(381)

Side by Side Diff: runtime/vm/code_generator.cc

Issue 11956004: Fix vm code base so that it can be built for --arch=simarm (no snapshot yet). (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/class_finalizer.cc ('k') | runtime/vm/code_patcher_arm.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, 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/code_generator.h" 5 #include "vm/code_generator.h"
6 6
7 #include "vm/assembler_macros.h" 7 #include "vm/assembler_macros.h"
8 #include "vm/ast.h" 8 #include "vm/ast.h"
9 #include "vm/bigint_operations.h" 9 #include "vm/bigint_operations.h"
10 #include "vm/code_patcher.h" 10 #include "vm/code_patcher.h"
11 #include "vm/compiler.h" 11 #include "vm/compiler.h"
(...skipping 1469 matching lines...) Expand 10 before | Expand all | Expand 10 after
1481 if (ContainsCid(classes, owner_cid)) { 1481 if (ContainsCid(classes, owner_cid)) {
1482 DeoptimizeAt(optimized_code, frame->pc()); 1482 DeoptimizeAt(optimized_code, frame->pc());
1483 } 1483 }
1484 } 1484 }
1485 } 1485 }
1486 } 1486 }
1487 1487
1488 1488
1489 // Copy saved registers into the isolate buffer. 1489 // Copy saved registers into the isolate buffer.
1490 static void CopySavedRegisters(uword saved_registers_address) { 1490 static void CopySavedRegisters(uword saved_registers_address) {
1491 double* xmm_registers_copy = new double[kNumberOfXmmRegisters]; 1491 double* fpu_registers_copy = new double[kNumberOfFpuRegisters];
1492 ASSERT(xmm_registers_copy != NULL); 1492 ASSERT(fpu_registers_copy != NULL);
1493 for (intptr_t i = 0; i < kNumberOfXmmRegisters; i++) { 1493 for (intptr_t i = 0; i < kNumberOfFpuRegisters; i++) {
1494 xmm_registers_copy[i] = *reinterpret_cast<double*>(saved_registers_address); 1494 fpu_registers_copy[i] = *reinterpret_cast<double*>(saved_registers_address);
1495 saved_registers_address += kDoubleSize; 1495 saved_registers_address += kDoubleSize;
1496 } 1496 }
1497 Isolate::Current()->set_deopt_xmm_registers_copy(xmm_registers_copy); 1497 Isolate::Current()->set_deopt_fpu_registers_copy(fpu_registers_copy);
1498 1498
1499 intptr_t* cpu_registers_copy = new intptr_t[kNumberOfCpuRegisters]; 1499 intptr_t* cpu_registers_copy = new intptr_t[kNumberOfCpuRegisters];
1500 ASSERT(cpu_registers_copy != NULL); 1500 ASSERT(cpu_registers_copy != NULL);
1501 for (intptr_t i = 0; i < kNumberOfCpuRegisters; i++) { 1501 for (intptr_t i = 0; i < kNumberOfCpuRegisters; i++) {
1502 cpu_registers_copy[i] = 1502 cpu_registers_copy[i] =
1503 *reinterpret_cast<intptr_t*>(saved_registers_address); 1503 *reinterpret_cast<intptr_t*>(saved_registers_address);
1504 saved_registers_address += kWordSize; 1504 saved_registers_address += kWordSize;
1505 } 1505 }
1506 Isolate::Current()->set_deopt_cpu_registers_copy(cpu_registers_copy); 1506 Isolate::Current()->set_deopt_cpu_registers_copy(cpu_registers_copy);
1507 } 1507 }
(...skipping 29 matching lines...) Expand all
1537 // Copies saved registers and caller's frame into temporary buffers. 1537 // Copies saved registers and caller's frame into temporary buffers.
1538 // Returns the stack size of unoptimized frame. 1538 // Returns the stack size of unoptimized frame.
1539 DEFINE_LEAF_RUNTIME_ENTRY(intptr_t, DeoptimizeCopyFrame, 1539 DEFINE_LEAF_RUNTIME_ENTRY(intptr_t, DeoptimizeCopyFrame,
1540 uword saved_registers_address) { 1540 uword saved_registers_address) {
1541 Isolate* isolate = Isolate::Current(); 1541 Isolate* isolate = Isolate::Current();
1542 StackZone zone(isolate); 1542 StackZone zone(isolate);
1543 HANDLESCOPE(isolate); 1543 HANDLESCOPE(isolate);
1544 1544
1545 // All registers have been saved below last-fp. 1545 // All registers have been saved below last-fp.
1546 const uword last_fp = saved_registers_address + 1546 const uword last_fp = saved_registers_address +
1547 kNumberOfCpuRegisters * kWordSize + kNumberOfXmmRegisters * kDoubleSize; 1547 kNumberOfCpuRegisters * kWordSize + kNumberOfFpuRegisters * kDoubleSize;
1548 CopySavedRegisters(saved_registers_address); 1548 CopySavedRegisters(saved_registers_address);
1549 1549
1550 // Get optimized code and frame that need to be deoptimized. 1550 // Get optimized code and frame that need to be deoptimized.
1551 DartFrameIterator iterator(last_fp); 1551 DartFrameIterator iterator(last_fp);
1552 StackFrame* caller_frame = iterator.NextFrame(); 1552 StackFrame* caller_frame = iterator.NextFrame();
1553 ASSERT(caller_frame != NULL); 1553 ASSERT(caller_frame != NULL);
1554 const Code& optimized_code = Code::Handle(caller_frame->LookupDartCode()); 1554 const Code& optimized_code = Code::Handle(caller_frame->LookupDartCode());
1555 ASSERT(optimized_code.is_optimized()); 1555 ASSERT(optimized_code.is_optimized());
1556 1556
1557 1557
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1639 ASSERT(caller_frame != NULL); 1639 ASSERT(caller_frame != NULL);
1640 const Code& optimized_code = Code::Handle(caller_frame->LookupDartCode()); 1640 const Code& optimized_code = Code::Handle(caller_frame->LookupDartCode());
1641 const Function& function = Function::Handle(optimized_code.function()); 1641 const Function& function = Function::Handle(optimized_code.function());
1642 ASSERT(!function.IsNull()); 1642 ASSERT(!function.IsNull());
1643 const Code& unoptimized_code = Code::Handle(function.unoptimized_code()); 1643 const Code& unoptimized_code = Code::Handle(function.unoptimized_code());
1644 ASSERT(!optimized_code.IsNull() && optimized_code.is_optimized()); 1644 ASSERT(!optimized_code.IsNull() && optimized_code.is_optimized());
1645 ASSERT(!unoptimized_code.IsNull() && !unoptimized_code.is_optimized()); 1645 ASSERT(!unoptimized_code.IsNull() && !unoptimized_code.is_optimized());
1646 1646
1647 intptr_t* frame_copy = isolate->deopt_frame_copy(); 1647 intptr_t* frame_copy = isolate->deopt_frame_copy();
1648 intptr_t* cpu_registers_copy = isolate->deopt_cpu_registers_copy(); 1648 intptr_t* cpu_registers_copy = isolate->deopt_cpu_registers_copy();
1649 double* xmm_registers_copy = isolate->deopt_xmm_registers_copy(); 1649 double* fpu_registers_copy = isolate->deopt_fpu_registers_copy();
1650 1650
1651 intptr_t deopt_reason = kDeoptUnknown; 1651 intptr_t deopt_reason = kDeoptUnknown;
1652 const DeoptInfo& deopt_info = DeoptInfo::Handle( 1652 const DeoptInfo& deopt_info = DeoptInfo::Handle(
1653 optimized_code.GetDeoptInfoAtPc(caller_frame->pc(), &deopt_reason)); 1653 optimized_code.GetDeoptInfoAtPc(caller_frame->pc(), &deopt_reason));
1654 ASSERT(!deopt_info.IsNull()); 1654 ASSERT(!deopt_info.IsNull());
1655 1655
1656 const intptr_t caller_fp = DeoptimizeWithDeoptInfo(optimized_code, 1656 const intptr_t caller_fp = DeoptimizeWithDeoptInfo(optimized_code,
1657 deopt_info, 1657 deopt_info,
1658 *caller_frame, 1658 *caller_frame,
1659 deopt_reason); 1659 deopt_reason);
1660 1660
1661 isolate->SetDeoptFrameCopy(NULL, 0); 1661 isolate->SetDeoptFrameCopy(NULL, 0);
1662 isolate->set_deopt_cpu_registers_copy(NULL); 1662 isolate->set_deopt_cpu_registers_copy(NULL);
1663 isolate->set_deopt_xmm_registers_copy(NULL); 1663 isolate->set_deopt_fpu_registers_copy(NULL);
1664 delete[] frame_copy; 1664 delete[] frame_copy;
1665 delete[] cpu_registers_copy; 1665 delete[] cpu_registers_copy;
1666 delete[] xmm_registers_copy; 1666 delete[] fpu_registers_copy;
1667 1667
1668 return caller_fp; 1668 return caller_fp;
1669 } 1669 }
1670 END_LEAF_RUNTIME_ENTRY 1670 END_LEAF_RUNTIME_ENTRY
1671 1671
1672 1672
1673 // This is the last step in the deoptimization, GC can occur. 1673 // This is the last step in the deoptimization, GC can occur.
1674 DEFINE_RUNTIME_ENTRY(DeoptimizeMaterializeDoubles, 0) { 1674 DEFINE_RUNTIME_ENTRY(DeoptimizeMaterializeDoubles, 0) {
1675 DeferredDouble* deferred_double = Isolate::Current()->DetachDeferredDoubles(); 1675 DeferredDouble* deferred_double = Isolate::Current()->DetachDeferredDoubles();
1676 1676
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1750 return; 1750 return;
1751 } 1751 }
1752 HeapTrace* heap_trace = Isolate::Current()->heap()->trace(); 1752 HeapTrace* heap_trace = Isolate::Current()->heap()->trace();
1753 heap_trace->TraceStoreIntoObject(RawObject::ToAddr(object), 1753 heap_trace->TraceStoreIntoObject(RawObject::ToAddr(object),
1754 field_addr, 1754 field_addr,
1755 RawObject::ToAddr(value)); 1755 RawObject::ToAddr(value));
1756 } 1756 }
1757 END_LEAF_RUNTIME_ENTRY 1757 END_LEAF_RUNTIME_ENTRY
1758 1758
1759 } // namespace dart 1759 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/class_finalizer.cc ('k') | runtime/vm/code_patcher_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698