Ryan Houdek
b199ce70e9
Changes over IRValidation to the new format.
...
We still can't pass this validation pass
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
86fc779f81
Add getcwd syscall
2020-03-06 07:55:36 +02:00
Scott Mansell
597ee06243
Add ConstProp for Mul
2020-03-06 07:55:36 +02:00
Scott Mansell
5263f94d84
Elimitate loads before const prop
2020-03-06 07:55:36 +02:00
Scott Mansell
b148afef4b
Add Dead Code Elimitation pass
...
Refactor the previous WIP to use NumUses
2020-03-06 07:55:36 +02:00
Scott Mansell
b34465544a
Fix Incorrect tracking during Redudent Flag pass
2020-03-06 07:55:36 +02:00
Scott Mansell
8e34a74030
Keep node usage when compacting
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
Scott Mansell
b054807270
WIP Dead Code Elimitation pass
2020-03-06 07:55:36 +02:00
Ryan Houdek
741599baa8
Update IR documentation
2020-03-06 07:55:36 +02:00
Ryan Houdek
aabc6f6de2
Extends ConstProp pass a bit more.
...
Still doesn't cover all the IROps but it hits quite a few more that I
could see.
2020-03-06 07:55:35 +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
Ryan Houdek
0eb86389de
Cleans up RA spill slot calculation.
...
RA spill slots now have live ranges so we can reuse the spill slot.
This can reduce spill stack usage significantly in code ranges with
large live ranges.
2020-03-06 07:55:35 +02:00
Ryan Houdek
b2ffa28759
Adds gitignore
2020-03-06 07:55:35 +02:00
Ryan Houdek
012805fd72
Fixes multiblock and a few bugs in RA.
...
This makes it so multiblock can now be enabled with the JITs.
Results in a decent performance increase by itself.
2020-03-06 07:55:35 +02:00
Ryan Houdek
625112780a
Adds support for IR::Print to the x86 JIT
2020-03-06 07:55:34 +02:00
Ryan Houdek
c105c52d67
Changes IRValidation to use the new IR::GetArgs function.
2020-03-06 07:55:34 +02:00
Ryan Houdek
05205515b5
Handle IR::Break on x86-64 better
...
HLT converts to Break, which is used for leaving the VM so we need to
handle that correctly.
2020-03-06 07:55:34 +02:00
Ryan Houdek
1a3498107b
Minor cleanup in the non-RA x86 JIT path
2020-03-06 07:55:34 +02:00
Ryan Houdek
26a3290b43
Fix a couple mistakes in the x86 JIT using movsx instead of movsxd
2020-03-06 07:55:34 +02:00
Ryan Houdek
570ff7b29b
Supports FS/GS on CMPXCHG
2020-03-06 07:55:33 +02:00
Ryan Houdek
52b5ac9e19
Changes slightly how IR::IRHeader is represented
2020-03-06 07:55:33 +02:00
Ryan Houdek
f27f9485f6
Changes IR::CondJump's condition to dump textually.
2020-03-06 07:55:33 +02:00
Ryan Houdek
a8ff6414c1
Fixes indent failure on IR dumping.
...
Depending on IR ordering then it could have wrapped around to max
indent.
2020-03-06 07:55:22 +02:00
Ryan Houdek
7a43b3150b
Fixes bug in frontend displacement calculation
...
When an instruction had a literal and also a SIB displacement then this
was causing it to be calculated incorrectly.
2020-03-06 07:55:21 +02:00
Ryan Houdek
a8bb815a76
Adds IR::ADD to constprop pass.
2020-03-06 07:55:21 +02:00
Ryan Houdek
218f38ff3d
Adds new IR::GetArgs
function
...
This returns SSA args that will eventually be register allocated.
2020-03-06 07:55:20 +02:00
Ryan Houdek
58e019fbf1
Disabled AVX512 reporting in CPUID
...
We don't support it and it'll be something we won't want to support for
a long time.
2020-03-06 07:55:20 +02:00
Ryan Houdek
1b751f11dc
Fixes a bug in BitSet
...
If the number of nodes in a bitset grew too large then it wouldn't fit
in that calculation.
2020-03-06 07:55:19 +02:00
Ryan Houdek
6d92146578
Flesh out X86Tables some more
...
Adds an EVEX table and throws some ops in to an unimplemented function.
This is necessary for multiblock in the future where it will see
unsupported instructions but not actually execute them.
2020-03-06 07:55:18 +02:00
Scott Mansell
d32ebc0de0
Signal our lack of support for CET shadow stacks
...
Needed to support binaries linked with glibc 2.30 and later.
glibc doesn't actually check CPUID, as kernel support is needed.
Instead, it just calls ARCH_CET_STATUS and checks for an error.
2020-03-06 07:55:18 +02:00
Ryan Houdek
13a15d6f3e
Fix RA pass to support spilling
2020-03-06 07:55:17 +02:00
Ryan Houdek
3f0d020899
Add support for an Invalid NodeWrapperIterator
2020-03-06 07:55:17 +02:00
Ryan Houdek
db5467211c
Fixes the AArch64 JIT
...
Moves it to the new IR iterating style.
Forgot to clear icache after generation.
Fixes overly aggressive struct packing causing a fault
2020-03-06 07:55:16 +02:00
Ryan Houdek
c21f711417
Adds a JitSymbols interface
...
This allows linux perf to see execution inside of JIT functions.
This could be extended in the future to support something like vtune or
oprofile.
2020-03-06 07:55:16 +02:00
Ryan Houdek
d645e58721
Remove some debug logs
2020-03-06 07:55:15 +02:00
Ryan Houdek
1dbeff462c
Fixes Redundant Context Load Elimination pass
...
Allows other passes to see more things it can optimize
`ReplaceAllUsesWith` is a bit of a trap and needs to be replaced.
2020-03-06 07:55:14 +02:00
Ryan Houdek
4ccdd689ce
Fixes a bug in the CBW/CWDE/CDQE instruction
...
Was running at the wrong size the entire time
2020-03-06 07:55:14 +02:00
Ryan Houdek
199cfd76d8
Refactor IR and other changes that are hard to split
...
I had to change how blocks are represented to make it easier to parse
This required a fairly substantial refactor that makes it so blocks are
represented differently and we can walk them sequentially.
This will make future analysis easier to deal with.
Had to rewrite the passes and core's parsing of the IR afterwards.
Moved RA in to a optimization pass to be shared between the JIT backends
This works because x86-64 and AArch64 RA can be identical.
Still doesn't support PHI nodes or spilling correctly, this is the first
step in the process of getting there.
2020-03-06 07:55:13 +02:00
Ryan Houdek
6ac9f93d0d
Update vixl submodule
2020-03-06 07:54:33 +02:00
Ryan Houdek
2975161e89
Cleanup the Frontend x86 decoder
...
Makes it easier to follow the source
2020-03-06 07:54:32 +02:00
Ryan Houdek
71a9713970
Add some stracing to the syscall emulation
2020-03-06 07:54:32 +02:00
Ryan Houdek
55b4eb8689
Defined a few more Linux syscalls
2020-03-06 07:54:32 +02:00
Ryan Houdek
c2e8c8d430
Minor cleanup in BlockCache
2020-03-06 07:54:31 +02:00