]> rethought.computer Git - sorel-lang.git/commitdiff
implement rot keep/39612e27c420e7c9b07d04c35e60f8c6316b1775
authorBryan English <bryan@rethought.computer>
Fri, 30 Jan 2026 03:42:35 +0000 (22:42 -0500)
committerBryan English <bryan@rethought.computer>
Tue, 10 Feb 2026 04:08:54 +0000 (04:08 +0000)
rel-lang/rel-ir/src/lib.rs
rel-lang/relc/src/ir.rs
rel-lang/relc/src/riscv_asm_codegen.rs

index 88173deb68a0b67308ba61723639b35045052f09..4eb45427c2f13acbcf7d0a779a5e54342973975e 100644 (file)
@@ -29,6 +29,7 @@ pub enum IR {
     Swap,
     Drop,
     Over,
+    Rot,
     PutS,
     PutN,
     If,
index d0b90a417f3ba9d9fb60ef9cd526c6d671ab219e..9ab9831ff231ed30cd48fdf10edef51ed58b5530 100644 (file)
@@ -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,
index 8319192416d7d527987de28421aa4c3854eed76e..4edfe4e75b3af5473fd0627cbd2277eda265cdff 100644 (file)
@@ -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);