Changeset 228727 in webkit
- Timestamp:
- Feb 19, 2018 8:33:33 PM (6 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r228726 r228727 1 2018-02-14 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 [FTL] Support ArrayPop for ArrayStorage 4 https://bugs.webkit.org/show_bug.cgi?id=182783 5 6 Reviewed by Saam Barati. 7 8 * stress/array-pop-array-storage.js: Added. 9 (shouldBe): 10 (test): 11 1 12 2018-02-14 Yusuke Suzuki <utatane.tea@gmail.com> 2 13 -
trunk/Source/JavaScriptCore/ChangeLog
r228726 r228727 1 2018-02-14 Yusuke Suzuki <utatane.tea@gmail.com> 2 3 [FTL] Support ArrayPop for ArrayStorage 4 https://bugs.webkit.org/show_bug.cgi?id=182783 5 6 Reviewed by Saam Barati. 7 8 This patch adds ArrayPop(ArrayStorage) support to FTL. We port the implementation in DFG to FTL. 9 10 * ftl/FTLAbstractHeapRepository.h: 11 * ftl/FTLCapabilities.cpp: 12 (JSC::FTL::canCompile): 13 * ftl/FTLLowerDFGToB3.cpp: 14 (JSC::FTL::DFG::LowerDFGToB3::compileArrayPop): 15 1 16 2018-02-14 Yusuke Suzuki <utatane.tea@gmail.com> 2 17 -
trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h
r227874 r228727 46 46 #define FOR_EACH_ABSTRACT_FIELD(macro) \ 47 47 macro(ArrayBuffer_data, ArrayBuffer::offsetOfData()) \ 48 macro(ArrayStorage_numValuesInVector, ArrayStorage::numValuesInVectorOffset()) \ 48 49 macro(Butterfly_arrayBuffer, Butterfly::offsetOfArrayBuffer()) \ 49 50 macro(Butterfly_publicLength, Butterfly::offsetOfPublicLength()) \ -
trunk/Source/JavaScriptCore/ftl/FTLCapabilities.cpp
r228726 r228727 319 319 case ArraySlice: 320 320 case ArrayIndexOf: 321 case ArrayPop: 321 322 case ParseInt: 322 323 case AtomicsAdd: … … 438 439 break; 439 440 case ArrayPush: 440 case ArrayPop:441 441 switch (node->arrayMode().type()) { 442 442 case Array::Int32: -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r228726 r228727 4744 4744 m_out.jump(continuation); 4745 4745 4746 m_out.appendTo(continuation, lastNext); 4747 setJSValue(m_out.phi(Int64, results)); 4748 return; 4749 } 4750 4751 case Array::ArrayStorage: { 4752 LBasicBlock vectorLengthCheckCase = m_out.newBlock(); 4753 LBasicBlock popCheckCase = m_out.newBlock(); 4754 LBasicBlock fastCase = m_out.newBlock(); 4755 LBasicBlock slowCase = m_out.newBlock(); 4756 LBasicBlock continuation = m_out.newBlock(); 4757 4758 LValue prevLength = m_out.load32(storage, m_heaps.Butterfly_publicLength); 4759 4760 Vector<ValueFromBlock, 3> results; 4761 results.append(m_out.anchor(m_out.constInt64(JSValue::encode(jsUndefined())))); 4762 m_out.branch( 4763 m_out.isZero32(prevLength), rarely(continuation), usually(vectorLengthCheckCase)); 4764 4765 LBasicBlock lastNext = m_out.appendTo(vectorLengthCheckCase, popCheckCase); 4766 LValue newLength = m_out.sub(prevLength, m_out.int32One); 4767 m_out.branch( 4768 m_out.aboveOrEqual(newLength, m_out.load32(storage, m_heaps.Butterfly_vectorLength)), rarely(slowCase), usually(popCheckCase)); 4769 4770 m_out.appendTo(popCheckCase, fastCase); 4771 TypedPointer pointer = m_out.baseIndex(m_heaps.ArrayStorage_vector, storage, m_out.zeroExtPtr(newLength)); 4772 LValue result = m_out.load64(pointer); 4773 m_out.branch(m_out.notZero64(result), usually(fastCase), rarely(slowCase)); 4774 4775 m_out.appendTo(fastCase, slowCase); 4776 m_out.store32(newLength, storage, m_heaps.Butterfly_publicLength); 4777 m_out.store64(m_out.int64Zero, pointer); 4778 m_out.store32( 4779 m_out.sub(m_out.load32(storage, m_heaps.ArrayStorage_numValuesInVector), m_out.int32One), 4780 storage, m_heaps.ArrayStorage_numValuesInVector); 4781 results.append(m_out.anchor(result)); 4782 m_out.jump(continuation); 4783 4784 m_out.appendTo(slowCase, continuation); 4785 results.append(m_out.anchor(vmCall( 4786 Int64, m_out.operation(operationArrayPop), m_callFrame, base))); 4787 m_out.jump(continuation); 4788 4746 4789 m_out.appendTo(continuation, lastNext); 4747 4790 setJSValue(m_out.phi(Int64, results));
Note: See TracChangeset
for help on using the changeset viewer.