summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-08-29Add LiveReg IR instruction to fix stats leave exit code ↵Alan Wu
(https://github.com/Shopify/ruby/pull/341) It allows for reserving a specific register and prevents the register allocator from clobbering it. Without this `./miniruby --yjit-stats --yjit-callthreshold=1 -e0` was crashing because the counter incrementing code was clobbering RAX incorrectly.
2022-08-29Fix CI workflowsMaxime Chevalier-Boisvert
2022-08-29Fixes (https://github.com/Shopify/ruby/pull/340)Kevin Newton
* Fix conditional jumps to label * Bitmask immediates cannot be u64::MAX
2022-08-29Fixes for AArch64 (https://github.com/Shopify/ruby/pull/338)Kevin Newton
* Better splitting for Op::Add, Op::Sub, and Op::Cmp * Split stores if the displacement is too large * Use a shifted immediate argument * Split all places where shifted immediates are used * Add more tests to the cirrus workflow
2022-08-29Enable more btestsMaxime Chevalier-Boisvert
2022-08-29Add ifdef to clear cacheMaxime Chevalier-Boisvert
2022-08-29Clear the icache on armMaxime Chevalier-Boisvert
2022-08-29Port and test duparray and splatarray (https://github.com/Shopify/ruby/pull/337)Noah Gibbs
* Port duparray opcode * Port and test splatarray
2022-08-29Fix bug with opt_lt, csel on x86Maxime Chevalier-Boisvert
2022-08-29Work on opt_lt, fix x86 backend bug in cmp()Maxime Chevalier-Boisvert
2022-08-29Fixes (https://github.com/Shopify/ruby/pull/336)Kevin Newton
* Fix bitmask encoding to u32 * Fix splitting for Op::And to account for bitmask immediate
2022-08-29Enable more btests in the CI workflows ↵Maxime Chevalier-Boisvert
(https://github.com/Shopify/ruby/pull/334) * Enable more btests in the CI workflows * Update workflows
2022-08-29Better splitting for Op::Test on AArch64 ↵Kevin Newton
(https://github.com/Shopify/ruby/pull/335)
2022-08-29Fix crash in newhash ccallMaxime Chevalier-Boisvert
2022-08-29Fix corrupted X29 causing segfault, thanks Alan!Maxime Chevalier-Boisvert
2022-08-29Port over newrangeMaxime Chevalier-Boisvert
2022-08-29Port over setlocal and getglobalMaxime Chevalier-Boisvert
2022-08-29Temporarily simplify code for emit_conditional_jump to fix a bugMaxime Chevalier-Boisvert
2022-08-29Refactor YJIT branches to use PosMarker ↵Maxime Chevalier-Boisvert
(https://github.com/Shopify/ruby/pull/333) * Refactor defer_compilation to use PosMarker * Port gen_direct_jump() to use PosMarker * Port gen_branch, branchunless * Port over gen_jump() * Port over branchif and branchnil * Fix use od record_boundary_patch_point in jump_to_next_insn
2022-08-29Update disasm to work on ARM (https://github.com/Shopify/ruby/pull/331)Noah Gibbs
2022-08-29Fix dupn (https://github.com/Shopify/ruby/pull/330)Noah Gibbs
* get_dupn was allocating and throwing away an Assembler object instead of using the one passed in * Uncomment remaining tests in codegen.rs, which seem to work now
2022-08-29Implement PosMarker instruction (https://github.com/Shopify/ruby/pull/328)Maxime Chevalier-Boisvert
* Implement PosMarker instruction * Implement PosMarker in the arm backend * Make bindgen run only for clang image * Fix if-else in cirrus CI file * Add missing semicolon * Try removing trailing semicolon * Try to fix shell/YAML syntax Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
2022-08-29A lot of fixes coming from our pairing session ↵Kevin Newton
(https://github.com/Shopify/ruby/pull/329) * Move to/from SP on AArch64 * Consolidate loads and stores * Implement LDR post-index and LDR pre-index for AArch64 * Implement STR post-index and STR pre-index for AArch64 * Module entrypoints for LDR pre/post -index and STR pre/post -index * Use STR (pre-index) and LDR (post-index) to implement push/pop * Go back to using MOV for to/from SP
2022-08-29Fix push/pop and frame setup/teardown with Kevin & AlanMaxime Chevalier-Boisvert
2022-08-29Fix some of the codegen.rs tests (https://github.com/Shopify/ruby/pull/327)Noah Gibbs
2022-08-29Assert not the same register in AArch64Kevin Newton
2022-08-29BLR instruction for AArch64 (https://github.com/Shopify/ruby/pull/325)Kevin Newton
2022-08-29Use frame_setup() and frame_teardown()Maxime Chevalier-Boisvert
2022-08-29AArch64 frames (https://github.com/Shopify/ruby/pull/324)Kevin Newton
2022-08-29ADR fixes for LeaLabel and callsMaxime Chevalier-Boisvert
2022-08-29Conditionals (https://github.com/Shopify/ruby/pull/323)Kevin Newton
* CSEL on AArch64 * Implement various Op::CSel* instructions
2022-08-29Port print_int to the new backend (https://github.com/Shopify/ruby/pull/321)Kevin Newton
* Port print_int to the new backend * Tests for print_int and print_str
2022-08-29Update cirrus workflowMaxime Chevalier-Boisvert
2022-08-29Fix jumps (https://github.com/Shopify/ruby/pull/322)Kevin Newton
2022-08-29Add --yjit-dump-insns test to Cirrus Arm workflowMaxime Chevalier-Boisvert
2022-08-29Fix bug with LeaLabel on x86, add CI testMaxime Chevalier-Boisvert
2022-08-29Fix comment typoMaxime Chevalier-Boisvert
2022-08-29Port print_str to new backend (https://github.com/Shopify/ruby/pull/318)Kevin Newton
* ADR and ADRP for AArch64 * Implement Op::Jbe on X86 * Lera instruction * Op::BakeString * LeaPC -> LeaLabel * Port print_str to the new backend * Port print_value to the new backend * Port print_ptr to the new backend * Write null-terminators in Op::BakeString * Fix up rebase issues on print-str port * Add back in panic for X86 backend for unsupported instructions being lowered * Fix target architecture
2022-08-29Port newhash, add tests for newhash, duphashMaxime Chevalier-Boisvert
2022-08-29Add extra assertion in new_label for KevinMaxime Chevalier-Boisvert
2022-08-29Exclude X0 (C_RET_REG) from allocatable registers on arm ↵Maxime Chevalier-Boisvert
(https://github.com/Shopify/ruby/pull/319) * Exclude X0 (C_RET_REG) from allocatable registers on arm * Add another small test snippett
2022-08-29Op::CPushAll and Op::CPopAll (https://github.com/Shopify/ruby/pull/317)Kevin Newton
Instructions for pushing all caller-save registers and the flags so that we can implement dump_insns.
2022-08-29Assert that the # of bytes matches for label refs ↵Kevin Newton
(https://github.com/Shopify/ruby/pull/316)
2022-08-29Encode MRS and MSR for AArch64 (https://github.com/Shopify/ruby/pull/315)Kevin Newton
2022-08-29Fix compile errors on arm on the CI (https://github.com/Shopify/ruby/pull/313)Maxime Chevalier-Boisvert
* Fix compile errors on arm on the CI * Fix typo
2022-08-29Port over putstringMaxime Chevalier-Boisvert
2022-08-29Port over setlocal_wc0Maxime Chevalier-Boisvert
2022-08-29Port gen_getlocal()Maxime Chevalier-Boisvert
2022-08-29Port YJIT New Backend Temp Checks to Cirrus ↵Maxime Chevalier-Boisvert
(https://github.com/Shopify/ruby/pull/312) Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2022-08-29Better label refs (https://github.com/Shopify/ruby/pull/310)Kevin Newton
Previously we were using a `Box<dyn FnOnce>` to support patching the code when jumping to labels. We needed to do this because some of the closures that were being used to patch needed to capture local variables (on both X86 and ARM it was the type of condition for the conditional jumps). To get around that, we can instead use const generics since the condition codes are always known at compile-time. This means that the closures go from polymorphic to monomorphic, which means they can be represented as an `fn` instead of a `Box<dyn FnOnce>`, which means they can fall back to a plain function pointer. This simplifies the storage of the `LabelRef` structs and should hopefully be a better default going forward.