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

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

Issue 10441111: - Rename class index to class id. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 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/object.cc ('k') | runtime/vm/raw_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/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/opt_code_generator.h" 8 #include "vm/opt_code_generator.h"
9 9
10 #include "vm/assembler_macros.h" 10 #include "vm/assembler_macros.h"
(...skipping 1408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1419 __ j(ZERO, deopt_blob->label()); 1419 __ j(ZERO, deopt_blob->label());
1420 } 1420 }
1421 1421
1422 __ LoadClassIndexOfObject(EAX, EBX); 1422 __ LoadClassIndexOfObject(EAX, EBX);
1423 const ICData& ic_data = node->ic_data(); 1423 const ICData& ic_data = node->ic_data();
1424 Function& target = Function::Handle(); 1424 Function& target = Function::Handle();
1425 Label load_field; 1425 Label load_field;
1426 for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) { 1426 for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
1427 Class& cls = Class::Handle(); 1427 Class& cls = Class::Handle();
1428 ic_data.GetOneClassCheckAt(i, &cls, &target); 1428 ic_data.GetOneClassCheckAt(i, &cls, &target);
1429 __ cmpl(EAX, Immediate(cls.index())); 1429 __ cmpl(EAX, Immediate(cls.id()));
1430 if (i == (ic_data.NumberOfChecks() - 1)) { 1430 if (i == (ic_data.NumberOfChecks() - 1)) {
1431 __ j(NOT_EQUAL, deopt_blob->label()); 1431 __ j(NOT_EQUAL, deopt_blob->label());
1432 } else { 1432 } else {
1433 __ j(EQUAL, &load_field); 1433 __ j(EQUAL, &load_field);
1434 } 1434 }
1435 } 1435 }
1436 Class& cls = Class::Handle(); 1436 Class& cls = Class::Handle();
1437 ic_data.GetOneClassCheckAt(0, &cls, &target); 1437 ic_data.GetOneClassCheckAt(0, &cls, &target);
1438 1438
1439 __ Bind(&load_field); 1439 __ Bind(&load_field);
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1631 } 1631 }
1632 __ LoadClassIndexOfObject(EBX, recv_reg); 1632 __ LoadClassIndexOfObject(EBX, recv_reg);
1633 // Initialize setter arguments, but leave the class and target fields NULL. 1633 // Initialize setter arguments, but leave the class and target fields NULL.
1634 InstanceSetterArgs setter_args = 1634 InstanceSetterArgs setter_args =
1635 {NULL, NULL, &field_name, recv_reg, value_reg, 1635 {NULL, NULL, &field_name, recv_reg, value_reg,
1636 node->id(), node->token_index()}; 1636 node->id(), node->token_index()};
1637 1637
1638 if (unique_target) { 1638 if (unique_target) {
1639 Label store_field; 1639 Label store_field;
1640 for (intptr_t i = 0; i < classes.length(); i++) { 1640 for (intptr_t i = 0; i < classes.length(); i++) {
1641 __ cmpl(EBX, Immediate(classes[i]->index())); 1641 __ cmpl(EBX, Immediate(classes[i]->id()));
1642 if (i == (classes.length() - 1)) { 1642 if (i == (classes.length() - 1)) {
1643 __ j(NOT_EQUAL, deopt_blob->label()); 1643 __ j(NOT_EQUAL, deopt_blob->label());
1644 } else { 1644 } else {
1645 __ j(EQUAL, &store_field); 1645 __ j(EQUAL, &store_field);
1646 } 1646 }
1647 } 1647 }
1648 __ Bind(&store_field); 1648 __ Bind(&store_field);
1649 setter_args.cls = classes[0]; 1649 setter_args.cls = classes[0];
1650 setter_args.target = targets[0]; 1650 setter_args.target = targets[0];
1651 GenerateInstanceSetter(setter_args); 1651 GenerateInstanceSetter(setter_args);
1652 return; 1652 return;
1653 } 1653 }
1654 // Targets are different. 1654 // Targets are different.
1655 Label done; 1655 Label done;
1656 for (intptr_t i = 0; i < classes.length(); i++) { 1656 for (intptr_t i = 0; i < classes.length(); i++) {
1657 setter_args.cls = classes[i]; 1657 setter_args.cls = classes[i];
1658 setter_args.target = targets[i]; 1658 setter_args.target = targets[i];
1659 __ cmpl(EBX, Immediate(classes[i]->index())); 1659 __ cmpl(EBX, Immediate(classes[i]->id()));
1660 if (i == (classes.length() - 1)) { 1660 if (i == (classes.length() - 1)) {
1661 __ j(NOT_EQUAL, deopt_blob->label()); 1661 __ j(NOT_EQUAL, deopt_blob->label());
1662 GenerateInstanceSetter(setter_args); 1662 GenerateInstanceSetter(setter_args);
1663 } else { 1663 } else {
1664 Label next_check; 1664 Label next_check;
1665 __ j(NOT_EQUAL, &next_check); 1665 __ j(NOT_EQUAL, &next_check);
1666 GenerateInstanceSetter(setter_args); 1666 GenerateInstanceSetter(setter_args);
1667 __ jmp(&done); 1667 __ jmp(&done);
1668 __ Bind(&next_check); 1668 __ Bind(&next_check);
1669 } 1669 }
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
1988 } else { 1988 } else {
1989 DeoptimizationBlob* deopt_blob = 1989 DeoptimizationBlob* deopt_blob =
1990 AddDeoptimizationBlob(node, EAX, EDX, kDeoptEqualityClassCheck); 1990 AddDeoptimizationBlob(node, EAX, EDX, kDeoptEqualityClassCheck);
1991 __ j(EQUAL, &compare); 1991 __ j(EQUAL, &compare);
1992 // Smi causes deoptimization. 1992 // Smi causes deoptimization.
1993 __ testl(EAX, Immediate(kSmiTagMask)); 1993 __ testl(EAX, Immediate(kSmiTagMask));
1994 __ j(ZERO, deopt_blob->label()); 1994 __ j(ZERO, deopt_blob->label());
1995 __ LoadClassIndexOfObject(EBX, EAX); 1995 __ LoadClassIndexOfObject(EBX, EAX);
1996 for (intptr_t i = 0; i < num_classes; i++) { 1996 for (intptr_t i = 0; i < num_classes; i++) {
1997 const Class& cls = *(*classes)[i]; 1997 const Class& cls = *(*classes)[i];
1998 __ cmpl(EBX, Immediate(cls.index())); 1998 __ cmpl(EBX, Immediate(cls.id()));
1999 if (i == (num_classes - 1)) { 1999 if (i == (num_classes - 1)) {
2000 __ j(NOT_EQUAL, deopt_blob->label()); 2000 __ j(NOT_EQUAL, deopt_blob->label());
2001 } else { 2001 } else {
2002 __ j(EQUAL, &compare); 2002 __ j(EQUAL, &compare);
2003 } 2003 }
2004 } 2004 }
2005 } 2005 }
2006 __ Bind(&compare); 2006 __ Bind(&compare);
2007 __ cmpl(EAX, EDX); 2007 __ cmpl(EAX, EDX);
2008 if (NodeInfoHasLabels(node)) { 2008 if (NodeInfoHasLabels(node)) {
(...skipping 633 matching lines...) Expand 10 before | Expand all | Expand 10 after
2642 AddDeoptimizationBlob(node, kDeoptCheckedInstanceCallSmiFail); 2642 AddDeoptimizationBlob(node, kDeoptCheckedInstanceCallSmiFail);
2643 __ testl(EAX, Immediate(kSmiTagMask)); 2643 __ testl(EAX, Immediate(kSmiTagMask));
2644 __ j(ZERO, deopt_blob->label()); 2644 __ j(ZERO, deopt_blob->label());
2645 } else { 2645 } else {
2646 // Receiver cannot be Smi, no need to test it. 2646 // Receiver cannot be Smi, no need to test it.
2647 } 2647 }
2648 __ LoadClassIndexOfObject(EAX, EAX); // Receiver's class. 2648 __ LoadClassIndexOfObject(EAX, EAX); // Receiver's class.
2649 for (intptr_t i = start_ix; i < classes.length(); i++) { 2649 for (intptr_t i = start_ix; i < classes.length(); i++) {
2650 const Class& cls = *classes[i]; 2650 const Class& cls = *classes[i];
2651 const Function& target = *targets[i]; 2651 const Function& target = *targets[i];
2652 __ cmpl(EAX, Immediate(cls.index())); 2652 __ cmpl(EAX, Immediate(cls.id()));
2653 if (i == (classes.length() - 1)) { 2653 if (i == (classes.length() - 1)) {
2654 // Last check. 2654 // Last check.
2655 DeoptimizationBlob* deopt_blob = 2655 DeoptimizationBlob* deopt_blob =
2656 AddDeoptimizationBlob(node, kDeoptCheckedInstanceCallCheckFail); 2656 AddDeoptimizationBlob(node, kDeoptCheckedInstanceCallCheckFail);
2657 __ j(NOT_EQUAL, deopt_blob->label()); 2657 __ j(NOT_EQUAL, deopt_blob->label());
2658 GenerateDirectCall(node->id(), 2658 GenerateDirectCall(node->id(),
2659 token_index, 2659 token_index,
2660 target, 2660 target,
2661 num_args, 2661 num_args,
2662 optional_arguments_names); 2662 optional_arguments_names);
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
2899 } 2899 }
2900 } 2900 }
2901 // TODO(srdjan): Implement unary kSUB (negate) Mint. 2901 // TODO(srdjan): Implement unary kSUB (negate) Mint.
2902 CodeGenerator::VisitUnaryOpNode(node); 2902 CodeGenerator::VisitUnaryOpNode(node);
2903 } 2903 }
2904 2904
2905 2905
2906 } // namespace dart 2906 } // namespace dart
2907 2907
2908 #endif // defined TARGET_ARCH_IA32 2908 #endif // defined TARGET_ARCH_IA32
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698