From: Bryan English Date: Sat, 21 Feb 2026 21:22:41 +0000 (-0500) Subject: add argc and argv to the stack at startup X-Git-Url: https://rethought.computer/gitweb//gitweb//git?a=commitdiff_plain;h=54a569c4125624c465401c9ec365a8a14ae3cf39;p=sorel-lang.git add argc and argv to the stack at startup --- diff --git a/sorel-codegen/src/riscv64_asm.rs b/sorel-codegen/src/riscv64_asm.rs index 692eca0..4b2f272 100644 --- a/sorel-codegen/src/riscv64_asm.rs +++ b/sorel-codegen/src/riscv64_asm.rs @@ -142,11 +142,16 @@ impl<'a> CodeGen<'a> { self.label(".globl _start"); // TODO is globl necessary? self.label("_start:"); self.line("la s2, data_stack_end # set initial data stack pointer"); + self.line("ld t0, 0(sp) # t0 = argc"); + self.line("addi t1, sp, 8 # t1 = argv"); + self.push_from("t0"); + self.push_from("t1"); } else { let mangled = mangle(name); self.label(format!(".globl {}", mangled)); self.label(format!("{}:", mangled)); } + self.line("addi sp, sp, -16 # allocate 16 bytes on stack"); // allocate 16 bytes on stack self.line("sd ra, 8(sp) # store return address on stack"); // store return address on stack }, diff --git a/tests/test.sh b/tests/test.sh index ab7a145..e239f87 100644 --- a/tests/test.sh +++ b/tests/test.sh @@ -8,3 +8,8 @@ CC="${CMD_PREFIX}cc" $AS -g -o test1.o test1.asm $LD -o test1.out test1.o ./test1.out + +../target/debug/sorelc test2.sorel +$AS -g -o test2.o test2.asm +$LD -o test2.out test2.o +./test2.out diff --git a/tests/test2.sorel b/tests/test2.sorel new file mode 100644 index 0000000..0ff5b41 --- /dev/null +++ b/tests/test2.sorel @@ -0,0 +1,17 @@ +\ vim: filetype=forth + +import "std:out" + +swap \ ( argv argc ) +dup \ ( argv argc argc ) +loop \ ( argv argc ) + swap \ ( argc argv ) + dup \ ( argc argv argv ) + @ \ ( argc argv addr-to-arg-str ) + puts " " puts drop + drop \ ( argc argv ) + 8 + \ ( argc argv+8 ) + swap \ ( argv+8 argc ) + 1 - \ ( argv+8 argc-1 ) + dup \ ( argv+8 argc-1 argc-1 ) +endloop