[webkit-changes] [WebKit/WebKit] 901eee: [JSC] Fix checkAliasOfEAX for AIR code generation ...
Yijia Huang
noreply at github.com
Tue Sep 3 23:23:23 PDT 2024
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 901eee6dc6808ebe82d145b1fcddc5c95a91870a
https://github.com/WebKit/WebKit/commit/901eee6dc6808ebe82d145b1fcddc5c95a91870a
Author: Yijia Huang <yijia_huang at apple.com>
Date: 2024-09-03 (Tue, 03 Sep 2024)
Changed paths:
A JSTests/stress/atomics-strong-cas.js
M Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h
Log Message:
-----------
[JSC] Fix checkAliasOfEAX for AIR code generation and apply it for 64bit atomicStrongCAS
https://bugs.webkit.org/show_bug.cgi?id=279083
rdar://134963217
Reviewed by Yusuke Suzuki.
The X86 'atomicStrongCAS' requires three arguments: 'expectedAndResult',
'newValue', and 'address'. This operation checks if the expected value matches
the value in memory, and if so, it replaces it with the new value. Otherwise,
it loads the memory value into the result. This can be done using cmpxchg[1]
with some additional handling.
If `expectedAndResult` is not in `eax`, a double swap is needed to perform `cmpxchg`
and load the result correctly. However, if `newValue` is in `eax`, the first swap will
overwrite it. That issue was fixed at [2] by using the scratch register.
The current issue is that 'atomicStrongCAS' is also used in AIR code generation, which
doesn't allow for a scratch register. However, by reviewing the usage of `atomicStrongCAS`
in AIR for X86, it turns out that `eax` is always used as expectedAndResult. In this case,
there's no clobbering issue with `newValue` since the double swap between `expectedAndResult`
and `eax` won't occur.
This patch does two things:
1. Propose a simple fix by adding another alias check between `expectedAndResult` and `eax`
for the fast path in `checkAliasOfEAX` to avoid the use of the scratch register.
2. Apply `checkAliasOfEAX` for 64-bit `atomicStrongCAS`.
[1] https://www.felixcloutier.com/x86/cmpxchg
[2] https://commits.webkit.org/281565@main
* Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::checkAliasOfEAX):
(JSC::MacroAssemblerX86_64::atomicStrongCAS8):
(JSC::MacroAssemblerX86_64::atomicStrongCAS16):
(JSC::MacroAssemblerX86_64::atomicStrongCAS32):
(JSC::MacroAssemblerX86_64::branchAtomicStrongCAS8):
(JSC::MacroAssemblerX86_64::branchAtomicStrongCAS16):
(JSC::MacroAssemblerX86_64::branchAtomicStrongCAS32):
(JSC::MacroAssemblerX86_64::atomicStrongCAS64):
(JSC::MacroAssemblerX86_64::branchAtomicStrongCAS64):
Canonical link: https://commits.webkit.org/283138@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list