diff options
| author | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2024-11-02 23:15:22 +0100 |
|---|---|---|
| committer | Sintendo <3380580+Sintendo@users.noreply.github.com> | 2024-11-02 23:15:22 +0100 |
| commit | a307d9d9b8ba1612839c3507317440f00548d849 (patch) | |
| tree | c5cd70fd4d1900f0022ded23d04c91ca8b66f439 /Source/Core/InputCommon/ControllerInterface/MappingCommon.cpp | |
| parent | 54b37f6bc4feee39c1383a449da229304f6a8f80 (diff) | |
JitArm64_LoadStore: Optimize zero stores in stX
The value being stored must be loaded into a register. In the case of an
immediate value, this means it must be materialized. The value is
eventually byteswapped before performing the store.
This can be simplified for the value 0 for two reasons:
- ARM64 has a dedicated zero register, so does not need to be
materialized.
- Byteswapping zero is still zero, so we can skip this step.
We could skip byteswapping for other values by immediately materializing
the byteswapped value in a register, but the benefits are not so clear
there (if the value needs to be materialized anyway, it is better to do
it up front).
Before:
0x5280001b mov w27, #0x0 ; =0
0xb9404fba ldr w26, [x29, #0x4c]
0x12881862 mov w2, #-0x40c4 ; =-16580
0x0b020342 add w2, w26, w2
0x5ac00b61 rev w1, w27
0xb8226b81 str w1, [x28, x2]
After:
0xb9404fbb ldr w27, [x29, #0x4c]
0x12881862 mov w2, #-0x40c4 ; =-16580
0x0b020362 add w2, w27, w2
0xb8226b9f str wzr, [x28, x2]
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/MappingCommon.cpp')
0 files changed, 0 insertions, 0 deletions
