Maxime Chevalier-Boisvert
dde69ab5c6
Fix ujit block hash table bug
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
136bf983be
Fix bug with ujit code invalidation
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
37ad374607
Added gen_direct_jump() for unary branches
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
187435c117
Complete refactoring to eliminate recursion in ujit's compilation
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
02a9700475
End current block after opt_send_without_block
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
79331368b9
Added block end index
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
59eb98fbaa
Fix ujit cc/cme invalidation code for opt_send_without_block
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
4a57107696
Sketch code to invalidate basic blocks. Rename version_t to block_t.
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
92e9b24586
Keep track of incoming branches in ujit
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
2cf32e5505
Refactor ujit logic for generating iseq entry points
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
ef08af9376
Progress on code invalidation
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
3a74011ff8
Introduce version_t struct. Will be needed for code invalidation.
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
a251059070
Fix hash map key issue
2021-10-20 18:19:27 -04:00
Maxime Chevalier-Boisvert
7e60ce357b
Fix uint cast bug caught by Alan
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
2cc0db12fe
Refactorings in ujit. Implement Ruby jump instruction.
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
1744c15578
Avoid generating redundant interpreter exit code after branches
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
97cffcf79a
Fix sneaky ujit side-exit bug. Reduce ujit call threshold to 1.
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
542f2ba09e
Use a versioning context when compiling blocks
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
df16bf97ec
Split out context object into jitstate_t and ctx_t
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
5e39d83fbd
Split out compile_entry() from compile_block()
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
4592ef9d76
Fixed one bug in compile_block.
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
e9344ae408
Stub logic working for fib test, but still crashing in other cases
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
7d7e58d352
Implement branch stub logic
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
40b70ef7c7
WIP branch generation code
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
bd7cc9ed98
Thread insn_idx through context object
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
868a6809e7
Add sign-extended mode for test() instruction
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
8ae354e9be
Implemented opt_lt. Prelude to branch instructions.
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
20f5b7426e
Start implementing BBV primitives
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
f7717b1d46
Start refactoring JIT engine
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
f761e9ee64
Move code into ujit_iface.c
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
e4c65ec49c
Refactor uJIT code into more files for readability
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
7be67a6c08
Implemented opt_plus in MicroJIT
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
ec42378196
Rename function and variable
2021-10-20 18:19:26 -04:00
Alan Wu
fa04478e9e
MicroJIT: coalesce heap pointer check on self
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
4d964e2582
Implemented setinstancevariable
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
e2e70f69f3
Add comment wrt getivar and allocators
2021-10-20 18:19:26 -04:00
Aaron Patterson
be91995a5e
Remove T_OBJECT runtime check
...
If the cached class uses the default allocator, then all instances
coming from the class should be T_OBJECT instances. Meaning we can just
check the allocator function at compile time, then skip the runtime
T_OBJECT check
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
e17053c720
Basic implementation of getivar for MicroJIT
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
1cd4c8b294
Deoptimize on side-exit
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
64072dd3a6
Rename variables for clarity
2021-10-20 18:19:26 -04:00
Alan Wu
b75169a440
Fix typo
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
6a9a516dc5
Print to stderr in ujit_utils.c
2021-10-20 18:19:26 -04:00
Alan Wu
50d8c3d443
MicroJIT: Count number of compiled instructions better
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
ba92d40d9b
Fix warning
2021-10-20 18:19:26 -04:00
Alan Wu
68b0f69a0d
Make a bunch of functions compilation unit local
2021-10-20 18:19:26 -04:00
Alan Wu
5f9beb9b1b
Include disassembly in MicroJIT scraper output
2021-10-20 18:19:26 -04:00
Alan Wu
188c54428c
MicroJIT: avoid having to invalidate running output code
2021-10-20 18:19:26 -04:00
Alan Wu
9ce9f613b0
Update comment for ujit_compile_insn
2021-10-20 18:19:26 -04:00
Alan Wu
c378c7a7cb
MicroJIT: generate less code for CFUNCs
...
Added UJIT_CHECK_MODE. Set to 1 to double check method dispatch in
generated code.
It's surprising to me that we need to watch both cc and cme. There might
be opportunities to simplify there.
2021-10-20 18:19:26 -04:00
Maxime Chevalier-Boisvert
0c52371c47
Don't create a stack frame for Hash#key?
2021-10-20 18:19:25 -04:00