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

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

Issue 1858283002: Initial SIMDBC interpreter. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 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
« no previous file with comments | « runtime/vm/native_entry.h ('k') | runtime/vm/object.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) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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/native_entry.h" 5 #include "vm/native_entry.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 8
9 #include "vm/bootstrap.h" 9 #include "vm/bootstrap.h"
10 #include "vm/code_patcher.h" 10 #include "vm/code_patcher.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 if (r != NULL) { 83 if (r != NULL) {
84 return r; 84 return r;
85 } 85 }
86 } 86 }
87 return NULL; 87 return NULL;
88 } 88 }
89 89
90 90
91 uword NativeEntry::NativeCallWrapperEntry() { 91 uword NativeEntry::NativeCallWrapperEntry() {
92 uword entry = reinterpret_cast<uword>(NativeEntry::NativeCallWrapper); 92 uword entry = reinterpret_cast<uword>(NativeEntry::NativeCallWrapper);
93 #if defined(USING_SIMULATOR) 93 #if defined(USING_SIMULATOR) && !defined(TARGET_ARCH_DBC)
94 // DBC does not use redirections unlike other simulators.
94 entry = Simulator::RedirectExternalReference( 95 entry = Simulator::RedirectExternalReference(
95 entry, Simulator::kNativeCall, NativeEntry::kNumCallWrapperArguments); 96 entry, Simulator::kNativeCall, NativeEntry::kNumCallWrapperArguments);
96 #endif 97 #endif
97 return entry; 98 return entry;
98 } 99 }
99 100
100 101
101 bool NativeEntry::ReturnValueIsError(NativeArguments* arguments) { 102 bool NativeEntry::ReturnValueIsError(NativeArguments* arguments) {
102 RawObject* retval = arguments->ReturnValue(); 103 RawObject* retval = arguments->ReturnValue();
103 return (retval->IsHeapObject() && 104 return (retval->IsHeapObject() &&
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 } else { 171 } else {
171 ASSERT(thread->api_reusable_scope() != scope); 172 ASSERT(thread->api_reusable_scope() != scope);
172 delete scope; 173 delete scope;
173 } 174 }
174 DEOPTIMIZE_ALOT; 175 DEOPTIMIZE_ALOT;
175 VERIFY_ON_TRANSITION; 176 VERIFY_ON_TRANSITION;
176 } 177 }
177 } 178 }
178 179
179 180
181 // DBC does not support lazy native call linking.
182 #if !defined(TARGET_ARCH_DBC)
180 static NativeFunction ResolveNativeFunction(Zone* zone, 183 static NativeFunction ResolveNativeFunction(Zone* zone,
181 const Function& func, 184 const Function& func,
182 bool* is_bootstrap_native) { 185 bool* is_bootstrap_native) {
183 const Class& cls = Class::Handle(zone, func.Owner()); 186 const Class& cls = Class::Handle(zone, func.Owner());
184 const Library& library = Library::Handle(zone, cls.library()); 187 const Library& library = Library::Handle(zone, cls.library());
185 188
186 *is_bootstrap_native = 189 *is_bootstrap_native =
187 Bootstrap::IsBootstapResolver(library.native_entry_resolver()); 190 Bootstrap::IsBootstapResolver(library.native_entry_resolver());
188 191
189 const String& native_name = String::Handle(zone, func.native_name()); 192 const String& native_name = String::Handle(zone, func.native_name());
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 reinterpret_cast<uword>(LinkNativeCall), 256 reinterpret_cast<uword>(LinkNativeCall),
254 Simulator::kBootstrapNativeCall, 257 Simulator::kBootstrapNativeCall,
255 NativeEntry::kNumArguments))); 258 NativeEntry::kNumArguments)));
256 #endif 259 #endif
257 ASSERT(current_trampoline.raw() == 260 ASSERT(current_trampoline.raw() ==
258 StubCode::CallBootstrapCFunction_entry()->code()); 261 StubCode::CallBootstrapCFunction_entry()->code());
259 } 262 }
260 #endif 263 #endif
261 264
262 call_through_wrapper = !is_bootstrap_native; 265 call_through_wrapper = !is_bootstrap_native;
263 const Code& trampoline = Code::Handle(call_through_wrapper ? 266 const Code& trampoline =
264 StubCode::CallNativeCFunction_entry()->code() : 267 Code::Handle(call_through_wrapper ?
265 StubCode::CallBootstrapCFunction_entry()->code()); 268 StubCode::CallNativeCFunction_entry()->code() :
269 StubCode::CallBootstrapCFunction_entry()->code());
266 270
267 NativeFunction patch_target_function = target_function; 271 NativeFunction patch_target_function = target_function;
268 #if defined(USING_SIMULATOR) 272 #if defined(USING_SIMULATOR)
269 if (!call_through_wrapper) { 273 if (!call_through_wrapper) {
270 patch_target_function = reinterpret_cast<NativeFunction>( 274 patch_target_function = reinterpret_cast<NativeFunction>(
271 Simulator::RedirectExternalReference( 275 Simulator::RedirectExternalReference(
272 reinterpret_cast<uword>(patch_target_function), 276 reinterpret_cast<uword>(patch_target_function),
273 Simulator::kBootstrapNativeCall, NativeEntry::kNumArguments)); 277 Simulator::kBootstrapNativeCall, NativeEntry::kNumArguments));
274 } 278 }
275 #endif 279 #endif
(...skipping 12 matching lines...) Expand all
288 // Tail-call resolved target. 292 // Tail-call resolved target.
289 if (call_through_wrapper) { 293 if (call_through_wrapper) {
290 // Because this call is within a compilation unit, Clang doesn't respect 294 // Because this call is within a compilation unit, Clang doesn't respect
291 // the ABI alignment here. 295 // the ABI alignment here.
292 NativeEntry::NativeCallWrapperNoStackCheck( 296 NativeEntry::NativeCallWrapperNoStackCheck(
293 args, reinterpret_cast<Dart_NativeFunction>(target_function)); 297 args, reinterpret_cast<Dart_NativeFunction>(target_function));
294 } else { 298 } else {
295 target_function(arguments); 299 target_function(arguments);
296 } 300 }
297 } 301 }
302 #endif // !defined(TARGET_ARCH_DBC)
298 303
299 304
300 } // namespace dart 305 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/native_entry.h ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698