• mhahnenberg@apple.com's avatar
    Implement fast path for op_new_array in the baseline JIT · 87ff87df
    mhahnenberg@apple.com authored
    https://bugs.webkit.org/show_bug.cgi?id=78612
    
    Reviewed by Filip Pizlo.
    
    heap/CopiedAllocator.h:
    (CopiedAllocator): Friended the JIT to allow access to m_currentOffset.
    * heap/CopiedSpace.h:
    (CopiedSpace): Friended the JIT to allow access to isOversize.
    (JSC::CopiedSpace::allocator):
    * heap/Heap.h:
    (JSC::Heap::storageAllocator): Added a getter for the CopiedAllocator class so the JIT
    can use it for simple allocation i.e. when we can just bump the offset without having to 
    do anything else.
    * jit/JIT.cpp:
    (JSC::JIT::privateCompileSlowCases): Added new slow case for op_new_array for when
    we have to bail out because the fast allocation path fails for whatever reason.
    * jit/JIT.h:
    (JIT):
    * jit/JITInlineMethods.h:
    (JSC::JIT::emitAllocateBasicStorage): Added utility function that allows objects to 
    allocate generic backing stores. This function is used by emitAllocateJSArray.
    (JSC):
    (JSC::JIT::emitAllocateJSArray): Added utility function that allows the client to 
    more easily allocate JSArrays. This function is used by emit_op_new_array and I expect 
    it will also be used for emit_op_new_array_buffer.
    * jit/JITOpcodes.cpp:
    (JSC::JIT::emit_op_new_array): Changed to do inline allocation of JSArrays. Still does 
    a stub call for oversize arrays.
    (JSC):
    (JSC::JIT::emitSlow_op_new_array): New slow path that just bails out to a stub call if we 
    fail in any way on the fast path.
    * runtime/JSArray.cpp:
    (JSC):
    * runtime/JSArray.h: Added lots of offset functions for all the fields that we need to 
    initialize in the JIT.
    (ArrayStorage):
    (JSC::ArrayStorage::lengthOffset):
    (JSC::ArrayStorage::numValuesInVectorOffset):
    (JSC::ArrayStorage::allocBaseOffset):
    (JSC::ArrayStorage::vectorOffset):
    (JSArray):
    (JSC::JSArray::sparseValueMapOffset):
    (JSC::JSArray::subclassDataOffset):
    (JSC::JSArray::indexBiasOffset):
    (JSC):
    (JSC::JSArray::storageSize): Moved this function from being a static function in the cpp file
    to being a static function in the JSArray class. This move allows the JIT to call it to 
    see what size it should allocate.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@108934 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    87ff87df
JSArray.cpp 70.4 KB