|
| 1 | +2018-09-21 Yusuke Suzuki <yusukesuzuki@slowstart.org> |
| 2 | + |
| 3 | + [JSC] Enable LLInt ASM interpreter on X64 and ARM64 in non JIT configuration |
| 4 | + https://bugs.webkit.org/show_bug.cgi?id=189778 |
| 5 | + |
| 6 | + Reviewed by Keith Miller. |
| 7 | + |
| 8 | + LLInt ASM interpreter is 2x and 15% faster than CLoop interpreter on |
| 9 | + Linux and macOS respectively. We would like to enable it for non JIT |
| 10 | + configurations in X86_64 and ARM64. |
| 11 | + |
| 12 | + This patch enables LLInt for non JIT builds in X86_64 and ARM64 architectures. |
| 13 | + Previously, we switch LLInt ASM interpreter and CLoop by using ENABLE(JIT) |
| 14 | + configuration. But it is wrong in the new scenario since we have a build |
| 15 | + configuration that uses LLInt ASM interpreter and JIT is disabled. We introduce |
| 16 | + ENABLE(C_LOOP) option, which represents that we use CLoop. And we replace |
| 17 | + ENABLE(JIT) with ENABLE(C_LOOP) if the previous ENABLE(JIT) is essentially just |
| 18 | + related to LLInt ASM interpreter and not related to JIT. |
| 19 | + |
| 20 | + We also replace some ENABLE(JIT) configurations with ENABLE(ASSEMBLER). |
| 21 | + ENABLE(ASSEMBLER) is now enabled even if we disable JIT since MacroAssembler |
| 22 | + has machine register information that is used in LLInt ASM interpreter. |
| 23 | + |
| 24 | + * API/tests/PingPongStackOverflowTest.cpp: |
| 25 | + (testPingPongStackOverflow): |
| 26 | + * CMakeLists.txt: |
| 27 | + * JavaScriptCore.xcodeproj/project.pbxproj: |
| 28 | + * assembler/MaxFrameExtentForSlowPathCall.h: |
| 29 | + * bytecode/CallReturnOffsetToBytecodeOffset.h: Removed. It is no longer used. |
| 30 | + * bytecode/CodeBlock.cpp: |
| 31 | + (JSC::CodeBlock::finishCreation): |
| 32 | + * bytecode/CodeBlock.h: |
| 33 | + (JSC::CodeBlock::calleeSaveRegisters const): |
| 34 | + (JSC::CodeBlock::numberOfLLIntBaselineCalleeSaveRegisters): |
| 35 | + (JSC::CodeBlock::llintBaselineCalleeSaveSpaceAsVirtualRegisters): |
| 36 | + (JSC::CodeBlock::calleeSaveSpaceAsVirtualRegisters): |
| 37 | + * bytecode/Opcode.h: |
| 38 | + (JSC::padOpcodeName): |
| 39 | + * heap/Heap.cpp: |
| 40 | + (JSC::Heap::gatherJSStackRoots): |
| 41 | + (JSC::Heap::stopThePeriphery): |
| 42 | + * interpreter/CLoopStack.cpp: |
| 43 | + * interpreter/CLoopStack.h: |
| 44 | + * interpreter/CLoopStackInlines.h: |
| 45 | + * interpreter/EntryFrame.h: |
| 46 | + * interpreter/Interpreter.cpp: |
| 47 | + (JSC::Interpreter::Interpreter): |
| 48 | + (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const): |
| 49 | + * interpreter/Interpreter.h: |
| 50 | + * interpreter/StackVisitor.cpp: |
| 51 | + (JSC::StackVisitor::Frame::calleeSaveRegisters): |
| 52 | + * interpreter/VMEntryRecord.h: |
| 53 | + * jit/ExecutableAllocator.h: |
| 54 | + * jit/FPRInfo.h: |
| 55 | + (WTF::printInternal): |
| 56 | + * jit/GPRInfo.cpp: |
| 57 | + * jit/GPRInfo.h: |
| 58 | + (WTF::printInternal): |
| 59 | + * jit/HostCallReturnValue.cpp: |
| 60 | + (JSC::getHostCallReturnValueWithExecState): Moved. They are used in LLInt ASM interpreter too. |
| 61 | + * jit/HostCallReturnValue.h: |
| 62 | + * jit/JITOperations.cpp: |
| 63 | + (JSC::getHostCallReturnValueWithExecState): Deleted. |
| 64 | + * jit/JITOperationsMSVC64.cpp: |
| 65 | + * jit/Reg.cpp: |
| 66 | + * jit/Reg.h: |
| 67 | + * jit/RegisterAtOffset.cpp: |
| 68 | + * jit/RegisterAtOffset.h: |
| 69 | + * jit/RegisterAtOffsetList.cpp: |
| 70 | + * jit/RegisterAtOffsetList.h: |
| 71 | + * jit/RegisterMap.h: |
| 72 | + * jit/RegisterSet.cpp: |
| 73 | + * jit/RegisterSet.h: |
| 74 | + * jit/TempRegisterSet.cpp: |
| 75 | + * jit/TempRegisterSet.h: |
| 76 | + * llint/LLIntCLoop.cpp: |
| 77 | + * llint/LLIntCLoop.h: |
| 78 | + * llint/LLIntData.cpp: |
| 79 | + (JSC::LLInt::initialize): |
| 80 | + (JSC::LLInt::Data::performAssertions): |
| 81 | + * llint/LLIntData.h: |
| 82 | + * llint/LLIntOfflineAsmConfig.h: |
| 83 | + * llint/LLIntOpcode.h: |
| 84 | + * llint/LLIntPCRanges.h: |
| 85 | + * llint/LLIntSlowPaths.cpp: |
| 86 | + (JSC::LLInt::LLINT_SLOW_PATH_DECL): |
| 87 | + * llint/LLIntSlowPaths.h: |
| 88 | + * llint/LLIntThunks.cpp: |
| 89 | + * llint/LowLevelInterpreter.cpp: |
| 90 | + * llint/LowLevelInterpreter.h: |
| 91 | + * runtime/JSCJSValue.h: |
| 92 | + * runtime/MachineContext.h: |
| 93 | + * runtime/SamplingProfiler.cpp: |
| 94 | + (JSC::SamplingProfiler::processUnverifiedStackTraces): Enable SamplingProfiler |
| 95 | + for LLInt ASM interpreter with non JIT configuration. |
| 96 | + * runtime/TestRunnerUtils.cpp: |
| 97 | + (JSC::optimizeNextInvocation): |
| 98 | + * runtime/VM.cpp: |
| 99 | + (JSC::VM::VM): |
| 100 | + (JSC::VM::getHostFunction): |
| 101 | + (JSC::VM::updateSoftReservedZoneSize): |
| 102 | + (JSC::sanitizeStackForVM): |
| 103 | + (JSC::VM::committedStackByteCount): |
| 104 | + * runtime/VM.h: |
| 105 | + * runtime/VMInlines.h: |
| 106 | + (JSC::VM::ensureStackCapacityFor): |
| 107 | + (JSC::VM::isSafeToRecurseSoft const): |
| 108 | + |
1 | 109 | 2018-09-21 Keith Miller <keith_miller@apple.com> |
2 | 110 |
|
3 | 111 | Add Promise SPI |
|
0 commit comments