Ryan Houdek
498a845c0b
Merge pull request #1365 from lioncash/mulx
...
OpcodeDispatcher: Implement MULX
2021-11-12 21:17:25 -08:00
Ryan Houdek
59ed91c50a
Merge pull request #1366 from lioncash/enumreg
...
OpcodeDecoder: Shorten up GPR and MM base offset retrieval
2021-11-12 20:56:01 -08:00
lioncash
9849aef5bc
Frontend: Handle ignoring of widening modes if not 64-bit mode
2021-11-12 17:00:43 -05:00
lioncash
11c3ae19b4
OpcodeDispatcher: Add helper for retrieving MM base offset
...
Shortens up some lines to make them easier to read.
2021-11-12 16:52:20 -05:00
lioncash
4351ec9f4e
OpcodeDispatcher: Add helper for retrieving GPR offsets
...
Greatly shortens the length of multiple lines. This makes it nicer to
see which register is being loaded or stored.
2021-11-12 16:52:13 -05:00
lioncash
59469705e4
OpcodeDispatcher: Implement MULX
2021-11-12 16:46:38 -05:00
lioncash
763e7c5e08
OpcodeDispatcher: Resolve sign mismatches in loops
...
Silences compiler warnings
2021-11-12 13:59:46 -05:00
Ryan Houdek
c6662a46b5
Merge pull request #1364 from lioncash/fptr
...
Frontend: Mark modrm function LUT as static
2021-11-12 06:02:08 -08:00
Ryan Houdek
d1fa8bcfba
Merge pull request #1363 from lioncash/enum
...
OpcodeDecoder: Convert enums into enum classes where applicable
2021-11-12 05:56:23 -08:00
Ryan Houdek
3a3cbf2b5f
Merge pull request #1362 from lioncash/bit
...
OpcodeDispatcher: Add helper for getting bit sizes
2021-11-12 05:53:05 -08:00
lioncash
a0eb2eb2e2
Frontend: Mark modrm function LUT as static
...
This doesn't need to be constructed on a by-instance basis.
2021-11-12 08:48:49 -05:00
lioncash
d58952d1ef
OpcodeDispatcher: Make selection flag enum an enum class
...
Makes the enum and member variable strongly typed, so that it's harder
to implicitly use incorrect values.
2021-11-12 08:41:07 -05:00
lioncash
05ce65322f
OpcodeDispatcher: Make X87Tag an enum class
...
Makes the tag parameter strongly-typed and prevents implicitly passing
it an incorrect value.
2021-11-12 08:31:50 -05:00
lioncash
3e5037042f
OpcodeDispatcher: Make Segment enum an enum class
...
Avoids polluting the surrounding scope.
2021-11-12 08:24:21 -05:00
lioncash
6d82410f44
OpcodeDispatcher: Convert OpType enum into enum class
...
Prevents pollution of the surrounding scope a little.
2021-11-12 08:19:14 -05:00
lioncash
6a79b5cf56
OpcodeDispatcher: Add helper for getting bit sizes
...
Allows expressing what we're directly getting instead of needing to
repeat it in several places, given how common this is.
2021-11-12 08:01:43 -05:00
lioncash
1d88b499e0
OpcodeDispatcher: Handle RORX
2021-11-12 07:28:28 -05:00
lioncash
5d707cf831
OpcodeDecoder: Add support for ADX
...
Another CPU extension we can cross off the list.
Addresses #1355
2021-11-10 12:11:01 -05:00
lioncash
9df8245ef2
OpcodeDispatcher: Implement BMI2 SARX/SHLX/SHRX
...
Gets the basic BMI2 shifts out of the way.
2021-11-07 02:12:06 -05:00
lioncash
7d2b3d0846
CPUID: Signify support for BMI1
...
Now that all of BMI1's instructions are implemented, we can signify that
we support it in CPUID.
2021-11-06 23:37:54 -04:00
lioncash
e0973e19fc
OpcodeDispatcher: Implement handling for BLSMSK
2021-11-06 23:36:52 -04:00
lioncash
ff9190204c
OpcodeDispatcher: Implement handling for BLSR
2021-11-06 23:28:23 -04:00
Ryan Houdek
8b64546579
Merge pull request #1349 from Sonicadvance1/fix_paranoid
...
Arm64: Fixes paranoid TSO mode
2021-11-06 17:24:41 -07:00
Ryan Houdek
61a0508ff6
Arm64: Fixes paranoid TSO mode
...
Vector loadstores were crashing. Now we emulate on load and backpatch on
store.
Store can't effectively emulate so it's better to backpatch.
2021-11-06 04:03:37 -07:00
Ryan Houdek
4ebbca45be
CPUID: Adds support for hybrid flag
...
CPUID lets the application know if it is running on a CPU with hybrid
CPU clusters.
This matches big.little fairly easily. Walk the affinity mask and
check if we are running on a big.little system and report it to the
guest.
For x86-64 host just pass through the flag.
2021-11-06 03:01:39 -07:00
lioncash
b47cb20619
OpcodeDispatcher: Implement handling for BLSI
...
Now all that remains is handling for BLSMSK and BLSR
2021-11-04 18:49:15 -04:00
lioncash
166c96320c
Frontend: Handle VEX-encoded destination operands
...
BLSI, BLSMSK, and BLSR make use of these, for example.
2021-11-04 17:52:57 -04:00
lioncash
e317424b86
X86Tables: Increase InstFlags to uint64_t
...
We've run out of the range of 32 bits already and will need to use
another flag in upcoming changes, so we need to expand our flags to be
64-bit.
While we're at it, we can use a dedicated type alias for the instruction
flags to make the interface changeable from one spot in the future.
2021-11-04 16:10:20 -04:00
Ryan Houdek
babb81a240
Merge pull request #1343 from Sonicadvance1/sigbus_share
...
Arm64: Consolidate HandleSIGBUS
2021-11-03 01:46:36 -07:00
Ryan Houdek
235367b67a
Merge pull request #1342 from Sonicadvance1/tear_telemetry
...
Telemetry: Adds telemetry for when an application tears
2021-11-03 01:46:27 -07:00
Ryan Houdek
5b9da4f2be
Arm64: Consolidate HandleSIGBUS
...
We can share this between the interpreter and the JIT. Necessary to
support the TSO-correct interpreter path.
With this change the interpreter is TSO-correct for GPRs. Just not FPRs
yet.
2021-11-02 23:54:25 -07:00
Ryan Houdek
4c712ca111
Telemetry: Adds telemetry for when an application tears
...
This can be used as an early indicator of an application doing nefarious
things.
2021-11-02 22:46:50 -07:00
Ryan Houdek
3bcc8ca695
IR: Fixes memory ops having a duplicate size field
...
There's zero need for these to have an independent size field and it was
just confusing.
For stores it was always set to zero and for loads it was just
duplicated.
In addition this allows introspection of the store op without casting
the op, which can be useful in edge cases
2021-11-02 22:38:59 -07:00
Ryan Houdek
34b2f93ddf
Merge pull request #1338 from lioncash/bic
...
IR: Add handling for ANDN operations
2021-11-02 19:29:29 -07:00
lioncash
49dae08b3d
OpcodeDispatcher: Make use of the new Andn IR op where applicable
...
Now that we have the handling in place, we can make use of it to
simplify some operations and resolve some lingering TODO comments.
2021-11-02 21:59:56 -04:00
lioncash
0b700de7d9
IR: Add handling for ANDN operations
...
This is a pretty straightforward operation that can be nicely modeled
by the BIC instruction on ARMv8, which is nice since we can get rid of
the need to manually perform the And and Not operations.
2021-11-02 21:59:53 -04:00
Ryan Houdek
43454abc63
Merge pull request #1339 from lioncash/nodiscard
...
Core: Mark relevant Interpreter/JIT functions as [[nodiscard]]
2021-11-02 18:29:51 -07:00
Ryan Houdek
76538be0e0
Merge pull request #1337 from lioncash/bmi-bextr
...
OpcodeDispatcher: Handle BMI1 BEXTR
2021-11-02 18:26:52 -07:00
lioncash
002867bc2a
Core: Mark relevant Interpreter/JIT functions as [[nodiscard]]
...
Lets the compiler warn loudly when the result from any of these
functions are left unused (indicating a bug).
2021-11-02 18:31:41 -04:00
lioncash
79d6bf2840
OpcodeDispatcher: Handle BMI BEXTR
2021-11-02 16:07:37 -04:00
Lioncash
31030e6f85
ALUOps: Fix left-over printf specifier in fmt log
2021-11-02 14:26:44 -04:00
lioncash
26d493a66e
Frontend: Handle VEX on second source operands
2021-11-01 14:55:32 -04:00
Ryan Houdek
7e9201cf0d
Merge pull request #1325 from lioncash/bmi
...
Frontend: Handle VEX source operands
2021-10-22 08:38:14 -07:00
Lioncash
877db85428
OpcodeDecoder: Handle ANDN
2021-10-22 11:18:46 -04:00
Lioncash
f088f0a236
Frontend: Handle VEX source operands
...
This will allow us to begin implementing BMI instructions.
2021-10-21 10:50:13 -04:00
Ryan Houdek
a40a0cbb12
Interpreter: Splits ops in to separate files
...
I need this for something else so I'm doing this now
2021-10-20 00:15:33 -07:00
Ryan Houdek
435137e1a2
JIT: Fixes asserts added to the JIT
...
Fixes #1319
2021-10-19 10:42:55 -07:00
Ryan Houdek
d847f6e1b3
JITSymbols: Allow grouping JIT symbols by guest named regions
...
This lets us have JITsymbols grouped by library.
Useful for determining where to thunk.
Sadly perf doesn't have an option to deduplicate regions by name, so
some external tooling is necessary to make it look nice.
2021-10-16 21:10:57 -07:00
Ryan Houdek
1d9b66044a
JITSymbols: Change over to runtime enablement of symbols
...
Adds a new option for just describing all JIT state as a single symbol.
Useful for simple profiling of total time spent in the JIT
2021-10-13 17:48:34 -07:00
Lioncash
c9621da51c
OpcodeDispatcher: Deduplicate OpToIndex definition
...
We can just make the one defined in X86Tables visible instead to keep
everything in one spot.
2021-10-13 16:18:39 -04:00