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

Side by Side Diff: vm/intermediate_language_ia32.cc

Issue 10873004: Use kInstanceCid instead of object_store()->object_class() when checking to see if the class is obj… (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 4 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 | « vm/intermediate_language.cc ('k') | vm/intermediate_language_x64.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) 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 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 case Token::kLTE: return LESS_EQUAL; 233 case Token::kLTE: return LESS_EQUAL;
234 case Token::kGTE: return GREATER_EQUAL; 234 case Token::kGTE: return GREATER_EQUAL;
235 default: 235 default:
236 UNREACHABLE(); 236 UNREACHABLE();
237 return OVERFLOW; 237 return OVERFLOW;
238 } 238 }
239 } 239 }
240 240
241 241
242 LocationSummary* EqualityCompareComp::MakeLocationSummary() const { 242 LocationSummary* EqualityCompareComp::MakeLocationSummary() const {
243 const intptr_t dart_object_cid =
244 Class::Handle(Isolate::Current()->object_store()->object_class()).id();
245 const intptr_t kNumInputs = 2; 243 const intptr_t kNumInputs = 2;
246 const bool is_checked_strict_equal = 244 const bool is_checked_strict_equal =
247 HasICData() && ic_data()->AllTargetsHaveSameOwner(dart_object_cid); 245 HasICData() && ic_data()->AllTargetsHaveSameOwner(kInstanceCid);
248 if ((receiver_class_id() == kSmiCid) || 246 if ((receiver_class_id() == kSmiCid) ||
249 (receiver_class_id() == kDoubleCid) || 247 (receiver_class_id() == kDoubleCid) ||
250 is_checked_strict_equal) { 248 is_checked_strict_equal) {
251 const intptr_t kNumTemps = 1; 249 const intptr_t kNumTemps = 1;
252 LocationSummary* locs = 250 LocationSummary* locs =
253 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); 251 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
254 locs->set_in(0, Location::RequiresRegister()); 252 locs->set_in(0, Location::RequiresRegister());
255 locs->set_in(1, Location::RequiresRegister()); 253 locs->set_in(1, Location::RequiresRegister());
256 locs->set_temp(0, Location::RequiresRegister()); 254 locs->set_temp(0, Location::RequiresRegister());
257 locs->set_out(Location::RequiresRegister()); 255 locs->set_out(Location::RequiresRegister());
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 EmitSmiComparisonOp(compiler, *locs(), kind(), NULL, // No branch. 629 EmitSmiComparisonOp(compiler, *locs(), kind(), NULL, // No branch.
632 deopt_id(), token_pos(), try_index()); 630 deopt_id(), token_pos(), try_index());
633 return; 631 return;
634 } 632 }
635 if (receiver_class_id() == kDoubleCid) { 633 if (receiver_class_id() == kDoubleCid) {
636 // Deoptimizes if both arguments are Smi, or if none is Double or Smi. 634 // Deoptimizes if both arguments are Smi, or if none is Double or Smi.
637 EmitDoubleComparisonOp(compiler, *locs(), kind(), NULL, // No branch. 635 EmitDoubleComparisonOp(compiler, *locs(), kind(), NULL, // No branch.
638 deopt_id(), token_pos(), try_index()); 636 deopt_id(), token_pos(), try_index());
639 return; 637 return;
640 } 638 }
641 const intptr_t dart_object_cid =
642 Class::Handle(Isolate::Current()->object_store()->object_class()).id();
643 const bool is_checked_strict_equal = 639 const bool is_checked_strict_equal =
644 HasICData() && ic_data()->AllTargetsHaveSameOwner(dart_object_cid); 640 HasICData() && ic_data()->AllTargetsHaveSameOwner(kInstanceCid);
645 if (is_checked_strict_equal) { 641 if (is_checked_strict_equal) {
646 EmitCheckedStrictEqual(compiler, *ic_data(), *locs(), kind(), NULL, 642 EmitCheckedStrictEqual(compiler, *ic_data(), *locs(), kind(), NULL,
647 deopt_id(), token_pos(), try_index()); 643 deopt_id(), token_pos(), try_index());
648 return; 644 return;
649 } 645 }
650 if (HasICData() && (ic_data()->NumberOfChecks() > 0)) { 646 if (HasICData() && (ic_data()->NumberOfChecks() > 0)) {
651 EmitGenericEqualityCompare(compiler, *locs(), kind(), NULL, *ic_data(), 647 EmitGenericEqualityCompare(compiler, *locs(), kind(), NULL, *ic_data(),
652 deopt_id(), token_pos(), try_index()); 648 deopt_id(), token_pos(), try_index());
653 } else { 649 } else {
654 Register left = locs()->in(0).reg(); 650 Register left = locs()->in(0).reg();
(...skipping 1379 matching lines...) Expand 10 before | Expand all | Expand 10 after
2034 if (ic_data.num_args_tested() != 2) return false; 2030 if (ic_data.num_args_tested() != 2) return false;
2035 if (ic_data.NumberOfChecks() != 1) return false; 2031 if (ic_data.NumberOfChecks() != 1) return false;
2036 Function& target = Function::Handle(); 2032 Function& target = Function::Handle();
2037 GrowableArray<intptr_t> class_ids; 2033 GrowableArray<intptr_t> class_ids;
2038 ic_data.GetCheckAt(0, &class_ids, &target); 2034 ic_data.GetCheckAt(0, &class_ids, &target);
2039 return (class_ids[0] == class_id) && (class_ids[1] == class_id); 2035 return (class_ids[0] == class_id) && (class_ids[1] == class_id);
2040 } 2036 }
2041 2037
2042 2038
2043 static bool IsCheckedStrictEquals(const ICData& ic_data, Token::Kind kind) { 2039 static bool IsCheckedStrictEquals(const ICData& ic_data, Token::Kind kind) {
2044 const intptr_t dart_object_cid =
2045 Class::Handle(Isolate::Current()->object_store()->object_class()).id();
2046 if ((kind == Token::kEQ) || (kind == Token::kNE)) { 2040 if ((kind == Token::kEQ) || (kind == Token::kNE)) {
2047 return ic_data.AllTargetsHaveSameOwner(dart_object_cid); 2041 return ic_data.AllTargetsHaveSameOwner(kInstanceCid);
2048 } 2042 }
2049 return false; 2043 return false;
2050 } 2044 }
2051 2045
2052 2046
2053 LocationSummary* BranchInstr::MakeLocationSummary() const { 2047 LocationSummary* BranchInstr::MakeLocationSummary() const {
2054 if ((kind() == Token::kEQ_STRICT) || (kind() == Token::kNE_STRICT)) { 2048 if ((kind() == Token::kEQ_STRICT) || (kind() == Token::kNE_STRICT)) {
2055 const int kNumInputs = 2; 2049 const int kNumInputs = 2;
2056 const int kNumTemps = 0; 2050 const int kNumTemps = 0;
2057 LocationSummary* locs = 2051 LocationSummary* locs =
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2210 } 2204 }
2211 } 2205 }
2212 __ Bind(&is_ok); 2206 __ Bind(&is_ok);
2213 } 2207 }
2214 2208
2215 } // namespace dart 2209 } // namespace dart
2216 2210
2217 #undef __ 2211 #undef __
2218 2212
2219 #endif // defined TARGET_ARCH_X64 2213 #endif // defined TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « vm/intermediate_language.cc ('k') | vm/intermediate_language_x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698