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

Reply via email to