summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2024-10-01 18:22:10 -0400
committerFreya Murphy <freya@freyacat.org>2024-10-01 18:22:10 -0400
commit091c684bf1d2cca09da001b9170b205dbe5c333f (patch)
treee7dd5091ddb989b1eae35f8a5130a66b2d7b4d9b
parentdont hardcode RA in JALR (diff)
downloadmips-091c684bf1d2cca09da001b9170b205dbe5c333f.tar.gz
mips-091c684bf1d2cca09da001b9170b205dbe5c333f.tar.bz2
mips-091c684bf1d2cca09da001b9170b205dbe5c333f.zip
add recursion test, add noops for branch delay slots
Diffstat (limited to '')
-rw-r--r--lib/runtime.asm1
-rw-r--r--test/masm/fncall.asm3
-rw-r--r--test/masm/fpe.asm (renamed from test/masm/div.asm)1
-rw-r--r--test/masm/hello.asm1
-rw-r--r--test/masm/recursion.asm41
-rw-r--r--test/masm/segv.asm (renamed from test/masm/fault.asm)1
-rw-r--r--test/out/fpe (renamed from test/out/div)2
-rw-r--r--test/out/fpe.status (renamed from test/out/div.status)0
-rw-r--r--test/out/recursion0
-rw-r--r--test/out/recursion.status1
-rw-r--r--test/out/segv (renamed from test/out/fault)2
-rw-r--r--test/out/segv.status (renamed from test/out/fault.status)0
12 files changed, 51 insertions, 2 deletions
diff --git a/lib/runtime.asm b/lib/runtime.asm
index 974fbe1..4422045 100644
--- a/lib/runtime.asm
+++ b/lib/runtime.asm
@@ -23,6 +23,7 @@ _start:
# call main
jal main
+ nop
# exit
move $a0, $v0
diff --git a/test/masm/fncall.asm b/test/masm/fncall.asm
index 96d1ba2..39455ab 100644
--- a/test/masm/fncall.asm
+++ b/test/masm/fncall.asm
@@ -11,6 +11,7 @@ result:
move $t0, $a0
move $v0, $t0
jr $ra
+ nop
main:
# save ra on stack
@@ -20,6 +21,7 @@ main:
# set return to 17
li $a0, 17
jal result
+ nop
# pop ra from stack
lw $ra, 0($sp)
@@ -27,3 +29,4 @@ main:
# return result
jr $ra
+ nop
diff --git a/test/masm/div.asm b/test/masm/fpe.asm
index b9b4f3f..a3725d5 100644
--- a/test/masm/div.asm
+++ b/test/masm/fpe.asm
@@ -15,3 +15,4 @@ main:
# return
li $v0, 0
jr $ra
+ nop
diff --git a/test/masm/hello.asm b/test/masm/hello.asm
index 2d64ae5..3819b2a 100644
--- a/test/masm/hello.asm
+++ b/test/masm/hello.asm
@@ -24,3 +24,4 @@ main:
# return 1
li $v0, 0
jr $ra
+ nop
diff --git a/test/masm/recursion.asm b/test/masm/recursion.asm
new file mode 100644
index 0000000..38982e1
--- /dev/null
+++ b/test/masm/recursion.asm
@@ -0,0 +1,41 @@
+# Copyright (c) 2024 Freya Murphy
+
+# file: recursion.asm
+# test: should recurse sum n..0 numbers
+
+.text
+.align 2
+.globl main
+
+main:
+ # init $a0
+ li $a0, 5
+
+sum:
+ # save stack
+ addiu $sp, $sp, -8
+ sw $ra, 0($sp)
+ sw $s0, 4($sp)
+
+ # load n from a0
+ move $s0, $a0
+
+ # skip if n is zero
+ li $v0, 0
+ beq $s0, $zero, add
+ nop
+ jal sum
+ addi $a0, $s0, -1
+
+add:
+ # n = n + returned
+ add $v0, $s0, $v0
+
+ # restore stack
+ lw $ra, 0($sp)
+ lw $s0, 4($sp)
+ addiu $sp, $sp, 8
+
+ # return
+ jr $ra
+ nop
diff --git a/test/masm/fault.asm b/test/masm/segv.asm
index df700cf..4102bc2 100644
--- a/test/masm/fault.asm
+++ b/test/masm/segv.asm
@@ -13,3 +13,4 @@ main:
# return
li $v0, 0
jr $ra
+ nop
diff --git a/test/out/div b/test/out/fpe
index 94b9ab8..e6aeb31 100644
--- a/test/out/div
+++ b/test/out/fpe
@@ -12,4 +12,4 @@ $v1: 0x00000000 $t3: 0x00000000 $s3: 0x00000000 $k1: 0x00000000
$a0: 0x00000000 $t4: 0x00000000 $s4: 0x00000000 $gp: 0x00000000
$a1: 0x00000000 $t5: 0x00000000 $s5: 0x00000000 $sp: 0x10001000
$a2: 0x00000000 $t6: 0x00000000 $s6: 0x00000000 $fp: 0x00000000
-$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x0040001c
+$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x00400024
diff --git a/test/out/div.status b/test/out/fpe.status
index d00491f..d00491f 100644
--- a/test/out/div.status
+++ b/test/out/fpe.status
diff --git a/test/out/recursion b/test/out/recursion
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/out/recursion
diff --git a/test/out/recursion.status b/test/out/recursion.status
new file mode 100644
index 0000000..60d3b2f
--- /dev/null
+++ b/test/out/recursion.status
@@ -0,0 +1 @@
+15
diff --git a/test/out/fault b/test/out/segv
index 938bb46..1796539 100644
--- a/test/out/fault
+++ b/test/out/segv
@@ -12,4 +12,4 @@ $v1: 0x00000000 $t3: 0x00000000 $s3: 0x00000000 $k1: 0x00000000
$a0: 0x00000000 $t4: 0x00000000 $s4: 0x00000000 $gp: 0x00000000
$a1: 0x00000000 $t5: 0x00000000 $s5: 0x00000000 $sp: 0x10001000
$a2: 0x00000000 $t6: 0x00000000 $s6: 0x00000000 $fp: 0x00000000
-$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x00400018
+$a3: 0x00000000 $t7: 0x00000000 $s7: 0x00000000 $ra: 0x00400020
diff --git a/test/out/fault.status b/test/out/segv.status
index d00491f..d00491f 100644
--- a/test/out/fault.status
+++ b/test/out/segv.status