| Index: vm/intermediate_language_ia32.cc
|
| ===================================================================
|
| --- vm/intermediate_language_ia32.cc (revision 10409)
|
| +++ vm/intermediate_language_ia32.cc (working copy)
|
| @@ -242,8 +242,9 @@
|
|
|
| LocationSummary* EqualityCompareComp::MakeLocationSummary() const {
|
| const intptr_t kNumInputs = 2;
|
| - if (receiver_class_id() != kObject) {
|
| - ASSERT((receiver_class_id() == kSmi) || (receiver_class_id() == kDouble));
|
| + if (receiver_class_id() != kObjectCid) {
|
| + ASSERT((receiver_class_id() == kSmiCid) ||
|
| + (receiver_class_id() == kDoubleCid));
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* locs =
|
| new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
|
| @@ -325,10 +326,10 @@
|
| Register right = locs.in(1).reg();
|
| __ testl(left, Immediate(kSmiTagMask));
|
| Register temp = locs.temp(0).reg();
|
| - if (ic_data.GetReceiverClassIdAt(0) == kSmi) {
|
| + if (ic_data.GetReceiverClassIdAt(0) == kSmiCid) {
|
| Label done, load_class_id;
|
| __ j(NOT_ZERO, &load_class_id, Assembler::kNearJump);
|
| - __ movl(temp, Immediate(kSmi));
|
| + __ movl(temp, Immediate(kSmiCid));
|
| __ jmp(&done, Assembler::kNearJump);
|
| __ Bind(&load_class_id);
|
| __ LoadClassId(temp, left);
|
| @@ -340,7 +341,7 @@
|
| Condition cond = TokenKindToSmiCondition(kind);
|
| Label done;
|
| for (intptr_t i = 0; i < ic_data.NumberOfChecks(); i++) {
|
| - ASSERT((ic_data.GetReceiverClassIdAt(i) != kSmi) || (i == 0));
|
| + ASSERT((ic_data.GetReceiverClassIdAt(i) != kSmiCid) || (i == 0));
|
| Label next_test;
|
| __ cmpl(temp, Immediate(ic_data.GetReceiverClassIdAt(i)));
|
| __ j(NOT_EQUAL, &next_test);
|
| @@ -526,12 +527,12 @@
|
|
|
|
|
| void EqualityCompareComp::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - if (receiver_class_id() == kSmi) {
|
| + if (receiver_class_id() == kSmiCid) {
|
| EmitSmiComparisonOp(compiler, *locs(), kind(), NULL, // No branch.
|
| deopt_id(), token_pos(), try_index());
|
| return;
|
| }
|
| - if (receiver_class_id() == kDouble) {
|
| + if (receiver_class_id() == kDoubleCid) {
|
| EmitDoubleComparisonOp(compiler, *locs(), kind(), NULL, // No branch.
|
| deopt_id(), token_pos(), try_index());
|
| return;
|
| @@ -550,7 +551,7 @@
|
|
|
|
|
| LocationSummary* RelationalOpComp::MakeLocationSummary() const {
|
| - if ((operands_class_id() == kSmi) || (operands_class_id() == kDouble)) {
|
| + if ((operands_class_id() == kSmiCid) || (operands_class_id() == kDoubleCid)) {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* summary =
|
| @@ -561,18 +562,18 @@
|
| summary->set_temp(0, Location::RequiresRegister());
|
| return summary;
|
| }
|
| - ASSERT(operands_class_id() == kObject);
|
| + ASSERT(operands_class_id() == kObjectCid);
|
| return MakeCallSummary();
|
| }
|
|
|
|
|
| void RelationalOpComp::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - if (operands_class_id() == kSmi) {
|
| + if (operands_class_id() == kSmiCid) {
|
| EmitSmiComparisonOp(compiler, *locs(), kind(), NULL,
|
| deopt_id(), token_pos(), try_index());
|
| return;
|
| }
|
| - if (operands_class_id() == kDouble) {
|
| + if (operands_class_id() == kDoubleCid) {
|
| EmitDoubleComparisonOp(compiler, *locs(), kind(), NULL,
|
| deopt_id(), token_pos(), try_index());
|
| return;
|
| @@ -585,7 +586,7 @@
|
| // Load receiver into EAX, class into EDI.
|
| Label done;
|
| const intptr_t kNumArguments = 2;
|
| - __ movl(EDI, Immediate(kSmi));
|
| + __ movl(EDI, Immediate(kSmiCid));
|
| __ movl(EAX, Address(ESP, (kNumArguments - 1) * kWordSize));
|
| __ testl(EAX, Immediate(kSmiTagMask));
|
| __ j(ZERO, &done);
|
| @@ -665,9 +666,9 @@
|
|
|
| LocationSummary* LoadIndexedComp::MakeLocationSummary() const {
|
| const intptr_t kNumInputs = 2;
|
| - if ((receiver_type() == kGrowableObjectArray) ||
|
| - (receiver_type() == kArray) ||
|
| - (receiver_type() == kImmutableArray)) {
|
| + if ((receiver_type() == kGrowableObjectArrayCid) ||
|
| + (receiver_type() == kArrayCid) ||
|
| + (receiver_type() == kImmutableArrayCid)) {
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* locs =
|
| new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
|
| @@ -677,7 +678,7 @@
|
| locs->set_out(Location::RequiresRegister());
|
| return locs;
|
| } else {
|
| - ASSERT(receiver_type() == kIllegalObjectKind);
|
| + ASSERT(receiver_type() == kIllegalCid);
|
| return MakeCallSummary();
|
| }
|
| }
|
| @@ -694,7 +695,7 @@
|
| const ICData& ic_data = *comp->ic_data();
|
| ASSERT(ic_data.num_args_tested() == 1);
|
| // No indexed access on Smi.
|
| - ASSERT(ic_data.GetReceiverClassIdAt(0) != kSmi);
|
| + ASSERT(ic_data.GetReceiverClassIdAt(0) != kSmiCid);
|
| // Load receiver into EAX.
|
| const intptr_t kNumArguments = 2;
|
| __ movl(EAX, Address(ESP, (kNumArguments - 1) * kWordSize));
|
| @@ -714,7 +715,7 @@
|
|
|
|
|
| void LoadIndexedComp::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - if (receiver_type() == kIllegalObjectKind) {
|
| + if (receiver_type() == kIllegalCid) {
|
| if (HasICData() && (ic_data()->NumberOfChecks() > 0)) {
|
| EmitLoadIndexedPolymorphic(compiler, this);
|
| } else {
|
| @@ -729,7 +730,8 @@
|
| Register result = locs()->out().reg();
|
| Register temp = locs()->temp(0).reg();
|
|
|
| - const DeoptReasonId deopt_reason = (receiver_type() == kGrowableObjectArray) ?
|
| + const DeoptReasonId deopt_reason =
|
| + (receiver_type() == kGrowableObjectArrayCid) ?
|
| kDeoptLoadIndexedGrowableArray : kDeoptLoadIndexedFixedArray;
|
|
|
| Label* deopt = compiler->AddDeoptStub(deopt_id(),
|
| @@ -748,8 +750,8 @@
|
| __ j(NOT_ZERO, deopt);
|
|
|
| switch (receiver_type()) {
|
| - case kArray:
|
| - case kImmutableArray:
|
| + case kArrayCid:
|
| + case kImmutableArrayCid:
|
| __ cmpl(index, FieldAddress(receiver, Array::length_offset()));
|
| __ j(ABOVE_EQUAL, deopt);
|
| // Note that index is Smi, i.e, times 2.
|
| @@ -757,7 +759,7 @@
|
| __ movl(result, FieldAddress(receiver, index, TIMES_2, sizeof(RawArray)));
|
| break;
|
|
|
| - case kGrowableObjectArray: {
|
| + case kGrowableObjectArrayCid: {
|
| Register temp = locs()->temp(0).reg();
|
|
|
| __ cmpl(index,
|
| @@ -779,8 +781,8 @@
|
|
|
| LocationSummary* StoreIndexedComp::MakeLocationSummary() const {
|
| const intptr_t kNumInputs = 3;
|
| - if ((receiver_type() == kGrowableObjectArray) ||
|
| - (receiver_type() == kArray)) {
|
| + if ((receiver_type() == kGrowableObjectArrayCid) ||
|
| + (receiver_type() == kArrayCid)) {
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* locs =
|
| new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
|
| @@ -791,7 +793,7 @@
|
| locs->set_out(Location::NoLocation());
|
| return locs;
|
| } else {
|
| - ASSERT(receiver_type() == kIllegalObjectKind);
|
| + ASSERT(receiver_type() == kIllegalCid);
|
| return MakeCallSummary();
|
| }
|
| }
|
| @@ -830,7 +832,7 @@
|
| const ICData& ic_data = *comp->ic_data();
|
| ASSERT(ic_data.num_args_tested() == 1);
|
| // No indexed access on Smi.
|
| - ASSERT(ic_data.GetReceiverClassIdAt(0) != kSmi);
|
| + ASSERT(ic_data.GetReceiverClassIdAt(0) != kSmiCid);
|
| // Load receiver into EAX.
|
| const intptr_t kNumArguments = 3;
|
| __ movl(EAX, Address(ESP, (kNumArguments - 1) * kWordSize));
|
| @@ -850,7 +852,7 @@
|
|
|
|
|
| void StoreIndexedComp::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - if (receiver_type() == kIllegalObjectKind) {
|
| + if (receiver_type() == kIllegalCid) {
|
| if (HasICData() && (ic_data()->NumberOfChecks() > 0)) {
|
| EmitStoreIndexedPolymorphic(compiler, this);
|
| } else {
|
| @@ -881,8 +883,8 @@
|
| __ j(NOT_ZERO, deopt);
|
|
|
| switch (receiver_type()) {
|
| - case kArray:
|
| - case kImmutableArray:
|
| + case kArrayCid:
|
| + case kImmutableArrayCid:
|
| __ cmpl(index, FieldAddress(receiver, Array::length_offset()));
|
| __ j(ABOVE_EQUAL, deopt);
|
| // Note that index is Smi, i.e, times 2.
|
| @@ -892,7 +894,7 @@
|
| value);
|
| break;
|
|
|
| - case kGrowableObjectArray: {
|
| + case kGrowableObjectArrayCid: {
|
| __ cmpl(index,
|
| FieldAddress(receiver, GrowableObjectArray::length_offset()));
|
| __ j(ABOVE_EQUAL, deopt);
|
| @@ -1118,7 +1120,7 @@
|
| // because a null instantiator will have the wrong class (Null instead of
|
| // TypeArguments).
|
| Label type_arguments_uninstantiated;
|
| - __ CompareClassId(instantiator_reg, kTypeArguments, temp);
|
| + __ CompareClassId(instantiator_reg, kTypeArgumentsCid, temp);
|
| __ j(NOT_EQUAL, &type_arguments_uninstantiated, Assembler::kNearJump);
|
| __ cmpl(FieldAddress(instantiator_reg, TypeArguments::length_offset()),
|
| Immediate(Smi::RawValue(len)));
|
| @@ -1181,7 +1183,7 @@
|
| // No need to check instantiator_reg for null here, because a null
|
| // instantiator will have the wrong class (Null instead of TypeArguments).
|
| Label type_arguments_uninstantiated;
|
| - __ CompareClassId(instantiator_reg, kTypeArguments, temp_reg);
|
| + __ CompareClassId(instantiator_reg, kTypeArgumentsCid, temp_reg);
|
| __ j(NOT_EQUAL, &type_arguments_uninstantiated, Assembler::kNearJump);
|
| Immediate arguments_length =
|
| Immediate(Smi::RawValue(type_arguments().Length()));
|
| @@ -1250,7 +1252,7 @@
|
| // matching length and, if so, use it as the instantiated type_arguments.
|
| // No need to check the instantiator (RAX) for null here, because a null
|
| // instantiator will have the wrong class (Null instead of TypeArguments).
|
| - __ CompareClassId(instantiator_reg, kTypeArguments, temp_reg);
|
| + __ CompareClassId(instantiator_reg, kTypeArgumentsCid, temp_reg);
|
| __ j(NOT_EQUAL, &done, Assembler::kNearJump);
|
| Immediate arguments_length =
|
| Immediate(Smi::RawValue(type_arguments().Length()));
|
| @@ -1545,7 +1547,7 @@
|
| {
|
| __ Bind(&call_method);
|
| Function& target = Function::ZoneHandle(
|
| - comp->ic_data()->GetTargetForReceiverClassId(kSmi));
|
| + comp->ic_data()->GetTargetForReceiverClassId(kSmiCid));
|
| ASSERT(!target.IsNull());
|
| const intptr_t kArgumentCount = 2;
|
| __ pushl(temp);
|
| @@ -1608,7 +1610,7 @@
|
| __ j(NOT_ZERO, &non_smi);
|
| __ testl(right, Immediate(kSmiTagMask)); // Is argument Smi?
|
| __ j(ZERO, &smi_smi);
|
| - __ CompareClassId(right, kMint, temp); // Is argument Mint?
|
| + __ CompareClassId(right, kMintCid, temp); // Is argument Mint?
|
| __ j(NOT_EQUAL, deopt); // Argument neither Smi nor Mint.
|
| __ cmpl(left, Immediate(0));
|
| __ j(LESS, &smi_static_call); // Negative Smi receiver, Mint argument.
|
| @@ -1621,7 +1623,7 @@
|
| __ jmp(&done);
|
|
|
| __ Bind(&non_smi); // Receiver is non-Smi.
|
| - __ CompareClassId(left, kMint, temp); // Is receiver Mint?
|
| + __ CompareClassId(left, kMintCid, temp); // Is receiver Mint?
|
| __ j(NOT_EQUAL, deopt); // Receiver neither Smi nor Mint.
|
| __ testl(right, Immediate(kSmiTagMask)); // Is argument Smi?
|
| __ j(NOT_ZERO, &mint_static_call); // Mint receiver, non-Smi argument.
|
| @@ -1639,7 +1641,7 @@
|
| __ Bind(&smi_static_call);
|
| {
|
| Function& target = Function::ZoneHandle(
|
| - comp->ic_data()->GetTargetForReceiverClassId(kSmi));
|
| + comp->ic_data()->GetTargetForReceiverClassId(kSmiCid));
|
| if (target.IsNull()) {
|
| __ jmp(deopt);
|
| } else {
|
| @@ -1659,7 +1661,7 @@
|
| __ Bind(&mint_static_call);
|
| {
|
| Function& target = Function::ZoneHandle(
|
| - comp->ic_data()->GetTargetForReceiverClassId(kMint));
|
| + comp->ic_data()->GetTargetForReceiverClassId(kMintCid));
|
| if (target.IsNull()) {
|
| __ jmp(deopt);
|
| } else {
|
| @@ -1775,7 +1777,7 @@
|
| instance_call()->try_index(),
|
| kDeoptUnaryOp,
|
| value);
|
| - if (test_class_id == kSmi) {
|
| + if (test_class_id == kSmiCid) {
|
| __ testl(value, Immediate(kSmiTagMask));
|
| __ j(NOT_ZERO, deopt);
|
| switch (op_kind()) {
|
| @@ -1827,11 +1829,11 @@
|
| instance_call()->try_index(),
|
| kDeoptUnaryOp,
|
| value);
|
| - if (test_class_id == kDouble) {
|
| + if (test_class_id == kDoubleCid) {
|
| Register temp = locs()->temp(0).reg();
|
| __ testl(value, Immediate(kSmiTagMask));
|
| __ j(ZERO, deopt); // Smi.
|
| - __ CompareClassId(value, kDouble, temp);
|
| + __ CompareClassId(value, kDoubleCid, temp);
|
| __ j(NOT_EQUAL, deopt);
|
| // Allocate result object.
|
| const Class& double_class = compiler->double_class();
|
| @@ -1858,7 +1860,7 @@
|
|
|
| LocationSummary* ToDoubleComp::MakeLocationSummary() const {
|
| const intptr_t kNumInputs = 1;
|
| - if (from() == kDouble) {
|
| + if (from() == kDoubleCid) {
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* locs =
|
| new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
|
| @@ -1868,17 +1870,17 @@
|
| locs->set_temp(0, Location::RequiresRegister());
|
| return locs;
|
| } else {
|
| - ASSERT(from() == kSmi);
|
| + ASSERT(from() == kSmiCid);
|
| return MakeCallSummary(); // Calls a stub to allocate result.
|
| }
|
| }
|
|
|
|
|
| void ToDoubleComp::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| - Register value = (from() == kDouble) ? locs()->in(0).reg() : EBX;
|
| + Register value = (from() == kDoubleCid) ? locs()->in(0).reg() : EBX;
|
| Register result = locs()->out().reg();
|
|
|
| - const DeoptReasonId deopt_reason = (from() == kDouble) ?
|
| + const DeoptReasonId deopt_reason = (from() == kDoubleCid) ?
|
| kDeoptDoubleToDouble : kDeoptIntegerToDouble;
|
| Label* deopt = compiler->AddDeoptStub(instance_call()->deopt_id(),
|
| instance_call()->token_pos(),
|
| @@ -1886,17 +1888,17 @@
|
| deopt_reason,
|
| value);
|
|
|
| - if (from() == kDouble) {
|
| + if (from() == kDoubleCid) {
|
| Register temp = locs()->temp(0).reg();
|
| __ testl(value, Immediate(kSmiTagMask));
|
| __ j(ZERO, deopt); // Deoptimize if Smi.
|
| - __ CompareClassId(value, kDouble, temp);
|
| + __ CompareClassId(value, kDoubleCid, temp);
|
| __ j(NOT_EQUAL, deopt); // Deoptimize if not Double.
|
| ASSERT(value == result);
|
| return;
|
| }
|
|
|
| - ASSERT(from() == kSmi);
|
| + ASSERT(from() == kSmiCid);
|
|
|
| const Class& double_class = compiler->double_class();
|
| const Code& stub =
|
| @@ -1937,7 +1939,7 @@
|
| ASSERT(ic_data()->num_args_tested() == 1);
|
| Label handle_smi;
|
| Label* is_smi_label =
|
| - ic_data()->GetReceiverClassIdAt(0) == kSmi ? &handle_smi : deopt;
|
| + ic_data()->GetReceiverClassIdAt(0) == kSmiCid ? &handle_smi : deopt;
|
|
|
| // Load receiver into EAX.
|
| __ movl(EAX,
|
| @@ -1957,7 +1959,7 @@
|
| instance_call()->try_index());
|
| if (is_smi_label == &handle_smi) {
|
| __ Bind(&handle_smi);
|
| - ASSERT(ic_data()->GetReceiverClassIdAt(0) == kSmi);
|
| + ASSERT(ic_data()->GetReceiverClassIdAt(0) == kSmiCid);
|
| const Function& target = Function::ZoneHandle(ic_data()->GetTargetAt(0));
|
| compiler->GenerateStaticCall(instance_call()->deopt_id(),
|
| instance_call()->token_pos(),
|
| @@ -1992,8 +1994,8 @@
|
| return locs;
|
| }
|
| if (HasICData() && (ic_data()->NumberOfChecks() > 0)) {
|
| - if (ICDataWithBothClassIds(*ic_data(), kSmi) ||
|
| - ICDataWithBothClassIds(*ic_data(), kDouble)) {
|
| + if (ICDataWithBothClassIds(*ic_data(), kSmiCid) ||
|
| + ICDataWithBothClassIds(*ic_data(), kDoubleCid)) {
|
| const intptr_t kNumInputs = 2;
|
| const intptr_t kNumTemps = 1;
|
| LocationSummary* summary =
|
| @@ -2031,12 +2033,12 @@
|
| }
|
| // Relational or equality.
|
| if (HasICData() && (ic_data()->NumberOfChecks() > 0)) {
|
| - if (ICDataWithBothClassIds(*ic_data(), kSmi)) {
|
| + if (ICDataWithBothClassIds(*ic_data(), kSmiCid)) {
|
| EmitSmiComparisonOp(compiler, *locs(), kind(), this,
|
| deopt_id(), token_pos(), try_index());
|
| return;
|
| }
|
| - if (ICDataWithBothClassIds(*ic_data(), kDouble)) {
|
| + if (ICDataWithBothClassIds(*ic_data(), kDoubleCid)) {
|
| EmitDoubleComparisonOp(compiler, *locs(), kind(), this,
|
| deopt_id(), token_pos(), try_index());
|
| return;
|
|
|