| Index: src/code-stubs.cc
|
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc
|
| index 276c87ebd00a227f162ed93cf81770ddcce05830..c7d4c805d0c87824ecd1cbdb23afc49dfa710f02 100644
|
| --- a/src/code-stubs.cc
|
| +++ b/src/code-stubs.cc
|
| @@ -48,20 +48,6 @@ bool CodeStub::FindCodeInCache(Code** code_out, Isolate* isolate) {
|
| }
|
|
|
|
|
| -void CodeStub::GenerateCode(MacroAssembler* masm) {
|
| - // Update the static counter each time a new code stub is generated.
|
| - masm->isolate()->counters()->code_stubs()->Increment();
|
| -
|
| - // 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);
|
| -}
|
| -
|
| -
|
| SmartArrayPointer<const char> CodeStub::GetName() {
|
| char buffer[100];
|
| NoAllocationStringAllocator allocator(buffer,
|
| @@ -72,8 +58,7 @@ SmartArrayPointer<const char> CodeStub::GetName() {
|
| }
|
|
|
|
|
| -void CodeStub::RecordCodeGeneration(Code* code, MacroAssembler* masm) {
|
| - Isolate* isolate = masm->isolate();
|
| +void CodeStub::RecordCodeGeneration(Code* code, Isolate* isolate) {
|
| SmartArrayPointer<const char> name = GetName();
|
| PROFILE(isolate, CodeCreateEvent(Logger::STUB_TAG, code, *name));
|
| GDBJIT(AddCode(GDBJITInterface::STUB, *name, code));
|
| @@ -87,6 +72,39 @@ int CodeStub::GetCodeKind() {
|
| }
|
|
|
|
|
| +Handle<Code> PlatformCodeStub::GenerateCode() {
|
| + Isolate* isolate = Isolate::Current();
|
| + Factory* factory = isolate->factory();
|
| +
|
| + // Generate the new code.
|
| + MacroAssembler masm(isolate, NULL, 256);
|
| +
|
| + {
|
| + // Update the static counter each time a new code stub is generated.
|
| + isolate->counters()->code_stubs()->Increment();
|
| +
|
| + // 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);
|
| + }
|
| +
|
| + // Create the code object.
|
| + CodeDesc desc;
|
| + masm.GetCode(&desc);
|
| +
|
| + // Copy the generated code into a heap object.
|
| + Code::Flags flags = Code::ComputeFlags(
|
| + static_cast<Code::Kind>(GetCodeKind()), GetICState());
|
| + Handle<Code> new_object = factory->NewCode(
|
| + desc, flags, masm.CodeObject(), NeedsImmovableCode());
|
| + return new_object;
|
| +}
|
| +
|
| +
|
| Handle<Code> CodeStub::GetCode() {
|
| Isolate* isolate = Isolate::Current();
|
| Factory* factory = isolate->factory();
|
| @@ -102,23 +120,10 @@ Handle<Code> CodeStub::GetCode() {
|
| {
|
| HandleScope scope(isolate);
|
|
|
| - // Generate the new code.
|
| - MacroAssembler masm(isolate, NULL, 256);
|
| - GenerateCode(&masm);
|
| -
|
| - // Create the code object.
|
| - CodeDesc desc;
|
| - masm.GetCode(&desc);
|
| -
|
| - // Copy the generated code into a heap object.
|
| - Code::Flags flags = Code::ComputeFlags(
|
| - static_cast<Code::Kind>(GetCodeKind()),
|
| - GetICState());
|
| - Handle<Code> new_object = factory->NewCode(
|
| - desc, flags, masm.CodeObject(), NeedsImmovableCode());
|
| + Handle<Code> new_object = GenerateCode();
|
| new_object->set_major_key(MajorKey());
|
| FinishCode(new_object);
|
| - RecordCodeGeneration(*new_object, &masm);
|
| + RecordCodeGeneration(*new_object, isolate);
|
|
|
| #ifdef ENABLE_DISASSEMBLER
|
| if (FLAG_print_code_stubs) {
|
| @@ -416,36 +421,8 @@ void JSEntryStub::FinishCode(Handle<Code> code) {
|
| }
|
|
|
|
|
| -void KeyedLoadElementStub::Generate(MacroAssembler* masm) {
|
| - switch (elements_kind_) {
|
| - case FAST_ELEMENTS:
|
| - case FAST_HOLEY_ELEMENTS:
|
| - case FAST_SMI_ELEMENTS:
|
| - case FAST_HOLEY_SMI_ELEMENTS:
|
| - KeyedLoadStubCompiler::GenerateLoadFastElement(masm);
|
| - break;
|
| - case FAST_DOUBLE_ELEMENTS:
|
| - case FAST_HOLEY_DOUBLE_ELEMENTS:
|
| - KeyedLoadStubCompiler::GenerateLoadFastDoubleElement(masm);
|
| - break;
|
| - case EXTERNAL_BYTE_ELEMENTS:
|
| - case EXTERNAL_UNSIGNED_BYTE_ELEMENTS:
|
| - case EXTERNAL_SHORT_ELEMENTS:
|
| - case EXTERNAL_UNSIGNED_SHORT_ELEMENTS:
|
| - case EXTERNAL_INT_ELEMENTS:
|
| - case EXTERNAL_UNSIGNED_INT_ELEMENTS:
|
| - case EXTERNAL_FLOAT_ELEMENTS:
|
| - case EXTERNAL_DOUBLE_ELEMENTS:
|
| - case EXTERNAL_PIXEL_ELEMENTS:
|
| - KeyedLoadStubCompiler::GenerateLoadExternalArray(masm, elements_kind_);
|
| - break;
|
| - case DICTIONARY_ELEMENTS:
|
| - KeyedLoadStubCompiler::GenerateLoadDictionaryElement(masm);
|
| - break;
|
| - case NON_STRICT_ARGUMENTS_ELEMENTS:
|
| - UNREACHABLE();
|
| - break;
|
| - }
|
| +void KeyedLoadDictionaryElementStub::Generate(MacroAssembler* masm) {
|
| + KeyedLoadStubCompiler::GenerateLoadDictionaryElement(masm);
|
| }
|
|
|
|
|
|
|