Stefanos Kornilios Mitsis Poiitidis
50b5ad5762
Merge pull request #1070 from Sonicadvance1/remove_warnings
...
Remove most warnings in FEX again
2021-06-14 10:12:03 +03:00
Lioncash
d08189c3ed
Passes: Log out errors and warnings through a format specifier
...
Passing in the string directly through the format string input can
unintentionally cause the output string to be interpreted as a format
string.
We can specify a separate format string to ensure it always prints
without any potential mangling.
2021-06-11 22:27:02 -04:00
Lioncash
2ad9ced80a
Passes: Replace <iostream> header with narrower equivalents
...
<iostream> injects a static constructor in translation units that
include it, even if its facilities aren't used.
We can make use of <sstream> to avoid needing to execute those on
startup.
2021-06-11 22:24:45 -04:00
Lioncash
120ba3d171
PassManager: std::move exit handler function
...
Avoids allocations if the internal std::function buffer ever happens to
be large enough to warrant it.
2021-06-11 22:05:17 -04:00
Lioncash
6084bdf982
Passes: Return by unique_ptr where applicable
...
Same behavior, but makes the ownership intentions explicit in the
interface.
2021-06-11 22:05:15 -04:00
Lioncash
b6edc8dc53
RegisterAllocationPass: Prevent leaks in BucketList
...
release() relinquishes control of the allocated memory, but doesn't
deallocate it. We need reset() for this.
2021-06-11 17:49:56 -04:00
Ryan Houdek
0f1a41154d
RAPass: Remove warning
2021-06-10 14:56:39 -07:00
Ryan Houdek
97dfe9b26e
IRValidation: Remove warning
2021-06-10 14:56:29 -07:00
Ryan Houdek
f94ce4c95b
IRCompaction: Remove warning
2021-06-10 14:56:17 -07:00
Lioncash
9ed0572fa4
IRParser: Make use of unique_ptr for Parse()
...
Communicates ownership semantics to the user of the API a little better,
and makes it harder to accidentally leak memory.
2021-06-09 21:00:30 -04:00
Lioncash
00b0222129
IRParser: Make use of find character overloads
...
Results in a tiny bit better codegen. May as well, since the changes are
essentially 'free'.
2021-06-09 21:00:30 -04:00
Lioncash
32cc98856f
IRParser: Add missing default return in DecodeErrorToString()
...
Prevents undefined behavior in the event anything actually reaches this.
2021-06-09 21:00:30 -04:00
Lioncash
dee7441795
IRParser: Make input string to DecodeValue a const reference
...
No specializations modify this, and even if they did, it would be a
little confusing to statefully modify the string this way.
Instead, we can make it read-only.
2021-06-09 21:00:29 -04:00
Ryan Houdek
5ac9b45528
Merge pull request #1059 from Sonicadvance1/fix_rounding
...
Fixes floating point conversion rounding bugs
2021-06-09 17:58:35 -07:00
Ryan Houdek
104fabc11f
Merge pull request #1061 from lioncash/dump
...
IRParser: Make use of fmt where applicable
2021-06-08 07:10:10 -07:00
Ryan Houdek
d57a034220
Fixes floating point conversion rounding bugs
...
When floats and doubles were converting to integers we weren't doing the correct transformation.
AArch64 provides direct ops for all four of the op types. So lets use them
- f32 -> int64
- f32 -> int32
- f64 -> int64
- f64 -> int32
Doesn't fully fix the case of overflow for AArch64 since overflow behaviour is different.
x86 returns 0x8000'0000 or 0x8000'0000'0000'0000 while AArch64 saturates to the maximum signed
integers. Can't work around that without checking overflow flags.
This does solve the typical case though.
Fixes audio problems in all FMod games.
2021-06-08 06:54:10 -07:00
Lioncash
05ee4c363b
IRParser: Make use of fmt where applicable
2021-06-08 09:47:13 -04:00
Lioncash
6f2f4a9bc0
IRDumper: Make use of std::string_view over std::string where applicable
...
Same behavior, but with a smaller footprint (and the ability to be
constant data).
2021-06-08 09:36:59 -04:00
Ryan Houdek
1b06a06a4e
Makes RoundType a unique type
...
This allows us to have the IRDumper have unique output for the type
2021-06-08 02:44:40 -07:00
Ryan Houdek
8b7a7e91c9
Implements new IR ops
...
Adds VBic, VUMinV, VPopcount, VUnZip, VUnZip2, VDupElement, Vector_FToI, and VUABDL
We will need these for the SSE4.1 ops
2021-06-08 02:44:39 -07:00
Lioncash
18e0f2636f
General: Make use of the <bit> header where applicable
...
Since C++20, a bunch of bit manipulation functions finally have a common
interface, so lets make use of those
2021-06-07 08:16:51 -04:00
Lioncash
58272ffc47
ConstProp: Separate out constituent chunks of const prop
...
Makes it nicer to find where each part of the pass is, and also see how
the pass is operating at a high level.
2021-06-05 16:52:03 -04:00
Lioncash
262389f4ea
ConstProp: Mark internal functions as static
...
Allows them to have internal linkage.
2021-06-05 15:25:35 -04:00
Lioncash
35f3777797
IRParser: Make use of insert_or_assign where applicable
...
Avoids some minor potential default constructions that get overwritten
immediately.
2021-06-05 06:43:17 -04:00
Lioncash
d73b79470e
IRParser: Mark parameter of CheckPrintError as a const reference
...
Def is only ever accessed to read members, so we can signify to the
reader to not expect it to be modified.
2021-06-05 06:43:16 -04:00
Lioncash
676d9cb665
IRParser: std::move elements where advantageous
...
e.g. LineDefinitions are moderately beefy, they contain
two strings and a vector of strings among other things,
so we can move instances into their containing vector to avoid some
allocation churn.
2021-06-05 06:43:13 -04:00
Lioncash
993b4513d9
IRParser: Convert array of std::string over to array of std::string_view
...
Same behavior, but allows the arrays to be constexpr (and use less
space; 16 bytes vs 32 bytes per element).
2021-06-05 06:16:42 -04:00
Ryan Houdek
fd6d33d197
Merge pull request #996 from FEX-Emu/skmp/aotirgen
...
AOTIR: Offline Generation
2021-05-03 15:58:57 -07:00
Ryan Houdek
4961604807
Implements support for CLFLUSH
...
JRE requires this to run
2021-05-02 12:18:35 -07:00
Ryan Houdek
5143100a73
Switches more usages of memory allocation routines over to FEX internal
2021-05-01 07:39:14 -07:00
Stefanos Kornilios Mitsis Poiitidis
331549c64a
RLSE: Use Constant, not inline constant, let ConstProp generate all inline consts
2021-05-01 09:40:50 +03:00
Stefanos Kornilios Mitsis Poiitidis
528b01ad7a
Merge pull request #988 from Sonicadvance1/memory_layout_optimizations
...
Memory layout optimizations
2021-04-28 12:31:53 +03:00
Ryan Houdek
bab5927931
Merge pull request #981 from Sonicadvance1/optimize_long_divide
...
Adds Long Divide removal pass
2021-04-26 23:48:50 -07:00
Ryan Houdek
6255eba524
Memory layout optimizations
...
Some of these memory layouts weren't optimal for ARM loading.
This is now significantly improved
2021-04-26 23:48:22 -07:00
Ryan Houdek
04e0baadc6
Changes LogMan assert to defines
...
C++ no-op functions can't optimize out the predicate arguments in all cases.
This was causing a problem where zero cost assertions weren't actually zero cost.
The only way to resolve this is to actually use macros sadly enough.
This will give a fairly hefty performance uplift with anything operating on IR.
2021-04-26 13:49:35 -07:00
Stefanos Kornilios Mitsis Poiitidis
b45b7c3441
IR: Remove Entry from OP_HEADER, pass as parameter to CompileCode
2021-04-25 13:15:23 +03:00
Ryan Houdek
520dfd7edf
Adds Long Divide removal pass
...
If the long divides don't have anything in the upper bits then they can be optimized away.
Teeworlds, SuperTuxKart, and RRootage were between 50%-55% getting removed
2021-04-24 23:10:59 -07:00
Ryan Houdek
3020e39428
Remove DestSize from Print IR Op
2021-04-04 22:07:03 -07:00
Stefanos Kornilios Mitsis Poiitidis
315b8e9c1e
Merge pull request #917 from FEX-Emu/skmp/lightweight-docs-3
...
Docs: Add tags, unittest Readme.md, generated SourceOutline.md
2021-03-30 12:52:18 +03:00
Stefanos Kornilios Mitsis Poiitidis
942b8549c6
Docs: Add tags to the source code
2021-03-30 12:21:18 +03:00
Lioncache
434a74a88a
CMakeLists: Flag unannotated implicit fallthrough as an error
...
Prevents a class of sneaky logic bugs from slipping through into the
codebase.
This also resolves a case of such a bug within the Decorder's ReadData()
where all 3 byte reads would be performed as if they were a 4 byte read.
2021-03-30 04:56:12 -04:00
Ryan Houdek
15dd70487f
Removes legacy difference between FEX config env variable and enum names
2021-03-29 00:26:11 -07:00
Ryan Houdek
43ddba4e82
Adds support for CPUID leafs
...
Leafs come from ECX but only some CPUID functions support this.
This adds the initial infrastructure but doesn't yet add support for the CPUID functions to consume the leaf.
2021-03-23 18:13:14 -07:00
Stefanos Kornilios Mitsis Poiitidis
971740991b
RCLSE: Invalidate around OP_SYSCALLs, Syscalls might read the context and need the latest version of it
...
Fixes steam w/ all optimization passes enabled
2021-03-17 02:42:32 +02:00
Ryan Houdek
79e9477b14
Removes warnings from RAPass
2021-03-14 13:27:40 -07:00
Ryan Houdek
0b8f29000e
Removes warnings from ConstProp
2021-03-14 13:27:39 -07:00
Ryan Houdek
e530e3676f
Removes warnings from IRDumper
2021-03-14 13:27:39 -07:00
Ryan Houdek
10fbf60259
Converts the printf usages in FEXCore to LogManager
...
Now that we can safely handle long strings these will now work
2021-03-10 16:38:46 -08:00
Scott Mansell
b36378369a
Merge pull request #822 from FEX-Emu/skmp/fix-scm-bug
...
ConstProp: Restrict imm code motion around selects to matching sizes, fixes dav1d
2021-03-09 22:12:50 +13:00
Stefanos Kornilios Mitsis Poiitidis
cbf4c9a687
ConstProp: Restrict imm code motion around selects to matching sizes, fixes dav1d
2021-03-09 11:06:16 +02:00