| Index: src/ia32/code-stubs-ia32.cc
|
| ===================================================================
|
| --- src/ia32/code-stubs-ia32.cc (revision 8025)
|
| +++ src/ia32/code-stubs-ia32.cc (working copy)
|
| @@ -517,14 +517,13 @@
|
| }
|
|
|
|
|
| -Handle<Code> GetTypeRecordingUnaryOpStub(int key,
|
| - TRUnaryOpIC::TypeInfo type_info) {
|
| - TypeRecordingUnaryOpStub stub(key, type_info);
|
| +Handle<Code> GetUnaryOpStub(int key, UnaryOpIC::TypeInfo type_info) {
|
| + UnaryOpStub stub(key, type_info);
|
| return stub.GetCode();
|
| }
|
|
|
|
|
| -const char* TypeRecordingUnaryOpStub::GetName() {
|
| +const char* UnaryOpStub::GetName() {
|
| if (name_ != NULL) return name_;
|
| const int kMaxNameLength = 100;
|
| name_ = Isolate::Current()->bootstrapper()->AllocateAutoDeletedArray(
|
| @@ -538,34 +537,34 @@
|
| }
|
|
|
| OS::SNPrintF(Vector<char>(name_, kMaxNameLength),
|
| - "TypeRecordingUnaryOpStub_%s_%s_%s",
|
| + "UnaryOpStub_%s_%s_%s",
|
| op_name,
|
| overwrite_name,
|
| - TRUnaryOpIC::GetName(operand_type_));
|
| + UnaryOpIC::GetName(operand_type_));
|
| return name_;
|
| }
|
|
|
|
|
| // TODO(svenpanne): Use virtual functions instead of switch.
|
| -void TypeRecordingUnaryOpStub::Generate(MacroAssembler* masm) {
|
| +void UnaryOpStub::Generate(MacroAssembler* masm) {
|
| switch (operand_type_) {
|
| - case TRUnaryOpIC::UNINITIALIZED:
|
| + case UnaryOpIC::UNINITIALIZED:
|
| GenerateTypeTransition(masm);
|
| break;
|
| - case TRUnaryOpIC::SMI:
|
| + case UnaryOpIC::SMI:
|
| GenerateSmiStub(masm);
|
| break;
|
| - case TRUnaryOpIC::HEAP_NUMBER:
|
| + case UnaryOpIC::HEAP_NUMBER:
|
| GenerateHeapNumberStub(masm);
|
| break;
|
| - case TRUnaryOpIC::GENERIC:
|
| + case UnaryOpIC::GENERIC:
|
| GenerateGenericStub(masm);
|
| break;
|
| }
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
|
| __ pop(ecx); // Save return address.
|
| __ push(eax);
|
| // the argument is now on top.
|
| @@ -580,15 +579,13 @@
|
| // Patch the caller to an appropriate specialized stub and return the
|
| // operation result to the caller of the stub.
|
| __ TailCallExternalReference(
|
| - ExternalReference(IC_Utility(IC::kTypeRecordingUnaryOp_Patch),
|
| - masm->isolate()),
|
| - 4,
|
| - 1);
|
| + ExternalReference(IC_Utility(IC::kUnaryOp_Patch),
|
| + masm->isolate()), 4, 1);
|
| }
|
|
|
|
|
| // TODO(svenpanne): Use virtual functions instead of switch.
|
| -void TypeRecordingUnaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
|
| switch (op_) {
|
| case Token::SUB:
|
| GenerateSmiStubSub(masm);
|
| @@ -602,7 +599,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateSmiStubSub(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateSmiStubSub(MacroAssembler* masm) {
|
| Label non_smi, undo, slow;
|
| GenerateSmiCodeSub(masm, &non_smi, &undo, &slow,
|
| Label::kNear, Label::kNear, Label::kNear);
|
| @@ -614,7 +611,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateSmiStubBitNot(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateSmiStubBitNot(MacroAssembler* masm) {
|
| Label non_smi;
|
| GenerateSmiCodeBitNot(masm, &non_smi);
|
| __ bind(&non_smi);
|
| @@ -622,13 +619,13 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateSmiCodeSub(MacroAssembler* masm,
|
| - Label* non_smi,
|
| - Label* undo,
|
| - Label* slow,
|
| - Label::Distance non_smi_near,
|
| - Label::Distance undo_near,
|
| - Label::Distance slow_near) {
|
| +void UnaryOpStub::GenerateSmiCodeSub(MacroAssembler* masm,
|
| + Label* non_smi,
|
| + Label* undo,
|
| + Label* slow,
|
| + Label::Distance non_smi_near,
|
| + Label::Distance undo_near,
|
| + Label::Distance slow_near) {
|
| // Check whether the value is a smi.
|
| __ test(eax, Immediate(kSmiTagMask));
|
| __ j(not_zero, non_smi, non_smi_near);
|
| @@ -646,7 +643,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateSmiCodeBitNot(
|
| +void UnaryOpStub::GenerateSmiCodeBitNot(
|
| MacroAssembler* masm,
|
| Label* non_smi,
|
| Label::Distance non_smi_near) {
|
| @@ -661,13 +658,13 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateSmiCodeUndo(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateSmiCodeUndo(MacroAssembler* masm) {
|
| __ mov(eax, Operand(edx));
|
| }
|
|
|
|
|
| // TODO(svenpanne): Use virtual functions instead of switch.
|
| -void TypeRecordingUnaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
|
| switch (op_) {
|
| case Token::SUB:
|
| GenerateHeapNumberStubSub(masm);
|
| @@ -681,7 +678,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateHeapNumberStubSub(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateHeapNumberStubSub(MacroAssembler* masm) {
|
| Label non_smi, undo, slow, call_builtin;
|
| GenerateSmiCodeSub(masm, &non_smi, &undo, &call_builtin, Label::kNear);
|
| __ bind(&non_smi);
|
| @@ -695,7 +692,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateHeapNumberStubBitNot(
|
| +void UnaryOpStub::GenerateHeapNumberStubBitNot(
|
| MacroAssembler* masm) {
|
| Label non_smi, slow;
|
| GenerateSmiCodeBitNot(masm, &non_smi, Label::kNear);
|
| @@ -706,8 +703,8 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateHeapNumberCodeSub(MacroAssembler* masm,
|
| - Label* slow) {
|
| +void UnaryOpStub::GenerateHeapNumberCodeSub(MacroAssembler* masm,
|
| + Label* slow) {
|
| __ mov(edx, FieldOperand(eax, HeapObject::kMapOffset));
|
| __ cmp(edx, masm->isolate()->factory()->heap_number_map());
|
| __ j(not_equal, slow);
|
| @@ -742,9 +739,8 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateHeapNumberCodeBitNot(
|
| - MacroAssembler* masm,
|
| - Label* slow) {
|
| +void UnaryOpStub::GenerateHeapNumberCodeBitNot(MacroAssembler* masm,
|
| + Label* slow) {
|
| __ mov(edx, FieldOperand(eax, HeapObject::kMapOffset));
|
| __ cmp(edx, masm->isolate()->factory()->heap_number_map());
|
| __ j(not_equal, slow);
|
| @@ -803,7 +799,7 @@
|
|
|
|
|
| // TODO(svenpanne): Use virtual functions instead of switch.
|
| -void TypeRecordingUnaryOpStub::GenerateGenericStub(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateGenericStub(MacroAssembler* masm) {
|
| switch (op_) {
|
| case Token::SUB:
|
| GenerateGenericStubSub(masm);
|
| @@ -817,7 +813,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateGenericStubSub(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateGenericStubSub(MacroAssembler* masm) {
|
| Label non_smi, undo, slow;
|
| GenerateSmiCodeSub(masm, &non_smi, &undo, &slow, Label::kNear);
|
| __ bind(&non_smi);
|
| @@ -829,7 +825,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateGenericStubBitNot(MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateGenericStubBitNot(MacroAssembler* masm) {
|
| Label non_smi, slow;
|
| GenerateSmiCodeBitNot(masm, &non_smi, Label::kNear);
|
| __ bind(&non_smi);
|
| @@ -839,8 +835,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingUnaryOpStub::GenerateGenericCodeFallback(
|
| - MacroAssembler* masm) {
|
| +void UnaryOpStub::GenerateGenericCodeFallback(MacroAssembler* masm) {
|
| // Handle the slow case by jumping to the corresponding JavaScript builtin.
|
| __ pop(ecx); // pop return address.
|
| __ push(eax);
|
| @@ -858,15 +853,15 @@
|
| }
|
|
|
|
|
| -Handle<Code> GetTypeRecordingBinaryOpStub(int key,
|
| - TRBinaryOpIC::TypeInfo type_info,
|
| - TRBinaryOpIC::TypeInfo result_type_info) {
|
| - TypeRecordingBinaryOpStub stub(key, type_info, result_type_info);
|
| +Handle<Code> GetBinaryOpStub(int key,
|
| + BinaryOpIC::TypeInfo type_info,
|
| + BinaryOpIC::TypeInfo result_type_info) {
|
| + BinaryOpStub stub(key, type_info, result_type_info);
|
| return stub.GetCode();
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateTypeTransition(MacroAssembler* masm) {
|
| __ pop(ecx); // Save return address.
|
| __ push(edx);
|
| __ push(eax);
|
| @@ -882,7 +877,7 @@
|
| // Patch the caller to an appropriate specialized stub and return the
|
| // operation result to the caller of the stub.
|
| __ TailCallExternalReference(
|
| - ExternalReference(IC_Utility(IC::kTypeRecordingBinaryOp_Patch),
|
| + ExternalReference(IC_Utility(IC::kBinaryOp_Patch),
|
| masm->isolate()),
|
| 5,
|
| 1);
|
| @@ -891,8 +886,7 @@
|
|
|
| // Prepare for a type transition runtime call when the args are already on
|
| // the stack, under the return address.
|
| -void TypeRecordingBinaryOpStub::GenerateTypeTransitionWithSavedArgs(
|
| - MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateTypeTransitionWithSavedArgs(MacroAssembler* masm) {
|
| __ pop(ecx); // Save return address.
|
| // Left and right arguments are already on top of the stack.
|
| // Push this stub's key. Although the operation and the type info are
|
| @@ -906,37 +900,37 @@
|
| // Patch the caller to an appropriate specialized stub and return the
|
| // operation result to the caller of the stub.
|
| __ TailCallExternalReference(
|
| - ExternalReference(IC_Utility(IC::kTypeRecordingBinaryOp_Patch),
|
| + ExternalReference(IC_Utility(IC::kBinaryOp_Patch),
|
| masm->isolate()),
|
| 5,
|
| 1);
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::Generate(MacroAssembler* masm) {
|
| +void BinaryOpStub::Generate(MacroAssembler* masm) {
|
| switch (operands_type_) {
|
| - case TRBinaryOpIC::UNINITIALIZED:
|
| + case BinaryOpIC::UNINITIALIZED:
|
| GenerateTypeTransition(masm);
|
| break;
|
| - case TRBinaryOpIC::SMI:
|
| + case BinaryOpIC::SMI:
|
| GenerateSmiStub(masm);
|
| break;
|
| - case TRBinaryOpIC::INT32:
|
| + case BinaryOpIC::INT32:
|
| GenerateInt32Stub(masm);
|
| break;
|
| - case TRBinaryOpIC::HEAP_NUMBER:
|
| + case BinaryOpIC::HEAP_NUMBER:
|
| GenerateHeapNumberStub(masm);
|
| break;
|
| - case TRBinaryOpIC::ODDBALL:
|
| + case BinaryOpIC::ODDBALL:
|
| GenerateOddballStub(masm);
|
| break;
|
| - case TRBinaryOpIC::BOTH_STRING:
|
| + case BinaryOpIC::BOTH_STRING:
|
| GenerateBothStringStub(masm);
|
| break;
|
| - case TRBinaryOpIC::STRING:
|
| + case BinaryOpIC::STRING:
|
| GenerateStringStub(masm);
|
| break;
|
| - case TRBinaryOpIC::GENERIC:
|
| + case BinaryOpIC::GENERIC:
|
| GenerateGeneric(masm);
|
| break;
|
| default:
|
| @@ -945,7 +939,7 @@
|
| }
|
|
|
|
|
| -const char* TypeRecordingBinaryOpStub::GetName() {
|
| +const char* BinaryOpStub::GetName() {
|
| if (name_ != NULL) return name_;
|
| const int kMaxNameLength = 100;
|
| name_ = Isolate::Current()->bootstrapper()->AllocateAutoDeletedArray(
|
| @@ -961,15 +955,16 @@
|
| }
|
|
|
| OS::SNPrintF(Vector<char>(name_, kMaxNameLength),
|
| - "TypeRecordingBinaryOpStub_%s_%s_%s",
|
| + "BinaryOpStub_%s_%s_%s",
|
| op_name,
|
| overwrite_name,
|
| - TRBinaryOpIC::GetName(operands_type_));
|
| + BinaryOpIC::GetName(operands_type_));
|
| return name_;
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateSmiCode(MacroAssembler* masm,
|
| +void BinaryOpStub::GenerateSmiCode(
|
| + MacroAssembler* masm,
|
| Label* slow,
|
| SmiCodeGenerateHeapNumberResults allow_heapnumber_results) {
|
| // 1. Move arguments into edx, eax except for DIV and MOD, which need the
|
| @@ -1344,7 +1339,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateSmiStub(MacroAssembler* masm) {
|
| Label call_runtime;
|
|
|
| switch (op_) {
|
| @@ -1366,8 +1361,8 @@
|
| UNREACHABLE();
|
| }
|
|
|
| - if (result_type_ == TRBinaryOpIC::UNINITIALIZED ||
|
| - result_type_ == TRBinaryOpIC::SMI) {
|
| + if (result_type_ == BinaryOpIC::UNINITIALIZED ||
|
| + result_type_ == BinaryOpIC::SMI) {
|
| GenerateSmiCode(masm, &call_runtime, NO_HEAPNUMBER_RESULTS);
|
| } else {
|
| GenerateSmiCode(masm, &call_runtime, ALLOW_HEAPNUMBER_RESULTS);
|
| @@ -1395,19 +1390,19 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateStringStub(MacroAssembler* masm) {
|
| - ASSERT(operands_type_ == TRBinaryOpIC::STRING);
|
| +void BinaryOpStub::GenerateStringStub(MacroAssembler* masm) {
|
| + ASSERT(operands_type_ == BinaryOpIC::STRING);
|
| ASSERT(op_ == Token::ADD);
|
| // Try to add arguments as strings, otherwise, transition to the generic
|
| - // TRBinaryOpIC type.
|
| + // BinaryOpIC type.
|
| GenerateAddStrings(masm);
|
| GenerateTypeTransition(masm);
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateBothStringStub(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateBothStringStub(MacroAssembler* masm) {
|
| Label call_runtime;
|
| - ASSERT(operands_type_ == TRBinaryOpIC::BOTH_STRING);
|
| + ASSERT(operands_type_ == BinaryOpIC::BOTH_STRING);
|
| ASSERT(op_ == Token::ADD);
|
| // If both arguments are strings, call the string add stub.
|
| // Otherwise, do a transition.
|
| @@ -1437,9 +1432,9 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateInt32Stub(MacroAssembler* masm) {
|
| Label call_runtime;
|
| - ASSERT(operands_type_ == TRBinaryOpIC::INT32);
|
| + ASSERT(operands_type_ == BinaryOpIC::INT32);
|
|
|
| // Floating point case.
|
| switch (op_) {
|
| @@ -1461,7 +1456,7 @@
|
| default: UNREACHABLE();
|
| }
|
| // Check result type if it is currently Int32.
|
| - if (result_type_ <= TRBinaryOpIC::INT32) {
|
| + if (result_type_ <= BinaryOpIC::INT32) {
|
| __ cvttsd2si(ecx, Operand(xmm0));
|
| __ cvtsi2sd(xmm2, Operand(ecx));
|
| __ ucomisd(xmm0, xmm2);
|
| @@ -1639,7 +1634,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateOddballStub(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateOddballStub(MacroAssembler* masm) {
|
| if (op_ == Token::ADD) {
|
| // Handle string addition here, because it is the only operation
|
| // that does not do a ToNumber conversion on the operands.
|
| @@ -1672,7 +1667,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateHeapNumberStub(MacroAssembler* masm) {
|
| Label call_runtime;
|
|
|
| // Floating point case.
|
| @@ -1853,7 +1848,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateGeneric(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateGeneric(MacroAssembler* masm) {
|
| Label call_runtime;
|
|
|
| Counters* counters = masm->isolate()->counters();
|
| @@ -2050,7 +2045,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateAddStrings(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateAddStrings(MacroAssembler* masm) {
|
| ASSERT(op_ == Token::ADD);
|
| Label left_not_string, call_runtime;
|
|
|
| @@ -2084,7 +2079,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateHeapResultAllocation(
|
| +void BinaryOpStub::GenerateHeapResultAllocation(
|
| MacroAssembler* masm,
|
| Label* alloc_failure) {
|
| Label skip_allocation;
|
| @@ -2126,7 +2121,7 @@
|
| }
|
|
|
|
|
| -void TypeRecordingBinaryOpStub::GenerateRegisterArgsPush(MacroAssembler* masm) {
|
| +void BinaryOpStub::GenerateRegisterArgsPush(MacroAssembler* masm) {
|
| __ pop(ecx);
|
| __ push(edx);
|
| __ push(eax);
|
|
|