Ryan Houdek
fc0ce3d1dc
Adds new IR ops to the AArch64 JIT
2020-03-06 07:56:02 +02:00
Ryan Houdek
e9d1ec6aff
Adds new IR ops to the interpreter
2020-03-06 07:56:02 +02:00
Ryan Houdek
6b636c3c26
Fixes a couple of instructions in the x86Tables
2020-03-06 07:56:02 +02:00
Ryan Houdek
2f5e2ea066
Fixes LODS and SCAS x86Table flags
2020-03-06 07:56:02 +02:00
Ryan Houdek
3bb9197e6a
Adds VAND IR Op
2020-03-06 07:56:02 +02:00
Ryan Houdek
a858296ecd
Removes SSE41, SSE42, and AVX support from CPUID
2020-03-06 07:56:01 +02:00
Scott Mansell
2babc1292c
GdbServer: Breakpoint intergation
2020-03-06 07:56:01 +02:00
Scott Mansell
9a89741ff2
gdbServer: Allow continuing
2020-03-06 07:56:01 +02:00
Scott Mansell
e050eace1d
Refactor context start/pause/step interface
2020-03-06 07:56:01 +02:00
Scott Mansell
545b542f9b
GdbServer: Implement xml target for register order
...
We can now simply memcpy much of memory state.
2020-03-06 07:56:01 +02:00
Scott Mansell
e44b3ca495
Gdbserver: Implement enough to reach gdb prompt
...
Memory is implemented, but without any checking or
invalidation.
Registers just hardcode a RIP for my test elf.
But GDB can read the elf over tcp, initilize and allow you to create breakpoints, which get
writen back before continue (which is not hooked up)
2020-03-06 07:56:01 +02:00
Scott Mansell
17ffe5a7b2
GdbServer: Support a few more packets
2020-03-06 07:56:01 +02:00
Scott Mansell
23db0f66ec
Add a skeleton of a GdbServer
2020-03-06 07:56:01 +02:00
Ryan Houdek
e0e708a9c0
Fixes three instructions necessary for shared apps to run
...
Fixes MOVHPD which was failing.
Fixes FXSTOR and FXSAVE which was accidently loading the memory location
rather than doing an LEA of the address.
2020-03-06 07:56:01 +02:00
Ryan Houdek
e9be5430b9
Adds a couple new IR ops for easy movement of registers between classes.
2020-03-06 07:56:01 +02:00
Ryan Houdek
af5a562508
Fixes bug in STOS and CMPS
...
We were storing one too many elements. So even if the counter register
was zero it would do a store or comparison
2020-03-06 07:56:00 +02:00
Scott Mansell
8a6efad301
Stub FNSTCW/FLDCW so libc.so.6 can be loaded
...
Apparently doesn't need any other x86 instructions.
Or anything more than noped out state save/restore.
2020-03-06 07:56:00 +02:00
Ryan Houdek
3f06f3e87d
Fixes bug in PUSH op with RSP source.
...
We were modifying RSP to adjust the stack first.
Then if the source used RSP then it was offset by the store size.
`push [rsp]` was broken before this
2020-03-06 07:56:00 +02:00
Ryan Houdek
2df55d303a
Fixes bug in SHR op
...
Smaller ops could have been shifting data from the larger source in to
the smaller op space when it should have been zero'd
2020-03-06 07:55:59 +02:00
Ryan Houdek
7a4d0fbfd3
Fixes bug in 64bit def mod instructions that are in 16bit mode
...
These would have been forced to 64bit when they would have wanted to be
operating in 16bit mode.
Fixes that.
2020-03-06 07:55:59 +02:00
Ryan Houdek
afdbd9ebdc
Fixes issues with PSLLDQ and PSRLDQ
...
These are whole vector shift instructions and they shift by bytes rather
than bits.
You only get an immediate offset for the instruction.
Implements two new IR ops to account for these instructions
This also doesn't match AArch64 behaviour 100%, requires two
instructions to emulate rather than the single one on the x86-side
2020-03-06 07:55:59 +02:00
Ryan Houdek
af6eefb495
Fixes crash in IR Interpreter that can occur with large functions
...
If the tmp space grew too large and had to resize then we would have
stale pointers.
Keep around the offset instead so we don't store invalid pointers.
2020-03-06 07:55:59 +02:00
Ryan Houdek
3568cdb03b
Adds VBITCast to IR Interpreter
2020-03-06 07:55:59 +02:00
Ryan Houdek
33ebeef246
Fixes IR Interpreter
...
Updates it to support the IR style and branching requirements.
2020-03-06 07:55:59 +02:00
Ryan Houdek
bc294164e3
Updates project to allow it to be installed
...
Installs as both a static library and a shared library
2020-03-06 07:55:59 +02:00
Ryan Houdek
939e210a68
Updates SonicUtils
...
Makes changes to match latest changes
2020-03-06 07:55:54 +02:00
Ryan Houdek
b58b5687e0
Fixes AArch64 custom ASM dispatcher
2020-03-06 07:55:46 +02:00
Ryan Houdek
6e72a365d9
Fixes for the AArch64 JIT
...
Custom dispatcher isn't fully working yet, but fixes a few other bugs.
2020-03-06 07:55:46 +02:00
Ryan Houdek
cb81d0a1af
Fixes CondJump on AArch64 JIT
2020-03-06 07:55:46 +02:00
Ryan Houdek
efdf490c3c
Adds support for ARM on the LLVM JIT
2020-03-06 07:55:46 +02:00
Scott Mansell
20fc6a489e
Fix STOS to not load SSA regs across blocks
2020-03-06 07:55:45 +02:00
Ryan Houdek
ee53b70bfe
Actually enable LLVM optimization passes in the LLVM JIT
...
We were using whatever was the LLVM default before.
2020-03-06 07:55:45 +02:00
Ryan Houdek
9e132e107a
Adds alignment information to the mem loadstore IR ops
...
Allows us to not always emit unaligned loadstore ops for these
2020-03-06 07:55:45 +02:00
Ryan Houdek
f8b858e7fc
Removes the EndFunction IR Op
2020-03-06 07:55:45 +02:00
Ryan Houdek
db7b3d415d
Adds VBitcast IR op
...
Casts vector to a integer of the same width as the vector
2020-03-06 07:55:44 +02:00
Ryan Houdek
3eb55d5f9f
Fixes LLVM JIT with multiblock
2020-03-06 07:55:44 +02:00
Ryan Houdek
435357e06e
Fixes a bug in STOS
2020-03-06 07:55:44 +02:00
Ryan Houdek
4e5d9452f7
Syscall doesn't end a block
2020-03-06 07:55:44 +02:00
Ryan Houdek
a8d2cb4a9f
Fixes LLVM JIT
...
Doesn't yet work with multiblock
2020-03-06 07:55:44 +02:00
Ryan Houdek
3a041c3b1c
Fixes bug in block creation for any block containing RET.
...
Would have a redundant StoreContext after the RET which broke IR
analysis
2020-03-06 07:55:44 +02:00
Ryan Houdek
e1cecbcfe3
Changes to the new multiblock frontend decoder
...
Simple linear scan forward of instruction decoding isn't viable to do.
We need to break up the decoding at the block boundaries.
Otherwise our decoding gets in to the weeds and decodes trash.
2020-03-06 07:55:37 +02:00
Ryan Houdek
5db8de625a
Adds a few new instructions to the X86Tables
...
I managed to hit these when messing with Multiblock.
2020-03-06 07:55:37 +02:00
Ryan Houdek
b7c7a34cf6
Changes (aggressively) how branching is handled in the frontend.
...
This changes over CondJump to have a defined True and False branch path.
Additionally needing to change over everything to handle this.
This now means that a false branch condition will no longer assume
fallthrough past this instruction.
Currently the x86-64 JIT generates an additional jmp instruction on
fallthrough that isn't optimized away.
This is working towards improvements in our IR branching model and
improving IRValidation in doing so.
This is working towards the model that IRBlocks can only have 0-2
successors.
Ret/Exit - 0 successors
Jump - 2 successors
CondJump - 2 successors
TBD:
Syscall/CPUID - Breaking block?
2020-03-06 07:55:37 +02:00
Ryan Houdek
fc8c6c80fb
Makes sure in Frontend we say that Entry and ConditionalJump fallthroughs are JumpTargets
2020-03-06 07:55:37 +02:00
Ryan Houdek
7da7880a41
Splits X86Table definitions in to multiple files
...
Allows YouCompleteMe to handle these files and makes recompiling less of
a pain when one line is changed.
2020-03-06 07:55:36 +02:00
Scott Mansell
d1f2d85d0c
Fix up usage tracking of Args.
...
Make sure we keep them up to date when removing
nodes.
2020-03-06 07:55:36 +02:00
Ryan Houdek
160240dc23
Adds a few AVX instructions to the X86Tables
2020-03-06 07:55:35 +02:00
Ryan Houdek
6890ae4e20
Adds an inblock time sampling routine to the x86-64 JIT
...
Useful for a quick overview of the time spent in a function. It isn't
amazing for profiling since it effects the time in the function by
itself.
Only useful as a reference.
2020-03-06 07:55:35 +02:00
Ryan Houdek
0a959475c5
Removes support for non-RA path on x86-64 JIT
...
RA is now fully working, so this path is no longer necessary
2020-03-06 07:55:35 +02:00
Ryan Houdek
668d392eb7
Adds support for spilling in the AArch64 JIT
2020-03-06 07:55:35 +02:00