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

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

Issue 10885039: Deoptimization can occur at Dart calls (includes native calls to C) but not at runtime calls. This … (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 3 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
OLDNEW
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" // Needed here to get TARGET_ARCH_IA32. 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32.
6 #if defined(TARGET_ARCH_IA32) 6 #if defined(TARGET_ARCH_IA32)
7 7
8 #include "vm/intermediate_language.h" 8 #include "vm/intermediate_language.h"
9 9
10 #include "lib/error.h" 10 #include "lib/error.h"
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 locs->set_out(Location::RegisterLocation(EAX)); 270 locs->set_out(Location::RegisterLocation(EAX));
271 return locs; 271 return locs;
272 } 272 }
273 273
274 274
275 static void EmitEqualityAsInstanceCall(FlowGraphCompiler* compiler, 275 static void EmitEqualityAsInstanceCall(FlowGraphCompiler* compiler,
276 intptr_t deopt_id, 276 intptr_t deopt_id,
277 intptr_t token_pos, 277 intptr_t token_pos,
278 Token::Kind kind, 278 Token::Kind kind,
279 LocationSummary* locs) { 279 LocationSummary* locs) {
280 compiler->AddCurrentDescriptor(PcDescriptors::kDeopt, 280 compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore,
281 deopt_id, 281 deopt_id,
282 token_pos); 282 token_pos);
283 const String& operator_name = String::ZoneHandle(Symbols::New("==")); 283 const String& operator_name = String::ZoneHandle(Symbols::New("=="));
284 const int kNumberOfArguments = 2; 284 const int kNumberOfArguments = 2;
285 const Array& kNoArgumentNames = Array::Handle(); 285 const Array& kNoArgumentNames = Array::Handle();
286 const int kNumArgumentsChecked = 2; 286 const int kNumArgumentsChecked = 2;
287 287
288 Label done, false_label, true_label; 288 Label done, false_label, true_label;
289 Register left = locs->in(0).reg(); 289 Register left = locs->in(0).reg();
290 Register right = locs->in(1).reg(); 290 Register right = locs->in(1).reg();
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 kNumArguments, 732 kNumArguments,
733 Array::Handle(), // No named arguments. 733 Array::Handle(), // No named arguments.
734 deopt, // Deoptimize target. 734 deopt, // Deoptimize target.
735 deopt_id(), 735 deopt_id(),
736 token_pos(), 736 token_pos(),
737 locs()); 737 locs());
738 return; 738 return;
739 } 739 }
740 const String& function_name = 740 const String& function_name =
741 String::ZoneHandle(Symbols::New(Token::Str(kind()))); 741 String::ZoneHandle(Symbols::New(Token::Str(kind())));
742 compiler->AddCurrentDescriptor(PcDescriptors::kDeopt, 742 compiler->AddCurrentDescriptor(PcDescriptors::kDeoptBefore,
743 deopt_id(), 743 deopt_id(),
744 token_pos()); 744 token_pos());
745 const intptr_t kNumArguments = 2; 745 const intptr_t kNumArguments = 2;
746 const intptr_t kNumArgsChecked = 2; // Type-feedback. 746 const intptr_t kNumArgsChecked = 2; // Type-feedback.
747 compiler->GenerateInstanceCall(deopt_id(), 747 compiler->GenerateInstanceCall(deopt_id(),
748 token_pos(), 748 token_pos(),
749 function_name, 749 function_name,
750 kNumArguments, 750 kNumArguments,
751 Array::ZoneHandle(), // No optional arguments. 751 Array::ZoneHandle(), // No optional arguments.
752 kNumArgsChecked, 752 kNumArgsChecked,
(...skipping 1468 matching lines...) Expand 10 before | Expand all | Expand 10 after
2221 } 2221 }
2222 __ j(ABOVE_EQUAL, deopt); 2222 __ j(ABOVE_EQUAL, deopt);
2223 } 2223 }
2224 2224
2225 2225
2226 } // namespace dart 2226 } // namespace dart
2227 2227
2228 #undef __ 2228 #undef __
2229 2229
2230 #endif // defined TARGET_ARCH_X64 2230 #endif // defined TARGET_ARCH_X64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698