From: Bryan English Date: Fri, 30 Jan 2026 03:42:35 +0000 (-0500) Subject: implement rot X-Git-Url: https://rethought.computer/gitweb//gitweb//git?a=commitdiff_plain;h=39612e27c420e7c9b07d04c35e60f8c6316b1775;p=sorel-lang.git implement rot --- diff --git a/rel-lang/rel-ir/src/lib.rs b/rel-lang/rel-ir/src/lib.rs index 88173de..4eb4542 100644 --- a/rel-lang/rel-ir/src/lib.rs +++ b/rel-lang/rel-ir/src/lib.rs @@ -29,6 +29,7 @@ pub enum IR { Swap, Drop, Over, + Rot, PutS, PutN, If, diff --git a/rel-lang/relc/src/ir.rs b/rel-lang/relc/src/ir.rs index d0b90a4..9ab9831 100644 --- a/rel-lang/relc/src/ir.rs +++ b/rel-lang/relc/src/ir.rs @@ -117,6 +117,7 @@ impl ImportTree { "swap" => IR::Swap, "drop" => IR::Drop, "over" => IR::Over, + "rot" => IR::Rot, "puts" => IR::PutS, "putn" => IR::PutN, "if" => IR::If, diff --git a/rel-lang/relc/src/riscv_asm_codegen.rs b/rel-lang/relc/src/riscv_asm_codegen.rs index 8319192..4edfe4e 100644 --- a/rel-lang/relc/src/riscv_asm_codegen.rs +++ b/rel-lang/relc/src/riscv_asm_codegen.rs @@ -210,6 +210,13 @@ impl<'a> CodeGen<'a> { self.push_from("t0"); self.push_from("t1"); }, + IR::Rot => { + self.label("# rot"); + self.pop_some_to("t0 t1 t2"); + self.push_from("t1"); + self.push_from("t2"); + self.push_from("t0"); + }, IR::Drop => { self.label("# drop"); self.move_stack_ptr_by_cells(1);