summaryrefslogtreecommitdiff
path: root/tests/inlineasm/rv32/asmjump.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/inlineasm/rv32/asmjump.py')
-rw-r--r--tests/inlineasm/rv32/asmjump.py115
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/inlineasm/rv32/asmjump.py b/tests/inlineasm/rv32/asmjump.py
new file mode 100644
index 000000000..fe87d3f96
--- /dev/null
+++ b/tests/inlineasm/rv32/asmjump.py
@@ -0,0 +1,115 @@
+@micropython.asm_rv32
+def f1():
+ li(a0, 0)
+ la(a1, END)
+ c_jr(a1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ label(END)
+
+
+print(f1())
+
+
+@micropython.asm_rv32
+def f2():
+ addi(sp, sp, -4)
+ c_swsp(ra, 0)
+ li(ra, 0)
+ li(a0, 0)
+ c_jal(END)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ label(END)
+ bne(ra, zero, SUCCESS)
+ c_addi(a0, 2)
+ label(SUCCESS)
+ c_lwsp(ra, 0)
+ addi(sp, sp, 4)
+
+
+print(f2())
+
+
+@micropython.asm_rv32
+def f3():
+ li(a0, 0)
+ c_j(END)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ label(END)
+
+
+print(f3())
+
+
+@micropython.asm_rv32
+def f4():
+ addi(sp, sp, -4)
+ c_swsp(ra, 0)
+ li(ra, 0)
+ li(a0, 0)
+ la(a1, END)
+ c_jalr(a1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ label(END)
+ bne(ra, zero, SUCCESS)
+ c_addi(a0, 2)
+ label(SUCCESS)
+ c_lwsp(ra, 0)
+ addi(sp, sp, 4)
+
+
+print(f4())
+
+
+@micropython.asm_rv32
+def f5():
+ li(a0, 0)
+ li(a1, 0)
+ jal(a1, END)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ label(END)
+ bne(a1, zero, SUCCESS)
+ c_addi(a0, 2)
+ label(SUCCESS)
+
+
+print(f5())
+
+
+@micropython.asm_rv32
+def f6():
+ li(a0, 0)
+ la(a1, JUMP)
+ li(a2, 0)
+ jalr(a2, a1, 10)
+ label(JUMP)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ c_addi(a0, 1)
+ bne(a2, zero, SUCCESS)
+ c_addi(a0, 2)
+ label(SUCCESS)
+
+
+print(f6())