RESOLVED FIXED 204442
[JSC] Extend MacroAssemblerARM64::load/store for datasize = 16
https://bugs.webkit.org/show_bug.cgi?id=204442
Summary [JSC] Extend MacroAssemblerARM64::load/store for datasize = 16
Yusuke Suzuki
Reported 2019-11-20 20:40:03 PST
[JSC] Extend MacroAssemblerARM64::load/store for datasize = 16
Attachments
Patch (5.98 KB, patch)
2019-11-20 20:40 PST, Yusuke Suzuki
no flags
Patch (5.94 KB, patch)
2019-11-20 20:43 PST, Yusuke Suzuki
no flags
Patch (8.11 KB, patch)
2019-11-20 21:04 PST, Yusuke Suzuki
mark.lam: review+
Yusuke Suzuki
Comment 1 2019-11-20 20:40:27 PST
Created attachment 384026 [details] Patch WIP
Yusuke Suzuki
Comment 2 2019-11-20 20:40:49 PST
Yusuke Suzuki
Comment 3 2019-11-20 20:43:49 PST
Created attachment 384027 [details] Patch WIP
Yusuke Suzuki
Comment 4 2019-11-20 21:04:43 PST
Mark Lam
Comment 5 2019-11-20 21:19:10 PST
Comment on attachment 384029 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=384029&action=review > Source/JavaScriptCore/ChangeLog:9 > + Our `void load16(const void* address, RegisterID dest)` and `void store16(RegisterID src, const void* address)` do not aware of /do not aware/are not aware/. > Source/JavaScriptCore/ChangeLog:10 > + the condition that passed register is memoryTempRegister, while `MacroAssemblerARM64::{load,store}` handles it correctly, e.g. /is memoryTempRegister/can be memoryTempRegister/ > Source/JavaScriptCore/ChangeLog:24 > + to support 16 so that `or16` implementation looks like almost the same to `or32` etc. /looks like almost the same to/is similar to/ > Source/JavaScriptCore/assembler/testmasm.cpp:1137 > + // Just compiling test. > + compile([&] (CCallHelpers& jit) { > + emitFunctionPrologue(jit); > + jit.or16(CCallHelpers::TrustedImm32(42), CCallHelpers::AbsoluteAddress(nullptr)); > + emitFunctionEpilogue(jit); > + jit.ret(); > + }); How is this test case different than the one immediately above it?
Yusuke Suzuki
Comment 6 2019-11-20 21:20:02 PST
Comment on attachment 384029 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=384029&action=review >> Source/JavaScriptCore/assembler/testmasm.cpp:1137 >> + }); > > How is this test case different than the one immediately above it? nullptr is always invalid logical imm in ARM64, so this takes the path this patch is fixing.
Mark Lam
Comment 7 2019-11-20 21:57:13 PST
Comment on attachment 384029 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=384029&action=review r=me with fixes. >>> Source/JavaScriptCore/assembler/testmasm.cpp:1137 >>> + }); >> >> How is this test case different than the one immediately above it? > > nullptr is always invalid logical imm in ARM64, so this takes the path this patch is fixing. Yusuke told me offline that his intent is to take the !logicalImm.isValid() case in or16. For that, we need to pass TrustedImm(0), not AbsoluteAddress(nullptr).
Yusuke Suzuki
Comment 8 2019-11-20 21:57:47 PST
Comment on attachment 384029 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=384029&action=review Thanks! >> Source/JavaScriptCore/ChangeLog:9 >> + Our `void load16(const void* address, RegisterID dest)` and `void store16(RegisterID src, const void* address)` do not aware of > > /do not aware/are not aware/. Fixed. >> Source/JavaScriptCore/ChangeLog:10 >> + the condition that passed register is memoryTempRegister, while `MacroAssemblerARM64::{load,store}` handles it correctly, e.g. > > /is memoryTempRegister/can be memoryTempRegister/ Fixed. >> Source/JavaScriptCore/ChangeLog:24 >> + to support 16 so that `or16` implementation looks like almost the same to `or32` etc. > > /looks like almost the same to/is similar to/ Fixed. >>>> Source/JavaScriptCore/assembler/testmasm.cpp:1137 >>>> + }); >>> >>> How is this test case different than the one immediately above it? >> >> nullptr is always invalid logical imm in ARM64, so this takes the path this patch is fixing. > > Yusuke told me offline that his intent is to take the !logicalImm.isValid() case in or16. For that, we need to pass TrustedImm(0), not AbsoluteAddress(nullptr). Nice, fixed.
Yusuke Suzuki
Comment 9 2019-11-20 22:02:57 PST
Note You need to log in before you can comment on or make changes to this bug.