Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f20f57564cef1db2c274f57754a5c90ec1af6a22
https://github.com/WebKit/WebKit/commit/f20f57564cef1db2c274f57754a5c90ec1af6a22
Author: Yusuke Suzuki <[email protected]>
Date: 2024-08-06 (Tue, 06 Aug 2024)
Changed paths:
M JSTests/stress/array-message-passing.js
M JSTests/stress/call-non-calleable-constructors-as-function.js
M JSTests/stress/construct-typed-array-without-new-in-dfg-and-ftl.js
M JSTests/stress/istypedarrayview-intrinsic.js
M JSTests/stress/reflect-set.js
M JSTests/stress/resources/standalone-pre.js
M JSTests/stress/resources/typedarray-constructor-helper-functions.js
M JSTests/stress/resources/typedarray-test-helper-functions.js
M JSTests/stress/resources/v8-typedarray-helpers.js
M JSTests/stress/typed-array-canonical-numeric-index-string.js
M JSTests/stress/typed-array-sort-small.js
M JSTests/stress/typedarray-access-monomorphic-neutered.js
M JSTests/stress/typedarray-access-neutered.js
M JSTests/stress/typedarray-configure-index.js
M JSTests/stress/typedarray-getownproperty.js
M JSTests/stress/typedarray-join.js
M JSTests/stress/typedarray-view-string-properties-neutered.js
A JSTests/stress/v8-float16-array-next.js
A JSTests/stress/v8-float16-array.js
M JSTests/stress/v8-harmony-typed-array-with.js
M Source/JavaScriptCore/assembler/ARM64Assembler.h
M Source/JavaScriptCore/assembler/MacroAssemblerARM64.cpp
M Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
M Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h
M Source/JavaScriptCore/assembler/MacroAssemblerRISCV64.h
M Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h
M Source/JavaScriptCore/bytecode/AccessCase.cpp
M Source/JavaScriptCore/bytecode/AccessCase.h
M Source/JavaScriptCore/bytecode/InlineCacheCompiler.cpp
M Source/JavaScriptCore/bytecode/Repatch.cpp
M Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
M Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp
M Source/JavaScriptCore/dfg/DFGCSEPhase.cpp
M Source/JavaScriptCore/dfg/DFGClobberize.h
M Source/JavaScriptCore/dfg/DFGDoesGC.cpp
M Source/JavaScriptCore/dfg/DFGFixupPhase.cpp
M Source/JavaScriptCore/dfg/DFGMayExit.cpp
M Source/JavaScriptCore/dfg/DFGNode.h
M Source/JavaScriptCore/dfg/DFGNodeType.h
M Source/JavaScriptCore/dfg/DFGOperations.cpp
M Source/JavaScriptCore/dfg/DFGOperations.h
M Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp
M Source/JavaScriptCore/dfg/DFGSafeToExecute.h
M Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
M Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
M Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
M Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
M Source/JavaScriptCore/ftl/FTLCapabilities.cpp
M Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
M Source/JavaScriptCore/ftl/FTLOutput.cpp
M Source/JavaScriptCore/ftl/FTLOutput.h
M Source/JavaScriptCore/runtime/Intrinsic.h
M Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp
M Source/JavaScriptCore/runtime/MathObject.cpp
M Source/WTF/wtf/PlatformHave.h
Log Message:
-----------
[JSC] Add JIT support for Float16Array
https://bugs.webkit.org/show_bug.cgi?id=277672
rdar://133271787
Reviewed by Keith Miller.
This patch implements JIT optimizations for Float16Array. Right now it is only
enabled for
ARM64 since ARM v8.3 has half-float native CPU instructions. But we could
extend it further
with newer instruction set.
Right now, we are not showing Float16 in B3 pipeline, and we are always convert
it to Double via patchpoint.
In the future, we should add Float16 type into B3 as a first-citizen and
support various Float16 instructions
in B3 opcodes. But for JS, it is not so important.
* JSTests/stress/array-message-passing.js:
* JSTests/stress/call-non-calleable-constructors-as-function.js:
* JSTests/stress/construct-typed-array-without-new-in-dfg-and-ftl.js:
* JSTests/stress/istypedarrayview-intrinsic.js:
* JSTests/stress/reflect-set.js:
(set get Uint8Array):
* JSTests/stress/resources/standalone-pre.js:
(isTypedArray):
* JSTests/stress/resources/typedarray-constructor-helper-functions.js:
* JSTests/stress/resources/typedarray-test-helper-functions.js:
* JSTests/stress/resources/v8-typedarray-helpers.js:
* JSTests/stress/typed-array-canonical-numeric-index-string.js:
* JSTests/stress/typed-array-sort-small.js:
(shouldBe):
* JSTests/stress/typedarray-access-monomorphic-neutered.js:
* JSTests/stress/typedarray-access-neutered.js:
* JSTests/stress/typedarray-configure-index.js:
* JSTests/stress/typedarray-getownproperty.js:
* JSTests/stress/typedarray-join.js:
* JSTests/stress/typedarray-view-string-properties-neutered.js:
* JSTests/stress/v8-float16-array-next.js: Added.
(f):
* JSTests/stress/v8-float16-array.js: Added.
(storeAndLoad):
(assertAlmostEquals):
(0.3.const.copied.new.Float32Array.source):
* Source/JavaScriptCore/assembler/ARM64Assembler.h:
* Source/JavaScriptCore/assembler/MacroAssemblerARM64.cpp:
(JSC::MacroAssemblerARM64::collectCPUFeatures):
* Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::convertDoubleToFloat16):
(JSC::MacroAssemblerARM64::convertFloat16ToDouble):
(JSC::MacroAssemblerARM64::loadFloat16):
(JSC::MacroAssemblerARM64::moveZeroToFloat16):
(JSC::MacroAssemblerARM64::moveFloat16To16):
(JSC::MacroAssemblerARM64::move16ToFloat16):
(JSC::MacroAssemblerARM64::storeFloat16):
(JSC::MacroAssemblerARM64::supportsFloat16):
* Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::supportsFloat16):
(JSC::MacroAssemblerARMv7::convertDoubleToFloat16):
(JSC::MacroAssemblerARMv7::convertFloat16ToDouble):
(JSC::MacroAssemblerARMv7::loadFloat16):
(JSC::MacroAssemblerARMv7::moveZeroToFloat16):
(JSC::MacroAssemblerARMv7::move16ToFloat16):
(JSC::MacroAssemblerARMv7::moveFloat16To16):
(JSC::MacroAssemblerARMv7::storeFloat16):
* Source/JavaScriptCore/assembler/MacroAssemblerRISCV64.h:
(JSC::MacroAssemblerRISCV64::supportsFloat16):
(JSC::MacroAssemblerRISCV64::convertDoubleToFloat16):
(JSC::MacroAssemblerRISCV64::convertFloat16ToDouble):
(JSC::MacroAssemblerRISCV64::loadFloat16):
(JSC::MacroAssemblerRISCV64::moveZeroToFloat16):
(JSC::MacroAssemblerRISCV64::move16ToFloat16):
(JSC::MacroAssemblerRISCV64::moveFloat16To16):
(JSC::MacroAssemblerRISCV64::storeFloat16):
* Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::convertDoubleToFloat16):
(JSC::MacroAssemblerX86_64::convertFloat16ToDouble):
(JSC::MacroAssemblerX86_64::loadFloat16):
(JSC::MacroAssemblerX86_64::moveZeroToFloat16):
(JSC::MacroAssemblerX86_64::move16ToFloat16):
(JSC::MacroAssemblerX86_64::moveFloat16To16):
(JSC::MacroAssemblerX86_64::storeFloat16):
(JSC::MacroAssemblerX86_64::supportsFloat16):
* Source/JavaScriptCore/bytecode/AccessCase.cpp:
(JSC::AccessCase::create):
(JSC::AccessCase::guardedByStructureCheckSkippingConstantIdentifierCheck const):
(JSC::AccessCase::requiresIdentifierNameMatch const):
(JSC::AccessCase::requiresInt32PropertyCheck const):
(JSC::AccessCase::forEachDependentCell const):
(JSC::AccessCase::doesCalls const):
(JSC::AccessCase::canReplace const):
(JSC::AccessCase::runWithDowncast):
(JSC::AccessCase::canBeShared):
* Source/JavaScriptCore/bytecode/AccessCase.h:
* Source/JavaScriptCore/bytecode/InlineCacheCompiler.cpp:
(JSC::toTypedArrayType):
(JSC::forResizableTypedArray):
(JSC::needsScratchFPR):
(JSC::forInBy):
(JSC::isStateless):
(JSC::doesJSCalls):
(JSC::isMegamorphic):
(JSC::canBeViaGlobalProxy):
(JSC::InlineCacheCompiler::generateWithGuard):
(JSC::InlineCacheCompiler::generateAccessCase):
* Source/JavaScriptCore/bytecode/Repatch.cpp:
(JSC::tryCacheArrayGetByVal):
(JSC::tryCacheArrayPutByVal):
(JSC::tryCacheArrayInByVal):
* Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:
(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
* Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:
(JSC::DFG::ByteCodeParser::handleIntrinsicCall):
* Source/JavaScriptCore/dfg/DFGCSEPhase.cpp:
* Source/JavaScriptCore/dfg/DFGClobberize.h:
(JSC::DFG::clobberize):
* Source/JavaScriptCore/dfg/DFGDoesGC.cpp:
(JSC::DFG::doesGC):
* Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:
(JSC::DFG::FixupPhase::fixupNode):
* Source/JavaScriptCore/dfg/DFGMayExit.cpp:
* Source/JavaScriptCore/dfg/DFGNode.h:
(JSC::DFG::Node::shouldSpeculateFloat16Array):
* Source/JavaScriptCore/dfg/DFGNodeType.h:
* Source/JavaScriptCore/dfg/DFGOperations.cpp:
(JSC::DFG::JSC_DEFINE_JIT_OPERATION):
* Source/JavaScriptCore/dfg/DFGOperations.h:
* Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:
* Source/JavaScriptCore/dfg/DFGSafeToExecute.h:
(JSC::DFG::safeToExecute):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h:
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::compileGetByVal):
(JSC::DFG::SpeculativeJIT::compile):
(JSC::DFG::SpeculativeJIT::compilePutByVal):
* Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compileGetByVal):
(JSC::DFG::SpeculativeJIT::compile):
(JSC::DFG::SpeculativeJIT::compilePutByVal):
* Source/JavaScriptCore/ftl/FTLCapabilities.cpp:
(JSC::FTL::canCompile):
* Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileNode):
(JSC::FTL::DFG::LowerDFGToB3::compileArithF16Round):
(JSC::FTL::DFG::LowerDFGToB3::compileGetByValImpl):
(JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
(JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
* Source/JavaScriptCore/ftl/FTLOutput.cpp:
(JSC::FTL::Output::storeDoubleAsFloat16):
(JSC::FTL::Output::f16round):
(JSC::FTL::Output::loadFloat16AsDouble):
* Source/JavaScriptCore/ftl/FTLOutput.h:
* Source/JavaScriptCore/runtime/Intrinsic.h:
* Source/JavaScriptCore/runtime/JSDataViewPrototype.cpp:
* Source/JavaScriptCore/runtime/MathObject.cpp:
(JSC::MathObject::finishCreation):
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/WTF/wtf/PlatformHave.h:
Canonical link: https://commits.webkit.org/281895@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes