Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0521cc7f331af119ee2e4c952102974cf6e7fbb6
https://github.com/WebKit/WebKit/commit/0521cc7f331af119ee2e4c952102974cf6e7fbb6
Author: Yusuke Suzuki <[email protected]>
Date: 2026-01-14 (Wed, 14 Jan 2026)
Changed paths:
M Source/JavaScriptCore/assembler/ARM64Assembler.h
M Source/JavaScriptCore/assembler/AssemblerCommon.h
M Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
M Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h
M Source/JavaScriptCore/assembler/testmasm.cpp
M Source/JavaScriptCore/b3/B3LowerToAir.cpp
M Source/JavaScriptCore/b3/B3MoveConstants.cpp
M Source/JavaScriptCore/b3/air/AirArg.cpp
M Source/JavaScriptCore/b3/air/AirArg.h
M Source/JavaScriptCore/b3/air/AirOpcode.opcodes
M Source/JavaScriptCore/b3/air/opcode_generator.rb
M Source/JavaScriptCore/wasm/WasmBBQJIT64.cpp
Log Message:
-----------
[JSC] Extend Float16, Float, Double, V128 constant materialization
https://bugs.webkit.org/show_bug.cgi?id=305286
rdar://167933094
Reviewed by Justin Michaud.
This patch extends ARM64 Float16, Float, Double, V128 constant materialization.
1. materializeVector is renamed to move128ToVector, aligned to
move16ToFloat16, move32ToFloat, move64ToDouble.
2. move128ToVector, move16ToFloat move32ToFloat, move64ToDouble are
supporting comprehensive constant materialization patterns now, using
movi, mvni, and fmov (with vector variant).
3. Avoid using load for Float constant. This is 32bit, so it is small
enough to be materialized. Changing B3 MoveConstants phase to avoid
it. And B3LowerToAir supports ConstFloat lowering.
4. Add FPImm128 and support Move128ToVector in Air. B3 can materialize
vector constant via that instruction. Const128 lowering rule gets
enhanced in B3LowerToAir.
Test: Source/JavaScriptCore/assembler/testmasm.cpp
* Source/JavaScriptCore/assembler/ARM64Assembler.h:
* Source/JavaScriptCore/assembler/AssemblerCommon.h:
(JSC::ARM64ShiftedImmediate32::create):
(JSC::ARM64ShiftedImmediate32::isValid const):
(JSC::ARM64ShiftedImmediate32::immediate const):
(JSC::ARM64ShiftedImmediate32::shift const):
(JSC::ARM64ShiftedImmediate32::ARM64ShiftedImmediate32):
(JSC::ARM64ShiftedImmediateMSL32::create):
(JSC::ARM64ShiftedImmediateMSL32::isValid const):
(JSC::ARM64ShiftedImmediateMSL32::immediate const):
(JSC::ARM64ShiftedImmediateMSL32::shift const):
(JSC::ARM64ShiftedImmediateMSL32::ARM64ShiftedImmediateMSL32):
(JSC::ARM64ShiftedImmediate16::create):
(JSC::ARM64ShiftedImmediate16::isValid const):
(JSC::ARM64ShiftedImmediate16::immediate const):
(JSC::ARM64ShiftedImmediate16::shift const):
(JSC::ARM64ShiftedImmediate16::ARM64ShiftedImmediate16):
* Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::move128ToVector):
(JSC::MacroAssemblerARM64::moveZeroToDouble):
(JSC::MacroAssemblerARM64::moveZeroToFloat):
(JSC::MacroAssemblerARM64::moveZeroToFloat16):
(JSC::MacroAssemblerARM64::move64ToDouble):
(JSC::MacroAssemblerARM64::move32ToFloat):
(JSC::MacroAssemblerARM64::move16ToFloat16):
(JSC::MacroAssemblerARM64::moveZeroToVector):
(JSC::MacroAssemblerARM64::materializeVector): Deleted.
* Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::move128ToVector):
(JSC::MacroAssemblerX86_64::materializeVector): Deleted.
* Source/JavaScriptCore/assembler/testmasm.cpp:
(JSC::testMove32ToFloatMovi):
(JSC::testMove64ToDoubleMovi):
(JSC::testMove64ToDoubleRepeated32BitPatternBug):
(JSC::testFMovHalfPrecisionEncoding):
(JSC::testMove128ToVectorMovi):
(JSC::testMove16ToFloat16Comprehensive):
(JSC::testMove32ToFloatComprehensive):
(JSC::testMove64ToDoubleComprehensive):
(JSC::testMove128ToVectorComprehensive):
* Source/JavaScriptCore/b3/B3LowerToAir.cpp:
* Source/JavaScriptCore/b3/B3MoveConstants.cpp:
* Source/JavaScriptCore/b3/air/AirArg.cpp:
(JSC::B3::Air::Arg::jsHash const):
(JSC::B3::Air::Arg::dump const):
(WTF::printInternal):
* Source/JavaScriptCore/b3/air/AirArg.h:
(JSC::B3::Air::Arg::fpImm128):
(JSC::B3::Air::Arg::isFPImm128 const):
(JSC::B3::Air::Arg::isSomeImm const):
(JSC::B3::Air::Arg::isGP const):
(JSC::B3::Air::Arg::isFP const):
(JSC::B3::Air::Arg::isValidFPImm16Form):
(JSC::B3::Air::Arg::isValidFPImm32Form):
(JSC::B3::Air::Arg::isValidFPImm64Form):
(JSC::B3::Air::Arg::isValidFPImm128Form):
(JSC::B3::Air::Arg::isValidForm const):
(JSC::B3::Air::Arg::asV128 const):
* Source/JavaScriptCore/b3/air/AirOpcode.opcodes:
* Source/JavaScriptCore/b3/air/opcode_generator.rb:
* Source/JavaScriptCore/wasm/WasmBBQJIT64.cpp:
(JSC::Wasm::BBQJITImpl::BBQJIT::materializeVectorConstant):
Canonical link: https://commits.webkit.org/305613@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications