Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 7a2375d28da42fb41b734a98cda029478f96b611
      
https://github.com/WebKit/WebKit/commit/7a2375d28da42fb41b734a98cda029478f96b611
  Author: David Degazio <d_dega...@apple.com>
  Date:   2024-04-19 (Fri, 19 Apr 2024)

  Changed paths:
    M Source/JavaScriptCore/assembler/MacroAssembler.h
    M Source/JavaScriptCore/assembler/MacroAssemblerRISCV64.h
    M Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
    M Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h
    M Source/JavaScriptCore/b3/B3Common.h
    M Source/JavaScriptCore/b3/B3MemoryValue.cpp
    M Source/JavaScriptCore/b3/B3ValueInlines.h
    M Source/JavaScriptCore/b3/air/AirArg.h
    M Source/JavaScriptCore/wasm/WasmBBQJIT.cpp
    M Source/JavaScriptCore/wasm/WasmBBQJIT64.cpp
    M Source/WTF/wtf/MathExtras.h

  Log Message:
  -----------
  [WASM] Avoid extraneous move for simple integer arithmetic in BBQ
https://bugs.webkit.org/show_bug.cgi?id=272901
rdar://problem/126695575

Reviewed by Yusuke Suzuki.

Cleans up our code generation for integer add, subtract, bitwise ops,
and compare in the BBQ JIT. Specifically, we target the case where we
know we have one constant operand, and try and avoid a move.

 - For i32.add, i32.and, i32.or, and i32.xor, we are currently doing totally
   redundant work - three-operand nondestructive versions of all these opcodes
   with an immediate are supported on all MacroAssembler targets, so we should
   just use those.

 - For i32.sub, we currently do a weird trick involving adding a negative.
   The only real benefit of this is that for additions, we consider lowering as
   a LEA instruction on x86 - in this patch, we add that to subtractions in the
   MacroAssembler too.

 - For 64-bit versions of these operations, most MacroAssembler targets do not
   natively support 64-bit immediates. For those that do - ARM64 bitwise ops -
   we carve out a special case. Otherwise, we now check if the immediate is
   representable as a 32-bit immediate with no precision loss, and use the 
32-bit
   immediate form instead if so.

* Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h:
(JSC::MacroAssemblerX86Common::sub32):
* Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::sub64):
* Source/JavaScriptCore/b3/B3Common.h:
(JSC::B3::isIdentical): Deleted.
(JSC::B3::isRepresentableAsImpl): Deleted.
(JSC::B3::isRepresentableAs): Deleted.
* Source/JavaScriptCore/b3/B3MemoryValue.cpp:
(JSC::B3::MemoryValue::isLegalOffsetImpl const):
* Source/JavaScriptCore/b3/B3ValueInlines.h:
(JSC::B3::Value::isRepresentableAs const):
* Source/JavaScriptCore/b3/air/AirArg.h:
(JSC::B3::Air::Arg::isRepresentableAs const):
(JSC::B3::Air::Arg::isRepresentableAs):
(JSC::B3::Air::Arg::isValidImmForm):
(JSC::B3::Air::Arg::isValidBitImmForm):
(JSC::B3::Air::Arg::isValidBitImm64Form):
* Source/JavaScriptCore/wasm/WasmBBQJIT.cpp:
(JSC::Wasm::BBQJITImpl::BBQJIT::addI32Add):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI32Sub):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI32And):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI32Xor):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI32Or):
* Source/JavaScriptCore/wasm/WasmBBQJIT64.cpp:
(JSC::Wasm::BBQJITImpl::BBQJIT::addI64Add):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI64Sub):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI64And):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI64Xor):
(JSC::Wasm::BBQJITImpl::BBQJIT::addI64Or):
(JSC::Wasm::BBQJITImpl::BBQJIT::emitCompareI64):
* Source/WTF/wtf/MathExtras.h:
(WTF::isIdentical):
(WTF::isRepresentableAsImpl):
(WTF::isRepresentableAs):

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



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to