[webkit-changes] [WebKit/WebKit] 0c58dc: [JSC] Add runtime configuration for AirOpcode table

Yusuke Suzuki noreply at github.com
Wed Jan 4 21:45:59 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 0c58dc81eb53ab2476c1880e291f9964f9ab652e
      https://github.com/WebKit/WebKit/commit/0c58dc81eb53ab2476c1880e291f9964f9ab652e
  Author: Yusuke Suzuki <ysuzuki at apple.com>
  Date:   2023-01-04 (Wed, 04 Jan 2023)

  Changed paths:
    M Source/JavaScriptCore/assembler/ARM64Assembler.h
    M Source/JavaScriptCore/assembler/ARM64EAssembler.h
    M Source/JavaScriptCore/assembler/CPU.cpp
    M Source/JavaScriptCore/assembler/CPU.h
    M Source/JavaScriptCore/assembler/MacroAssemblerARM64.cpp
    M Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
    M Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h
    M Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
    M Source/JavaScriptCore/assembler/testmasm.cpp
    M Source/JavaScriptCore/b3/B3Common.cpp
    M Source/JavaScriptCore/b3/B3LowerMacros.cpp
    M Source/JavaScriptCore/b3/B3LowerToAir.cpp
    M Source/JavaScriptCore/b3/air/AirArg.h
    M Source/JavaScriptCore/b3/air/AirCCallingConvention.cpp
    M Source/JavaScriptCore/b3/air/AirCode.cpp
    M Source/JavaScriptCore/b3/air/AirOpcode.opcodes
    M Source/JavaScriptCore/b3/air/opcode_generator.rb
    M Source/JavaScriptCore/b3/air/testair.cpp
    M Source/JavaScriptCore/b3/testb3_8.cpp
    M Source/JavaScriptCore/interpreter/Interpreter.cpp
    M Source/JavaScriptCore/jit/AssemblyHelpersSpoolers.h
    M Source/JavaScriptCore/wasm/WasmAirIRGenerator32_64.cpp
    M Source/JavaScriptCore/wasm/WasmAirIRGenerator64.cpp
    M Source/JavaScriptCore/wasm/WasmAirIRGeneratorBase.h
    M Source/JavaScriptCore/wasm/WasmBBQPlan.cpp
    M Source/WTF/wtf/PlatformHave.h

  Log Message:
  -----------
  [JSC] Add runtime configuration for AirOpcode table
https://bugs.webkit.org/show_bug.cgi?id=249889
rdar://103702357

Reviewed by Mark Lam.

This patch adds arm64_lse and x86_64_avx configurations to AirOpcode table.
They are runtime checks: ARM64 LSE is an extension to ARM64, and AVX is an extension to X86_64.
AirOpcode table previously only supports compile-time flags. Now, this can generate checks
with runtime conditions so that JIT code can select better instructions at runtime.

This allows us to integrate 3-operands AVX instructions into X86_64 Air lowering. And this allows
ARM64 JIT (not ARM64E) to use LSE (LargeSystemExtension, ARM's term) atomics instructions.

* Source/JavaScriptCore/assembler/CPU.cpp:
(JSC::isARM64_LSE):
(JSC::isX86_64_AVX):
* Source/JavaScriptCore/assembler/CPU.h:
(JSC::isARM64_LSE):
(JSC::isX86_64_AVX):
* Source/JavaScriptCore/assembler/MacroAssemblerARM64.cpp:
(JSC::MacroAssemblerARM64::collectCPUFeatures):
* Source/JavaScriptCore/assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::atomicXchgAdd8):
(JSC::MacroAssemblerARM64::atomicXchgAdd16):
(JSC::MacroAssemblerARM64::atomicXchgAdd32):
(JSC::MacroAssemblerARM64::atomicXchgAdd64):
(JSC::MacroAssemblerARM64::atomicXchgXor8):
(JSC::MacroAssemblerARM64::atomicXchgXor16):
(JSC::MacroAssemblerARM64::atomicXchgXor32):
(JSC::MacroAssemblerARM64::atomicXchgXor64):
(JSC::MacroAssemblerARM64::atomicXchgOr8):
(JSC::MacroAssemblerARM64::atomicXchgOr16):
(JSC::MacroAssemblerARM64::atomicXchgOr32):
(JSC::MacroAssemblerARM64::atomicXchgOr64):
(JSC::MacroAssemblerARM64::atomicXchgClear8):
(JSC::MacroAssemblerARM64::atomicXchgClear16):
(JSC::MacroAssemblerARM64::atomicXchgClear32):
(JSC::MacroAssemblerARM64::atomicXchgClear64):
(JSC::MacroAssemblerARM64::atomicXchg8):
(JSC::MacroAssemblerARM64::atomicXchg16):
(JSC::MacroAssemblerARM64::atomicXchg32):
(JSC::MacroAssemblerARM64::atomicXchg64):
(JSC::MacroAssemblerARM64::atomicStrongCAS8):
(JSC::MacroAssemblerARM64::atomicStrongCAS16):
(JSC::MacroAssemblerARM64::atomicStrongCAS32):
(JSC::MacroAssemblerARM64::atomicStrongCAS64):
(JSC::MacroAssemblerARM64::supportsLSE):
* Source/JavaScriptCore/assembler/MacroAssemblerARM64E.h:
(JSC::MacroAssemblerARM64E::ret):
(JSC::MacroAssemblerARM64E::atomicXchgAdd8): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgAdd16): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgAdd32): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgAdd64): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgXor8): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgXor16): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgXor32): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgXor64): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgOr8): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgOr16): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgOr32): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgOr64): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgClear8): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgClear16): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgClear32): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchgClear64): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchg8): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchg16): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchg32): Deleted.
(JSC::MacroAssemblerARM64E::atomicXchg64): Deleted.
(JSC::MacroAssemblerARM64E::atomicStrongCAS8): Deleted.
(JSC::MacroAssemblerARM64E::atomicStrongCAS16): Deleted.
(JSC::MacroAssemblerARM64E::atomicStrongCAS32): Deleted.
(JSC::MacroAssemblerARM64E::atomicStrongCAS64): Deleted.
* Source/JavaScriptCore/b3/B3LowerMacros.cpp:
* Source/JavaScriptCore/b3/B3LowerToAir.cpp:
* Source/JavaScriptCore/b3/air/AirCode.cpp:
(JSC::B3::Air::defaultPrologueGenerator):
* Source/JavaScriptCore/b3/air/AirOpcode.opcodes:
* Source/JavaScriptCore/b3/air/opcode_generator.rb:
* Source/JavaScriptCore/b3/testb3_8.cpp:
(testAtomicWeakCAS):
(testAtomicStrongCAS):
(testAtomicXchg):
* Source/WTF/wtf/PlatformHave.h:

Canonical link: https://commits.webkit.org/258475@main




More information about the webkit-changes mailing list