diff options
| author | Sintendo <bram.speeckaert@gmail.com> | 2021-01-04 23:02:22 +0100 |
|---|---|---|
| committer | Sintendo <bram.speeckaert@gmail.com> | 2021-01-04 23:02:22 +0100 |
| commit | b805223108d67ae57a4dd633f0d8da0079d0b037 (patch) | |
| tree | 253c9f0d56ec40a6258836c8d23917feeff7afdf /Source/Core/DiscIO/FileSystemGCWii.cpp | |
| parent | e957ed0809c73417103010f91ba058dd7a96bf86 (diff) | |
Jit64: subfx - Optimize more constant a cases
Consider the case where d and a refer to the same PowerPC register,
which is known to hold an immediate value by the RegCache. We place a
ReadWrite constraint on this register and bind it to an x86 register.
The RegCache then allocates a new register, initializes it with the
immediate, and returns a RCX64Reg for both d and a.
At this point information about the immediate value becomes unreachable.
In the case of subfx, this generates suboptimal code:
Before 1:
BF 1E 00 00 00 mov edi,1Eh <- done by RegCache
8B C7 mov eax,edi
8B FE mov edi,esi
2B F8 sub edi,eax
Before 2:
BE 00 AC 3F 80 mov esi,803FAC00h <- done by RegCache
8B C6 mov eax,esi
8B 75 EC mov esi,dword ptr [rbp-14h]
2B F0 sub esi,eax
The solution is to explicitly handle the constant a case before having
the RegCache allocate registers for us.
After 1:
8D 7E E2 lea edi,[rsi-1Eh]
After 2:
8B 75 EC mov esi,dword ptr [rbp-14h]
81 EE 00 AC 3F 80 sub esi,803FAC00h
Diffstat (limited to 'Source/Core/DiscIO/FileSystemGCWii.cpp')
0 files changed, 0 insertions, 0 deletions
