aboutsummaryrefslogtreecommitdiff
path: root/basics/factorial.S
diff options
context:
space:
mode:
authorMiquel Sabaté Solà <mikisabate@gmail.com>2024-08-28 22:25:56 +0200
committerMiquel Sabaté Solà <mikisabate@gmail.com>2024-12-05 16:02:49 +0100
commitab03d3be21f229be8c28dba292d5da237a929a73 (patch)
tree8bc53e3031f644532fec255bb392a90cd4ad59fb /basics/factorial.S
parent1a36e6211674f1a39c7cc0ddff705357a4add65a (diff)
downloadfarga-ab03d3be21f229be8c28dba292d5da237a929a73.tar.gz
farga-ab03d3be21f229be8c28dba292d5da237a929a73.zip
Restructure the whole thing
It will be something more than just messing around with RISC-V stuff. Signed-off-by: Miquel Sabaté Solà <mikisabate@gmail.com>
Diffstat (limited to 'basics/factorial.S')
-rw-r--r--basics/factorial.S28
1 files changed, 0 insertions, 28 deletions
diff --git a/basics/factorial.S b/basics/factorial.S
deleted file mode 100644
index 7e3df12..0000000
--- a/basics/factorial.S
+++ /dev/null
@@ -1,28 +0,0 @@
-.text
-.globl factorial
-.type factorial, @function
-
-factorial:
- // If input <= 1, just return the given thing.
- addi t0, zero, 1
- bgt a0, t0, else
- jr ra
-else:
- // Preserve the argument and the return address before the call.
- addi sp, sp, -16
- sd a0, 0(sp)
- sd ra, 8(sp)
-
- // Call the same function but with a value of argument-1.
- addi a0, a0, -1
- call factorial
-
- // Restore back the original argument and the return address. Then multiply
- // the original argument with the returned one from the previous call.
- ld t1, 0(sp)
- ld ra, 8(sp)
- addi sp, sp, 16
- mul a0, t1, a0
-
- // And return to the caller.
- jr ra