WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
the patch
blah.patch (text/plain), 6.88 KB, created by
Filip Pizlo
on 2013-11-05 19:13:36 PST
(
hide
)
Description:
the patch
Filename:
MIME Type:
Creator:
Filip Pizlo
Created:
2013-11-05 19:13:36 PST
Size:
6.88 KB
patch
obsolete
>Index: Source/JavaScriptCore/ChangeLog >=================================================================== >--- Source/JavaScriptCore/ChangeLog (revision 158711) >+++ Source/JavaScriptCore/ChangeLog (working copy) >@@ -1,3 +1,21 @@ >+2013-11-05 Filip Pizlo <fpizlo@apple.com> >+ >+ FTL should support NewObject >+ https://bugs.webkit.org/show_bug.cgi?id=123849 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * ftl/FTLAbstractHeapRepository.cpp: >+ (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository): >+ * ftl/FTLAbstractHeapRepository.h: >+ * ftl/FTLCapabilities.cpp: >+ (JSC::FTL::canCompile): >+ * ftl/FTLIntrinsicRepository.h: >+ * ftl/FTLLowerDFGToLLVM.cpp: >+ (JSC::FTL::LowerDFGToLLVM::compileNode): >+ (JSC::FTL::LowerDFGToLLVM::compileNewObject): >+ (JSC::FTL::LowerDFGToLLVM::allocate): >+ > 2013-11-05 Filip Pizlo <fpizlo@apple.com> > > Remove old unused code for hypothetical LLVM intrinsics >Index: Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp >=================================================================== >--- Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp (revision 158707) >+++ Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp (working copy) >@@ -45,6 +45,8 @@ AbstractHeapRepository::AbstractHeapRepo > FOR_EACH_ABSTRACT_FIELD(ABSTRACT_FIELD_INITIALIZATION) > #undef ABSTRACT_FIELD_INITIALIZATION > >+ , JSCell_freeListNext(JSCell_structure) >+ > #define INDEXED_ABSTRACT_HEAP_INITIALIZATION(name, size) , name(context, &root, #name, size) > FOR_EACH_INDEXED_ABSTRACT_HEAP(INDEXED_ABSTRACT_HEAP_INITIALIZATION) > #undef INDEXED_ABSTRACT_HEAP_INITIALIZATION >@@ -61,6 +63,8 @@ AbstractHeapRepository::AbstractHeapRepo > > RELEASE_ASSERT(m_tbaaKind); > RELEASE_ASSERT(root.m_tbaaMetadata); >+ >+ RELEASE_ASSERT(!JSCell_freeListNext.offset()); > } > > AbstractHeapRepository::~AbstractHeapRepository() >Index: Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h >=================================================================== >--- Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h (revision 158707) >+++ Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h (working copy) >@@ -51,6 +51,7 @@ namespace JSC { namespace FTL { > macro(JSString_length, JSString::offsetOfLength()) \ > macro(JSString_value, JSString::offsetOfValue()) \ > macro(JSVariableObject_registers, JSVariableObject::offsetOfRegisters()) \ >+ macro(MarkedAllocator_freeListHead, MarkedAllocator::offsetOfFreeListHead()) \ > macro(StringImpl_data, StringImpl::dataOffset()) \ > macro(StringImpl_hashAndFlags, StringImpl::flagsOffset()) \ > macro(Structure_classInfo, Structure::classInfoOffset()) \ >@@ -90,6 +91,8 @@ public: > FOR_EACH_ABSTRACT_FIELD(ABSTRACT_FIELD_DECLARATION) > #undef ABSTRACT_FIELD_DECLARATION > >+ AbstractField& JSCell_freeListNext; >+ > #define INDEXED_ABSTRACT_HEAP_DECLARATION(name, size) IndexedAbstractHeap name; > FOR_EACH_INDEXED_ABSTRACT_HEAP(INDEXED_ABSTRACT_HEAP_DECLARATION) > #undef INDEXED_ABSTRACT_HEAP_DECLARATION >Index: Source/JavaScriptCore/ftl/FTLCapabilities.cpp >=================================================================== >--- Source/JavaScriptCore/ftl/FTLCapabilities.cpp (revision 158707) >+++ Source/JavaScriptCore/ftl/FTLCapabilities.cpp (working copy) >@@ -62,6 +62,7 @@ inline CapabilityLevel canCompile(Node* > case PutStructure: > case PhantomPutStructure: > case GetButterfly: >+ case NewObject: > case GetByOffset: > case PutByOffset: > case GetGlobalVar: >Index: Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h >=================================================================== >--- Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h (revision 158707) >+++ Source/JavaScriptCore/ftl/FTLIntrinsicRepository.h (working copy) >@@ -50,6 +50,7 @@ namespace JSC { namespace FTL { > macro(trap, "llvm.trap", functionType(voidType)) > > #define FOR_EACH_FUNCTION_TYPE(macro) \ >+ macro(C_JITOperation_ESt, functionType(intPtr, intPtr, intPtr)) \ > macro(I_JITOperation_EJss, functionType(intPtr, intPtr, intPtr)) \ > macro(J_JITOperation_E, functionType(int64, intPtr)) \ > macro(J_JITOperation_EJssZ, functionType(int64, intPtr, intPtr, int32)) \ >Index: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp >=================================================================== >--- Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (revision 158707) >+++ Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp (working copy) >@@ -365,6 +365,9 @@ private: > case PutByValAlias: > compilePutByVal(); > break; >+ case NewObject: >+ compileNewObject(); >+ break; > case GetByOffset: > compileGetByOffset(); > break; >@@ -1802,6 +1805,32 @@ private: > } > } > >+ void compileNewObject() >+ { >+ Structure* structure = m_node->structure(); >+ size_t allocationSize = JSFinalObject::allocationSize(structure->inlineCapacity()); >+ MarkedAllocator* allocator = &vm().heap.allocatorForObjectWithoutDestructor(allocationSize); >+ >+ LBasicBlock slowPath = FTL_NEW_BLOCK(m_out, ("NewObject slow path")); >+ LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("NewObject continuation")); >+ >+ LBasicBlock lastNext = m_out.insertNewBlocksBefore(slowPath); >+ >+ ValueFromBlock fastResult = m_out.anchor(allocate( >+ m_out.constIntPtr(allocator), m_out.constIntPtr(structure), m_out.intPtrZero, slowPath)); >+ >+ m_out.jump(continuation); >+ >+ m_out.appendTo(slowPath, continuation); >+ >+ ValueFromBlock slowResult = m_out.anchor(vmCall( >+ m_out.operation(operationNewObject), m_callFrame, m_out.constIntPtr(structure))); >+ m_out.jump(continuation); >+ >+ m_out.appendTo(continuation, lastNext); >+ setJSValue(m_out.phi(m_out.intPtr, fastResult, slowResult)); >+ } >+ > void compileGetByOffset() > { > StorageAccessData& data = >@@ -2282,6 +2311,28 @@ private: > info.m_isInvalidationPoint = true; > } > >+ LValue allocate( >+ LValue allocator, LValue structure, LValue butterfly, LBasicBlock slowPath) >+ { >+ LBasicBlock success = FTL_NEW_BLOCK(m_out, ("allocation success")); >+ >+ LValue result = m_out.loadPtr( >+ allocator, m_heaps.MarkedAllocator_freeListHead); >+ >+ m_out.branch(m_out.notNull(result), success, slowPath); >+ >+ m_out.appendTo(success); >+ >+ m_out.storePtr( >+ m_out.loadPtr(result, m_heaps.JSCell_freeListNext), >+ allocator, m_heaps.MarkedAllocator_freeListHead); >+ >+ m_out.storePtr(structure, result, m_heaps.JSCell_structure); >+ m_out.storePtr(butterfly, result, m_heaps.JSObject_butterfly); >+ >+ return result; >+ } >+ > LValue boolify(Edge edge) > { > switch (edge.useKind()) {
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
oliver
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 123849
: 216109