aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Yet Another Ruby JIT!Jose Narvaez2021-10-2036-1320/+1312
| | | | Renaming uJIT to YJIT. AKA s/ujit/yjit/g.
* YJIT: handle when all counters are zero in printout codeAlan Wu2021-10-201-1/+6
| | | | | | | Also filter with not equal to zero instead of greater than zero, in case there is memory corruption and counters are negative. Fixes Shopify/ruby#70
* Update ujit_core.hMaxime Chevalier-Boisvert2021-10-201-1/+1
|
* Update ujit_core.hMaxime Chevalier-Boisvert2021-10-201-1/+1
| | | Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
* Machinery to implement deferred compilationMaxime Chevalier-Boisvert2021-10-205-49/+94
|
* YJIT: fix leak, remove unused field on block_tAlan Wu2021-10-204-6/+0
| | | | This field was never used and is now covered by jit_mov_gc_ptr.
* YJIT: Use 2D array to group block versionsAlan Wu2021-10-203-44/+48
| | | | | For deferred compilation, we sometimes want to care about the order of the block versions. Use an array instead of a linked list to do that.
* Rename test filesMaxime Chevalier-Boisvert2021-10-203-0/+0
|
* Update yjit.mdMaxime Chevalier-Boisvert2021-10-201-4/+4
|
* Update yjit.mdMaxime Chevalier-Boisvert2021-10-201-2/+2
|
* Update yjit.mdMaxime Chevalier-Boisvert2021-10-201-15/+15
|
* Update and rename ujit.md to yjit.mdMaxime Chevalier-Boisvert2021-10-201-2/+2
|
* WIP refactor block lists to use darrayMaxime Chevalier-Boisvert2021-10-205-66/+78
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-0/+1
|
* uJIT: support 64 bit operands for TEST. Use it to check for zeroAlan Wu2021-10-203-5/+6
| | | | | | | | | It's one byte shorter than `cmp reg64, 0`. To illustrate: ``` 48 83 f9 00 cmp rcx, 0x0 48 85 c9 test rcx, rcx ```
* Add UJIT.reset_stats!Alan Wu2021-10-202-0/+19
| | | | To allow analyzing sections of the application.
* uJIT: Add exit counters for leave and refactor stats printout codeAlan Wu2021-10-203-6/+15
| | | | | | | | | | | | Filter out counters that are zero and make it easier to have multiple printout groups. On `railsbench`: ``` opt_send_without_block exit reasons: se_finish_frame 184809 (100.0%) ```
* uJIT: add guards for protected opt_send_without_block callsAlan Wu2021-10-202-8/+29
| | | | | These account for about 12% of the time when we were bailing from calls in railsbench. `ratio_in_ujit` went up 0.1% with this change.
* At jit_at_current_insn, jit_peek_at_stack functionsMaxime Chevalier-Boisvert2021-10-203-0/+83
|
* Runtime counters for bailing from opt_send_without_blockAlan Wu2021-10-206-66/+281
| | | | | | This allows counting things in generated code such as side exits or different reasons for failing to compile. Runtime counters are exposed to Ruby as `UJIT.runtime_stats` for ease of reporting and analysis.
* Update ec->cfp->pc when hitting a stub.Maxime Chevalier-Boisvert2021-10-204-15/+29
|
* Thread EC through jit state. Add codegen status enum.Maxime Chevalier-Boisvert2021-10-207-203/+169
|
* Support memory operands to popMax Bernstein2021-10-202-7/+17
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-1/+1
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-3/+5
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-1/+12
|
* Support memory operands to pushMax Bernstein2021-10-203-9/+19
|
* Fix jmp encoding. Rename conditional jumps jxx() to jxx_label()Maxime Chevalier-Boisvert2021-10-204-67/+77
|
* uJIT: Implement opt_getinlinecacheAlan Wu2021-10-208-44/+165
| | | | | | | | | | | | | | | | | * ujit: implement opt_getinlinecache Aggressively bet that writes to constants don't happen and invalidate all opt_getinlinecache blocks on any and all constant writes. Use alignment padding on block_t to track this assumption. No change to sizeof(block_t). * Fix compile warnings when not RUBY_DEBUG * Fix reversed condition * Switch to st_table to keep track of assumptions Co-authored-by: Aaron Patterson <aaron.patterson@gmail.com> Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com>
* Implement support for variadic C functionsMaxime Chevalier-Boisvert2021-10-202-8/+38
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-1/+1
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-1/+1
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-0/+2
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-1/+9
|
* Update ujit_iface.cMaxime Chevalier-Boisvert2021-10-201-1/+1
|
* Update ujit_iface.cMaxime Chevalier-Boisvert2021-10-201-2/+0
|
* Implement --ujit-call-thresholdMaxime Chevalier-Boisvert2021-10-204-17/+31
|
* Remove dead codeAlan Wu2021-10-201-17/+0
|
* darray: fix strict aliasing issueAlan Wu2021-10-201-2/+6
|
* Use rb_darray_make in ujitAlan Wu2021-10-201-3/+6
|
* Add rb_darray_makeAlan Wu2021-10-201-6/+35
|
* darray: fix buffer size calculation for element with strict alignmentAlan Wu2021-10-201-19/+23
|
* Added ujit_save_regs() and ujit_load_regs() helper functionsMaxime Chevalier-Boisvert2021-10-201-40/+32
|
* Use darray for incoming branchesMaxime Chevalier-Boisvert2021-10-203-29/+18
|
* Free your memories!Alan Wu2021-10-201-0/+1
|
* Stop using UJIT.install_entry in btestAlan Wu2021-10-201-6/+7
| | | | | CI runs on some platforms uJIT doesn't support. They don't have UJIT.install_entry. Maybe we want something like `install_entry_if_possible`.
* Mark and update object references in generated codeAlan Wu2021-10-205-11/+85
| | | | Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com>
* Check for ::Array, not T_ARRAY in opt_arefAlan Wu2021-10-202-6/+24
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-1/+23
|
* Update ujit.mdMaxime Chevalier-Boisvert2021-10-201-0/+4
|