Sintendo
b0be20560f
Jit64: subfx - Special case b == 0
...
Happens in Super Mario Sunshine. You could probably do something similar
for b == -1 (like we do for subfic), but I couldn't find any titles that
do this.
- Case 1: d == a
Before:
41 8B C7 mov eax,r15d
41 BF 00 00 00 00 mov r15d,0
44 2B F8 sub r15d,eax
After:
41 F7 DF neg r15d
- Case 2: d != a
Before:
BF 00 00 00 00 mov edi,0
41 2B FD sub edi,r13d
After:
41 8B FD mov edi,r13d
F7 DF neg edi
2021-01-05 00:11:16 +01:00
Sintendo
57548b456b
Jit64: subfx - Special case a == 0
...
Occurs a bunch of times in Super Mario Sunshine.
Before:
41 83 EE 00 sub r14d,0
After:
Nothing!
2021-01-04 23:54:15 +01:00
Sintendo
b805223108
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
2021-01-04 23:02:22 +01:00
JosJuice
e957ed0809
Merge pull request #9422 from MerryMage/__builtin_clz
...
BitUtils: __builtin_clz is undefined when value == 0
2021-01-03 18:53:25 +01:00
MerryMage
6106d6481f
BitUtils: __builtin_clz is undefined when value == 0
2021-01-03 17:35:15 +00:00
LC
4b9259d691
Merge pull request #9415 from Filoppi/patch-8
...
Fix cursor going to +infinite if the window size was 0
2021-01-03 11:26:11 -05:00
LC
f477a10e65
Merge pull request #9421 from MerryMage/JitBlockData
...
JitArm64: Do not use offsetof on non-standard-layout types
2021-01-03 11:25:04 -05:00
MerryMage
8ae0bf93e7
JitArm64: Do not use offsetof on non-standard-layout types
...
Applying PR #8687 to Arm64 JIT.
2021-01-03 15:26:01 +00:00
Filippo Tarpini
8813ba69f5
Fix Quartz cursor going to +infinite if the window size was 0
2021-01-02 19:55:19 +02:00
Filippo Tarpini
5a5c815ff0
Fix DInput cursor going to +infinite if the window size was 0
2021-01-02 18:33:13 +02:00
Filippo Tarpini
75f35393c3
Fix XInput2 cursor going to +infinite if the window size was 0
2021-01-02 18:30:14 +02:00
JosJuice
f06e9c55c8
Merge pull request #9411 from lioncash/enum3
...
Arm64Emitter: Remove unused OpType enum
2021-01-01 19:11:06 +01:00
Lioncash
36af39853d
Arm64Emitter: Remove unused OpType enum
...
This isn't used anywhere, so we can remove it.
2021-01-01 11:06:05 -05:00
Léo Lam
fcdcdd7beb
Merge pull request #9410 from lioncash/enum2
...
Arm64Emitter: Convert ArithOption enums into enum classes
2021-01-01 13:25:35 +01:00
Lioncash
95cc53edec
Arm64Emitter: Convert ArithOption enums into enum classes
...
Makes the enums strongly typed. While we're at it, we can also make
these enums private.
2021-01-01 07:10:41 -05:00
Léo Lam
452aad29f1
Merge pull request #9401 from lioncash/jittable
...
JitArm64_Tables: Construct tables at compile-time
2021-01-01 01:22:49 +01:00
Léo Lam
344a74aa11
Merge pull request #9396 from lioncash/arm
...
JitArm64_RegCache: Interface cleanup
2021-01-01 01:03:55 +01:00
Léo Lam
f59ee87031
Merge pull request #9402 from lioncash/emitter
...
Arm64Emitter: Interface cleanup
2021-01-01 00:52:40 +01:00
JosJuice
871d1d5953
Translation resources sync with Transifex
2020-12-31 20:16:11 +01:00
JosJuice
7bf590ee5a
Merge pull request #9403 from lioncash/guard
...
ArmCommon: Add missing header guard
2020-12-31 12:17:28 +01:00
Lioncash
e45aa019ec
ArmCommon: Mark NO_COND as constexpr
...
Allows it to be used in compile-time expressions if ever necessary.
2020-12-30 20:54:05 -05:00
Lioncash
c9711a5eca
ArmCommon: Add missing header guard
...
Prevents any multiple inclusion errors from occurring.
2020-12-30 20:53:31 -05:00
Lioncash
cca0dffebd
Arm64Emitter: Add shorthand member functions for hint instructions
...
Allows for more concise code.
2020-12-30 20:49:20 -05:00
Lioncash
6046a15267
Arm64Emitter: Make ShiftAmount enum an enum class
...
Reduces namespace pollution and makes the enum strongly typed.
2020-12-30 20:49:20 -05:00
Lioncash
fab2053439
Arm64Emitter: Make RoundingMode enum an enum class
...
Prevents namespace pollution and makes the enum members strongly typed.
2020-12-30 20:49:20 -05:00
Lioncash
d87ec71615
Arm64Emitter: Make PStateField enum an enum class
...
Prevents namespace pollution and makes the enum members strongly typed.
2020-12-30 20:49:20 -05:00
Lioncash
5c3f2fde22
Arm64Emitter: Make BarrierType enum an enum class
...
Prevents namespace pollution and enforces strong typing.
2020-12-30 20:49:20 -05:00
Lioncash
f21c740919
Arm64Emitter: Make SystemHint enum an enum class
...
Avoids polluting the namespace and makes the members strongly typed.
2020-12-30 20:49:20 -05:00
Lioncash
5011c155ec
Arm64Emitter: Make type member of FixupBranch an enum class
...
Eliminates some magic numbers and makes the type member strongly typed.
2020-12-30 20:49:20 -05:00
Lioncash
2fa4729815
Arm64Emitter: Annotate switch fallthrough
...
Silences warnings and makes intent explicit.
2020-12-30 20:49:20 -05:00
Lioncash
d780ad1102
Arm64Emitter: Make use of std::optional
...
Allows eliminating some out variables in favor of optional, which allows
narrowing visible scope of variables.
2020-12-30 20:49:16 -05:00
Lioncash
5b5b3a9979
JitArm64_Tables: Move Instruction alias to the JIT class
...
Does what the comment says I should do :p
2020-12-30 19:28:37 -05:00
Lioncash
c9c874d7fb
JitArm64_Tables: Construct tables at compile-time
...
Migrates the Aarch64 JIT over to the same tabling mechanism as the x64
JIT.
2020-12-30 19:26:29 -05:00
JosJuice
31780a6059
Merge pull request #9399 from lioncash/fallthrough
...
JitArm64_LoadStore: Explicitly annotate switch fallthrough cases
2020-12-30 20:59:38 +01:00
Lioncash
fa63367738
JitArm64_LoadStore: Explicitly annotate switch fallthrough cases
...
Makes it explicit that these are intentional. Also prevents compiler
warnings.
2020-12-30 14:41:37 -05:00
Lioncash
fabf79e09a
JitArm64_RegCache: Make RegType enum an enum class
...
Avoids polluting the namespace and makes the members of the enumeration
strongly typed.
2020-12-30 10:37:16 -05:00
Lioncash
4ff597cf21
JitArm64_RegCache: Mark several member functions as const
...
Many of these don't modify member state, so they can be marked as const.
2020-12-30 09:52:30 -05:00
Lioncash
e9aaa46c2f
JitArm64_RegCache: Mark register constants as constexpr
...
Also moves comments to make for less wonky formatting.
2020-12-30 09:44:49 -05:00
Lioncash
e2bb9fd147
JitArm64_RegCache: Mark HostReg operator== as const
...
Also provides operator!= for logical symmetry.
We can also take the arguments by value, as the arguments are trivially
copyable enum values which fit nicely into registers already.
2020-12-30 09:42:29 -05:00
Lioncash
e7538b10c6
JitArm64_RegCache: In-class initialize member variables where applicable
...
Same behavior, but in-place initializes all values and makes it visually
explicit at the declaration site.
2020-12-30 09:32:24 -05:00
Lioncash
fe54226575
JitArm64_RegCache: Make FlushMode an enum class
...
Prevents namespace pollution and makes the enum members strongly typed.
This also mirrors the x64 variant as well.
2020-12-30 09:26:29 -05:00
JosJuice
c1d041b888
Merge pull request #9318 from JosJuice/android-saf-games
...
Android: Use storage access framework for game list
2020-12-30 11:10:35 +01:00
Léo Lam
8a3b14d7dc
Merge pull request #9391 from lioncash/find-str
...
IOS: Allow for heterogenous name lookup
2020-12-30 01:47:01 +01:00
Lioncash
0e91470828
IOS: Make use of insert_or_assign with AddDevice()
...
operator[] performs a default construction if an object at the given key
doesn't exist before overwriting it with the one we provide in operator=
insert_or_assign performs optimal insertion by avoiding the default
construction if an entry doesn't exist.
Not a game changer, but it is essentially a "free" change.
2020-12-29 19:32:18 -05:00
Lioncash
ba0540b9c5
IOS: Allow for heterogenous name lookup
...
Allows lookups to be done with std::string_view or any other string
type. This allows for non-allocating strings to be used with the name
lookup without needing to construct a std::string.
2020-12-29 19:32:14 -05:00
Léo Lam
806a4f3a9a
Merge pull request #9393 from lioncash/sysconf
...
SysConf: Make use of std::string_view
2020-12-30 01:22:39 +01:00
Lioncash
1bbfde62d1
SysConf: std::move name in Entry constructor
...
Allows code to move into the constructor, avoiding copies entirely.
2020-12-29 19:09:57 -05:00
Lioncash
05094ab51f
SysConf: Return emplaced reference from AddEntry()
...
Allows GetOrAddEntry() to be implemented in a manner that doesn't result
in a redundant lookup in the event an addition needs to be made.
2020-12-29 19:08:30 -05:00
Lioncash
74224c94a7
SysConf: Make use of std::string_view
...
We can allow strings to be used with the SysConf interface in
potentially non-allocating manners.
2020-12-29 19:08:25 -05:00
Léo Lam
716497fbce
Merge pull request #9394 from lioncash/recurse
...
Core: Use C++17 deduction guides with locked recursive mutexes
2020-12-30 00:47:43 +01:00