| Index: src/code-stubs.cc
|
| ===================================================================
|
| --- src/code-stubs.cc (revision 9531)
|
| +++ src/code-stubs.cc (working copy)
|
| @@ -52,11 +52,12 @@
|
| // Update the static counter each time a new code stub is generated.
|
| masm->isolate()->counters()->code_stubs()->Increment();
|
|
|
| - // Nested stubs are not allowed for leafs.
|
| - AllowStubCallsScope allow_scope(masm, AllowsStubCalls());
|
| + // Nested stubs are not allowed for leaves.
|
| + AllowStubCallsScope allow_scope(masm, false);
|
|
|
| // Generate the code for the stub.
|
| masm->set_generating_stub(true);
|
| + NoCurrentFrameScope scope(masm);
|
| Generate(masm);
|
| }
|
|
|
| @@ -127,8 +128,10 @@
|
| GetKey(),
|
| new_object);
|
| heap->public_set_code_stubs(*dict);
|
| -
|
| code = *new_object;
|
| + Activate(code);
|
| + } else {
|
| + CHECK(IsPregenerated() == code->is_pregenerated());
|
| }
|
|
|
| ASSERT(!NeedsImmovableCode() || heap->lo_space()->Contains(code));
|
| @@ -166,7 +169,11 @@
|
| heap->code_stubs()->AtNumberPut(GetKey(), code);
|
| if (maybe_new_object->ToObject(&new_object)) {
|
| heap->public_set_code_stubs(NumberDictionary::cast(new_object));
|
| + } else if (MustBeInStubCache()) {
|
| + return maybe_new_object;
|
| }
|
| +
|
| + Activate(code);
|
| }
|
|
|
| return code;
|
| @@ -188,6 +195,11 @@
|
| }
|
|
|
|
|
| +void CodeStub::PrintName(StringStream* stream) {
|
| + stream->Add("%s", MajorName(MajorKey(), false));
|
| +}
|
| +
|
| +
|
| int ICCompareStub::MinorKey() {
|
| return OpField::encode(op_ - Token::EQ) | StateField::encode(state_);
|
| }
|
| @@ -245,6 +257,7 @@
|
| void KeyedLoadElementStub::Generate(MacroAssembler* masm) {
|
| switch (elements_kind_) {
|
| case FAST_ELEMENTS:
|
| + case FAST_SMI_ONLY_ELEMENTS:
|
| KeyedLoadStubCompiler::GenerateLoadFastElement(masm);
|
| break;
|
| case FAST_DOUBLE_ELEMENTS:
|
| @@ -274,7 +287,11 @@
|
| void KeyedStoreElementStub::Generate(MacroAssembler* masm) {
|
| switch (elements_kind_) {
|
| case FAST_ELEMENTS:
|
| - KeyedStoreStubCompiler::GenerateStoreFastElement(masm, is_js_array_);
|
| + case FAST_SMI_ONLY_ELEMENTS: {
|
| + KeyedStoreStubCompiler::GenerateStoreFastElement(masm,
|
| + is_js_array_,
|
| + elements_kind_);
|
| + }
|
| break;
|
| case FAST_DOUBLE_ELEMENTS:
|
| KeyedStoreStubCompiler::GenerateStoreFastDoubleElement(masm,
|
| @@ -302,24 +319,20 @@
|
|
|
|
|
| void ArgumentsAccessStub::PrintName(StringStream* stream) {
|
| - const char* type_name = NULL; // Make g++ happy.
|
| + stream->Add("ArgumentsAccessStub_");
|
| switch (type_) {
|
| - case READ_ELEMENT: type_name = "ReadElement"; break;
|
| - case NEW_NON_STRICT_FAST: type_name = "NewNonStrictFast"; break;
|
| - case NEW_NON_STRICT_SLOW: type_name = "NewNonStrictSlow"; break;
|
| - case NEW_STRICT: type_name = "NewStrict"; break;
|
| + case READ_ELEMENT: stream->Add("ReadElement"); break;
|
| + case NEW_NON_STRICT_FAST: stream->Add("NewNonStrictFast"); break;
|
| + case NEW_NON_STRICT_SLOW: stream->Add("NewNonStrictSlow"); break;
|
| + case NEW_STRICT: stream->Add("NewStrict"); break;
|
| }
|
| - stream->Add("ArgumentsAccessStub_%s", type_name);
|
| }
|
|
|
|
|
| void CallFunctionStub::PrintName(StringStream* stream) {
|
| - const char* flags_name = NULL; // Make g++ happy.
|
| - switch (flags_) {
|
| - case NO_CALL_FUNCTION_FLAGS: flags_name = ""; break;
|
| - case RECEIVER_MIGHT_BE_IMPLICIT: flags_name = "_Implicit"; break;
|
| - }
|
| - stream->Add("CallFunctionStub_Args%d%s", argc_, flags_name);
|
| + stream->Add("CallFunctionStub_Args%d", argc_);
|
| + if (ReceiverMightBeImplicit()) stream->Add("_Implicit");
|
| + if (RecordCallTarget()) stream->Add("_Recording");
|
| }
|
|
|
|
|
|
|