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

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

Issue 12224024: Generate first ARM assembler test and execute (simulate) it. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 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/constants_arm.h ('k') | runtime/vm/simulator_mips.h » ('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) 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 <math.h> // for isnan. 5 #include <math.h> // for isnan.
6 #include <setjmp.h> 6 #include <setjmp.h>
7 #include <stdlib.h> 7 #include <stdlib.h>
8 8
9 #include "vm/globals.h" 9 #include "vm/globals.h"
10 #if defined(TARGET_ARCH_ARM) 10 #if defined(TARGET_ARCH_ARM)
(...skipping 19 matching lines...) Expand all
30 // SScanF not being implemented in a platform independent way through 30 // SScanF not being implemented in a platform independent way through
31 // OS in the same way as SNPrint is that the Windows C Run-Time 31 // OS in the same way as SNPrint is that the Windows C Run-Time
32 // Library does not provide vsscanf. 32 // Library does not provide vsscanf.
33 #define SScanF sscanf // NOLINT 33 #define SScanF sscanf // NOLINT
34 34
35 35
36 // Unimplemented counter class for debugging and measurement purposes. 36 // Unimplemented counter class for debugging and measurement purposes.
37 class StatsCounter { 37 class StatsCounter {
38 public: 38 public:
39 explicit StatsCounter(const char* name) { 39 explicit StatsCounter(const char* name) {
40 UNIMPLEMENTED(); 40 // UNIMPLEMENTED();
41 } 41 }
42 42
43 void Increment() { 43 void Increment() {
44 UNIMPLEMENTED(); 44 // UNIMPLEMENTED();
45 } 45 }
46 }; 46 };
47 47
48 48
49 // SimulatorSetjmpBuffer are linked together, and the last created one 49 // SimulatorSetjmpBuffer are linked together, and the last created one
50 // is referenced by the Simulator. When an exception is thrown, the exception 50 // is referenced by the Simulator. When an exception is thrown, the exception
51 // runtime looks at where to jump and finds the corresponding 51 // runtime looks at where to jump and finds the corresponding
52 // SimulatorSetjmpBuffer based on the stack pointer of the exception handler. 52 // SimulatorSetjmpBuffer based on the stack pointer of the exception handler.
53 // The runtime then does a Longjmp on that buffer to return to the simulator. 53 // The runtime then does a Longjmp on that buffer to return to the simulator.
54 class SimulatorSetjmpBuffer { 54 class SimulatorSetjmpBuffer {
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 } 644 }
645 fp_n_flag_ = false; 645 fp_n_flag_ = false;
646 fp_z_flag_ = false; 646 fp_z_flag_ = false;
647 fp_c_flag_ = false; 647 fp_c_flag_ = false;
648 fp_v_flag_ = false; 648 fp_v_flag_ = false;
649 } 649 }
650 650
651 651
652 Simulator::~Simulator() { 652 Simulator::~Simulator() {
653 delete[] stack_; 653 delete[] stack_;
654 Isolate::Current()->set_simulator(NULL); 654 Isolate* isolate = Isolate::Current();
655 if (isolate != NULL) {
656 isolate->set_simulator(NULL);
657 }
655 } 658 }
656 659
657 660
658 // When the generated code calls an external reference we need to catch that in 661 // When the generated code calls an external reference we need to catch that in
659 // the simulator. The external reference will be a function compiled for the 662 // the simulator. The external reference will be a function compiled for the
660 // host architecture. We need to call that function instead of trying to 663 // host architecture. We need to call that function instead of trying to
661 // execute it with the simulator. We do that by redirecting the external 664 // execute it with the simulator. We do that by redirecting the external
662 // reference to a svc (supervisor call) instruction that is handled by 665 // reference to a svc (supervisor call) instruction that is handled by
663 // the simulator. We write the original destination of the jump just at a known 666 // the simulator. We write the original destination of the jump just at a known
664 // offset from the svc instruction so the simulator knows what to call. 667 // offset from the svc instruction so the simulator knows what to call.
(...skipping 2065 matching lines...) Expand 10 before | Expand all | Expand 10 after
2730 // isolate->ChangeStateToGeneratedCode(); 2733 // isolate->ChangeStateToGeneratedCode();
2731 set_register(kExceptionObjectReg, bit_cast<int32_t>(object.raw())); 2734 set_register(kExceptionObjectReg, bit_cast<int32_t>(object.raw()));
2732 buf->Longjmp(); 2735 buf->Longjmp();
2733 } 2736 }
2734 2737
2735 } // namespace dart 2738 } // namespace dart
2736 2739
2737 #endif // !defined(HOST_ARCH_ARM) 2740 #endif // !defined(HOST_ARCH_ARM)
2738 2741
2739 #endif // defined TARGET_ARCH_ARM 2742 #endif // defined TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « runtime/vm/constants_arm.h ('k') | runtime/vm/simulator_mips.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698