diff options
| author | Ben Murdoch <benm@google.com> | 2011-12-02 17:19:32 +0000 |
|---|---|---|
| committer | Ben Murdoch <benm@google.com> | 2011-12-02 17:27:49 +0000 |
| commit | 3fb3ca8c7ca439d408449a395897395c0faae8d1 (patch) | |
| tree | 5cb33db083ae7ebe431e2a460fb3806c54531f9c /src/code-stubs.cc | |
| parent | 257744e915dfc84d6d07a6b2accf8402d9ffc708 (diff) | |
| download | android_external_v8-3fb3ca8c7ca439d408449a395897395c0faae8d1.tar.gz android_external_v8-3fb3ca8c7ca439d408449a395897395c0faae8d1.tar.bz2 android_external_v8-3fb3ca8c7ca439d408449a395897395c0faae8d1.zip | |
Upgrade to V8 3.4
Merge 3.4.14.35
Simple merge required updates to makefiles only.
Bug: 568872
Change-Id: I403a38452c547e06fcfa951c12eca12a1bc40978
Diffstat (limited to 'src/code-stubs.cc')
| -rw-r--r-- | src/code-stubs.cc | 123 |
1 files changed, 94 insertions, 29 deletions
diff --git a/src/code-stubs.cc b/src/code-stubs.cc index d12def85..1d1128f2 100644 --- a/src/code-stubs.cc +++ b/src/code-stubs.cc @@ -61,21 +61,29 @@ void CodeStub::GenerateCode(MacroAssembler* masm) { } +SmartPointer<const char> CodeStub::GetName() { + char buffer[100]; + NoAllocationStringAllocator allocator(buffer, + static_cast<unsigned>(sizeof(buffer))); + StringStream stream(&allocator); + PrintName(&stream); + return stream.ToCString(); +} + + void CodeStub::RecordCodeGeneration(Code* code, MacroAssembler* masm) { code->set_major_key(MajorKey()); Isolate* isolate = masm->isolate(); - PROFILE(isolate, CodeCreateEvent(Logger::STUB_TAG, code, GetName())); - GDBJIT(AddCode(GDBJITInterface::STUB, GetName(), code)); + SmartPointer<const char> name = GetName(); + PROFILE(isolate, CodeCreateEvent(Logger::STUB_TAG, code, *name)); + GDBJIT(AddCode(GDBJITInterface::STUB, *name, code)); Counters* counters = isolate->counters(); counters->total_stubs_code_size()->Increment(code->instruction_size()); #ifdef ENABLE_DISASSEMBLER if (FLAG_print_code_stubs) { -#ifdef DEBUG - Print(); -#endif - code->Disassemble(GetName()); + code->Disassemble(*name); PrintF("\n"); } #endif @@ -170,7 +178,7 @@ MaybeObject* CodeStub::TryGetCode() { const char* CodeStub::MajorName(CodeStub::Major major_key, bool allow_unknown_keys) { switch (major_key) { -#define DEF_CASE(name) case name: return #name; +#define DEF_CASE(name) case name: return #name "Stub"; CODE_STUB_LIST(DEF_CASE) #undef DEF_CASE default: @@ -213,13 +221,7 @@ void ICCompareStub::Generate(MacroAssembler* masm) { } -const char* InstanceofStub::GetName() { - if (name_ != NULL) return name_; - const int kMaxNameLength = 100; - name_ = Isolate::Current()->bootstrapper()->AllocateAutoDeletedArray( - kMaxNameLength); - if (name_ == NULL) return "OOM"; - +void InstanceofStub::PrintName(StringStream* stream) { const char* args = ""; if (HasArgsInRegisters()) { args = "_REGS"; @@ -235,33 +237,96 @@ const char* InstanceofStub::GetName() { return_true_false_object = "_TRUEFALSE"; } - OS::SNPrintF(Vector<char>(name_, kMaxNameLength), - "InstanceofStub%s%s%s", - args, - inline_check, - return_true_false_object); - return name_; + stream->Add("InstanceofStub%s%s%s", + args, + inline_check, + return_true_false_object); } -void KeyedLoadFastElementStub::Generate(MacroAssembler* masm) { - KeyedLoadStubCompiler::GenerateLoadFastElement(masm); +void KeyedLoadElementStub::Generate(MacroAssembler* masm) { + switch (elements_kind_) { + case JSObject::FAST_ELEMENTS: + KeyedLoadStubCompiler::GenerateLoadFastElement(masm); + break; + case JSObject::FAST_DOUBLE_ELEMENTS: + KeyedLoadStubCompiler::GenerateLoadFastDoubleElement(masm); + break; + case JSObject::EXTERNAL_BYTE_ELEMENTS: + case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: + case JSObject::EXTERNAL_SHORT_ELEMENTS: + case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: + case JSObject::EXTERNAL_INT_ELEMENTS: + case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: + case JSObject::EXTERNAL_FLOAT_ELEMENTS: + case JSObject::EXTERNAL_DOUBLE_ELEMENTS: + case JSObject::EXTERNAL_PIXEL_ELEMENTS: + KeyedLoadStubCompiler::GenerateLoadExternalArray(masm, elements_kind_); + break; + case JSObject::DICTIONARY_ELEMENTS: + KeyedLoadStubCompiler::GenerateLoadDictionaryElement(masm); + break; + case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: + UNREACHABLE(); + break; + } } -void KeyedStoreFastElementStub::Generate(MacroAssembler* masm) { - KeyedStoreStubCompiler::GenerateStoreFastElement(masm, is_js_array_); +void KeyedStoreElementStub::Generate(MacroAssembler* masm) { + switch (elements_kind_) { + case JSObject::FAST_ELEMENTS: + KeyedStoreStubCompiler::GenerateStoreFastElement(masm, is_js_array_); + break; + case JSObject::FAST_DOUBLE_ELEMENTS: + KeyedStoreStubCompiler::GenerateStoreFastDoubleElement(masm, + is_js_array_); + break; + case JSObject::EXTERNAL_BYTE_ELEMENTS: + case JSObject::EXTERNAL_UNSIGNED_BYTE_ELEMENTS: + case JSObject::EXTERNAL_SHORT_ELEMENTS: + case JSObject::EXTERNAL_UNSIGNED_SHORT_ELEMENTS: + case JSObject::EXTERNAL_INT_ELEMENTS: + case JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS: + case JSObject::EXTERNAL_FLOAT_ELEMENTS: + case JSObject::EXTERNAL_DOUBLE_ELEMENTS: + case JSObject::EXTERNAL_PIXEL_ELEMENTS: + KeyedStoreStubCompiler::GenerateStoreExternalArray(masm, elements_kind_); + break; + case JSObject::DICTIONARY_ELEMENTS: + KeyedStoreStubCompiler::GenerateStoreDictionaryElement(masm); + break; + case JSObject::NON_STRICT_ARGUMENTS_ELEMENTS: + UNREACHABLE(); + break; + } } -void KeyedLoadExternalArrayStub::Generate(MacroAssembler* masm) { - KeyedLoadStubCompiler::GenerateLoadExternalArray(masm, array_type_); +void ArgumentsAccessStub::PrintName(StringStream* stream) { + const char* type_name = NULL; // Make g++ happy. + 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; + } + stream->Add("ArgumentsAccessStub_%s", type_name); } -void KeyedStoreExternalArrayStub::Generate(MacroAssembler* masm) { - KeyedStoreStubCompiler::GenerateStoreExternalArray(masm, array_type_); +void CallFunctionStub::PrintName(StringStream* stream) { + const char* in_loop_name = NULL; // Make g++ happy. + switch (in_loop_) { + case NOT_IN_LOOP: in_loop_name = ""; break; + case IN_LOOP: in_loop_name = "_InLoop"; break; + } + 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%s", argc_, in_loop_name, flags_name); } - } } // namespace v8::internal |
