Bug 251421
Summary: | Remove unnecessary add when loading a JSCConfig field. | ||
---|---|---|---|
Product: | WebKit | Reporter: | Mark Lam <mark.lam> |
Component: | JavaScriptCore | Assignee: | Mark Lam <mark.lam> |
Status: | RESOLVED FIXED | ||
Severity: | Normal | CC: | webkit-bug-importer |
Priority: | P2 | Keywords: | InRadar |
Version: | WebKit Nightly Build | ||
Hardware: | Unspecified | ||
OS: | Unspecified |
Mark Lam
Currently, to load a JSCConfig field, our LLInt asm does something like this:
```
leap JSCConfig + constexpr JSC::offsetOfJSCConfigGateMap + (constexpr Gate::%opcodeName%) * PtrSize, ws1
jmp [ws1], NativeToJITGatePtrTag # JSEntrySlowPathPtrTag
```
... and generates this:
```
#if OS(DARWIN)
".loc 1 1\n" "Ljsc_llint_loh_adrp_1508: \n" // LowLevelInterpreter.asm:1
"adrp x10, " LOCAL_REFERENCE(g_config) "@GOTPAGE \n"
"Ljsc_llint_loh_ldr_1508: \n"
"ldr x10, [x10, " LOCAL_REFERENCE(g_config) "@GOTPAGEOFF] \n"
#elif OS(LINUX)
...
#endif
".loc 1 1\n" "add x10, x10, #3592 \n" // <---- this add can be applied as an offset to the ldr below.
".loc 6 1034\n" "movz x13, #57366 \n" // WebAssembly.asm:1034
"ldr x17, [x10] \n"
"brab x17, x13 \n"
```
This patch re-arranges the LLInt assembly to look like this instead:
```
leap _g_config, ws1
jmp JSCConfigGateMapOffset + (constexpr Gate::%opcodeName%) * PtrSize[ws1], NativeToJITGatePtrTag # JSEntrySlowPathPtrTag
```
... resulting in the removal of the unnecessary add instruction:
```
#if OS(DARWIN)
".loc 1 1\n" "Ljsc_llint_loh_adrp_1508: \n" // LowLevelInterpreter.asm:1
"adrp x10, " LOCAL_REFERENCE(g_config) "@GOTPAGE \n"
"Ljsc_llint_loh_ldr_1508: \n"
"ldr x10, [x10, " LOCAL_REFERENCE(g_config) "@GOTPAGEOFF] \n"
#elif OS(LINUX)
...
#endif
".loc 6 1034\n" "movz x13, #57366 \n" // WebAssembly.asm:1034
"ldr x17, [x10, #3592] \n"
"brab x17, x13 \n"
```
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Radar WebKit Bug Importer
<rdar://problem/104854843>
Mark Lam
Pull request: https://github.com/WebKit/WebKit/pull/9368
EWS
Committed 259629@main (95dcffb800f8): <https://commits.webkit.org/259629@main>
Reviewed commits have been landed. Closing PR #9368 and removing active labels.