From 091c684bf1d2cca09da001b9170b205dbe5c333f Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Tue, 1 Oct 2024 18:22:10 -0400 Subject: add recursion test, add noops for branch delay slots --- test/masm/div.asm | 17 ----------------- test/masm/fault.asm | 15 --------------- test/masm/fncall.asm | 3 +++ test/masm/fpe.asm | 18 ++++++++++++++++++ test/masm/hello.asm | 1 + test/masm/recursion.asm | 41 +++++++++++++++++++++++++++++++++++++++++ test/masm/segv.asm | 16 ++++++++++++++++ test/out/div | 15 --------------- test/out/div.status | 1 - test/out/fault | 15 --------------- test/out/fault.status | 1 - test/out/fpe | 15 +++++++++++++++ test/out/fpe.status | 1 + test/out/recursion | 0 test/out/recursion.status | 1 + test/out/segv | 15 +++++++++++++++ test/out/segv.status | 1 + 17 files changed, 112 insertions(+), 64 deletions(-) delete mode 100644 test/masm/div.asm delete mode 100644 test/masm/fault.asm create mode 100644 test/masm/fpe.asm create mode 100644 test/masm/recursion.asm create mode 100644 test/masm/segv.asm delete mode 100644 test/out/div delete mode 100644 test/out/div.status delete mode 100644 test/out/fault delete mode 100644 test/out/fault.status create mode 100644 test/out/fpe create mode 100644 test/out/fpe.status create mode 100644 test/out/recursion create mode 100644 test/out/recursion.status create mode 100644 test/out/segv create mode 100644 test/out/segv.status (limited to 'test') diff --git a/test/masm/div.asm b/test/masm/div.asm deleted file mode 100644 index b9b4f3f..0000000 --- a/test/masm/div.asm +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) 2024 Freya Murphy - -# file: div.asm -# test: should cause floting point exception - -.text -.align 2 -.globl main - -main: - # divide by zero - li $t0, 0 - div $t0, $t0, $t0 - - # return - li $v0, 0 - jr $ra diff --git a/test/masm/fault.asm b/test/masm/fault.asm deleted file mode 100644 index df700cf..0000000 --- a/test/masm/fault.asm +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (c) 2024 Freya Murphy - -# file: div.asm -# test: should cause page fault - -.text -.align 2 -.globl main - -main: - lw $t0, 0($zero) - - # return - li $v0, 0 - jr $ra 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/fpe.asm b/test/masm/fpe.asm new file mode 100644 index 0000000..a3725d5 --- /dev/null +++ b/test/masm/fpe.asm @@ -0,0 +1,18 @@ +# Copyright (c) 2024 Freya Murphy + +# file: div.asm +# test: should cause floting point exception + +.text +.align 2 +.globl main + +main: + # divide by zero + li $t0, 0 + div $t0, $t0, $t0 + + # 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/segv.asm b/test/masm/segv.asm new file mode 100644 index 0000000..4102bc2 --- /dev/null +++ b/test/masm/segv.asm @@ -0,0 +1,16 @@ +# Copyright (c) 2024 Freya Murphy + +# file: div.asm +# test: should cause page fault + +.text +.align 2 +.globl main + +main: + lw $t0, 0($zero) + + # return + li $v0, 0 + jr $ra + nop diff --git a/test/out/div b/test/out/div deleted file mode 100644 index 94b9ab8..0000000 --- a/test/out/div +++ /dev/null @@ -1,15 +0,0 @@ - - !!! An exception has occurred !!! - -error: floating point exception -pc: 0x00400004 -ins: 0x0108409a -registers: -$zero: 0x00000000 $t0: 0x00000000 $s0: 0x00000000 $t8: 0x00000000 -$at: 0x00000000 $t1: 0x00000000 $s1: 0x00000000 $t9: 0x00000000 -$v0: 0x00000000 $t2: 0x00000000 $s2: 0x00000000 $k0: 0x00000000 -$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 diff --git a/test/out/div.status b/test/out/div.status deleted file mode 100644 index d00491f..0000000 --- a/test/out/div.status +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/test/out/fault b/test/out/fault deleted file mode 100644 index 938bb46..0000000 --- a/test/out/fault +++ /dev/null @@ -1,15 +0,0 @@ - - !!! An exception has occurred !!! - -error: page fault at (nil): address not mapped to object -pc: 0x00400000 -ins: 0x8c080000 -registers: -$zero: 0x00000000 $t0: 0x00000000 $s0: 0x00000000 $t8: 0x00000000 -$at: 0x00000000 $t1: 0x00000000 $s1: 0x00000000 $t9: 0x00000000 -$v0: 0x00000000 $t2: 0x00000000 $s2: 0x00000000 $k0: 0x00000000 -$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 diff --git a/test/out/fault.status b/test/out/fault.status deleted file mode 100644 index d00491f..0000000 --- a/test/out/fault.status +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/test/out/fpe b/test/out/fpe new file mode 100644 index 0000000..e6aeb31 --- /dev/null +++ b/test/out/fpe @@ -0,0 +1,15 @@ + + !!! An exception has occurred !!! + +error: floating point exception +pc: 0x00400004 +ins: 0x0108409a +registers: +$zero: 0x00000000 $t0: 0x00000000 $s0: 0x00000000 $t8: 0x00000000 +$at: 0x00000000 $t1: 0x00000000 $s1: 0x00000000 $t9: 0x00000000 +$v0: 0x00000000 $t2: 0x00000000 $s2: 0x00000000 $k0: 0x00000000 +$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: 0x00400024 diff --git a/test/out/fpe.status b/test/out/fpe.status new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/out/fpe.status @@ -0,0 +1 @@ +1 diff --git a/test/out/recursion b/test/out/recursion new file mode 100644 index 0000000..e69de29 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/segv b/test/out/segv new file mode 100644 index 0000000..1796539 --- /dev/null +++ b/test/out/segv @@ -0,0 +1,15 @@ + + !!! An exception has occurred !!! + +error: page fault at (nil): address not mapped to object +pc: 0x00400000 +ins: 0x8c080000 +registers: +$zero: 0x00000000 $t0: 0x00000000 $s0: 0x00000000 $t8: 0x00000000 +$at: 0x00000000 $t1: 0x00000000 $s1: 0x00000000 $t9: 0x00000000 +$v0: 0x00000000 $t2: 0x00000000 $s2: 0x00000000 $k0: 0x00000000 +$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: 0x00400020 diff --git a/test/out/segv.status b/test/out/segv.status new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/out/segv.status @@ -0,0 +1 @@ +1 -- cgit v1.2.3-freya