summaryrefslogtreecommitdiff
path: root/tests/inlineasm/rv32/asmbranch.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/inlineasm/rv32/asmbranch.py')
-rw-r--r--tests/inlineasm/rv32/asmbranch.py161
1 files changed, 161 insertions, 0 deletions
diff --git a/tests/inlineasm/rv32/asmbranch.py b/tests/inlineasm/rv32/asmbranch.py
new file mode 100644
index 000000000..d7d059d40
--- /dev/null
+++ b/tests/inlineasm/rv32/asmbranch.py
@@ -0,0 +1,161 @@
+# test branch instructions
+
+
+@micropython.asm_rv32
+def tbeq(a0):
+ mv(a1, a0)
+
+ li(a0, 10)
+ li(a2, 1)
+ beq(a1, a2, end)
+
+ li(a0, 20)
+ li(a2, 2)
+ beq(a1, a2, end)
+
+ li(a0, 30)
+ li(a2, 3)
+ beq(a1, a2, end)
+
+ li(a0, 0)
+
+ label(end)
+
+
+print(tbeq(0))
+print(tbeq(1))
+print(tbeq(2))
+print(tbeq(3))
+
+
+@micropython.asm_rv32
+def tbne(a0):
+ mv(a1, a0)
+
+ li(a0, 10)
+ li(a2, 1)
+ bne(a1, a2, end)
+
+ li(a0, 20)
+ li(a2, 2)
+ bne(a1, a2, end)
+
+ li(a0, 30)
+ li(a2, 3)
+ bne(a1, a2, end)
+
+ li(a0, 0)
+
+ label(end)
+
+
+print(tbne(0))
+print(tbne(1))
+print(tbne(2))
+print(tbne(3))
+
+
+@micropython.asm_rv32
+def tbgeu(a0):
+ mv(a1, a0)
+
+ li(a0, 1)
+ li(a2, 2)
+ bgeu(a1, a2, end)
+ li(a0, 0)
+
+ label(end)
+
+
+print(tbgeu(0))
+print(tbgeu(1))
+print(tbgeu(2))
+print(tbgeu(3))
+
+
+@micropython.asm_rv32
+def tbltu(a0):
+ mv(a1, a0)
+
+ li(a0, 1)
+ li(a2, 2)
+ bltu(a1, a2, end)
+ li(a0, 0)
+
+ label(end)
+
+
+print(tbltu(0))
+print(tbltu(1))
+print(tbltu(2))
+print(tbltu(3))
+
+
+@micropython.asm_rv32
+def tbge(a0):
+ mv(a1, a0)
+
+ li(a0, 1)
+ li(a2, -2)
+ bge(a1, a2, end)
+ li(a0, 0)
+
+ label(end)
+
+
+print(tbge(-3))
+print(tbge(-2))
+print(tbge(-1))
+print(tbge(0))
+
+
+@micropython.asm_rv32
+def tblt(a0):
+ mv(a1, a0)
+
+ li(a0, 1)
+ li(a2, -2)
+ blt(a1, a2, end)
+ li(a0, 0)
+
+ label(end)
+
+
+print(tblt(-3))
+print(tblt(-2))
+print(tblt(-1))
+print(tblt(0))
+
+
+@micropython.asm_rv32
+def tcbeqz(a0):
+ mv(a1, a0)
+
+ li(a0, 1)
+ c_beqz(a1, end)
+ li(a0, 0)
+
+ label(end)
+
+
+print(tcbeqz(0))
+print(tcbeqz(1))
+print(tcbeqz(2))
+print(tcbeqz(3))
+
+
+@micropython.asm_rv32
+def tcbnez(a0):
+ mv(a1, a0)
+
+ li(a0, 1)
+ c_bnez(a1, end)
+ li(a0, 0)
+
+ label(end)
+
+
+print(tcbnez(0))
+print(tcbnez(1))
+print(tcbnez(2))
+print(tcbnez(3))