aboutsummaryrefslogtreecommitdiff
path: root/deps/lightning/check/divi.tst
diff options
context:
space:
mode:
Diffstat (limited to 'deps/lightning/check/divi.tst')
-rw-r--r--deps/lightning/check/divi.tst85
1 files changed, 85 insertions, 0 deletions
diff --git a/deps/lightning/check/divi.tst b/deps/lightning/check/divi.tst
new file mode 100644
index 0000000..9c03ed8
--- /dev/null
+++ b/deps/lightning/check/divi.tst
@@ -0,0 +1,85 @@
+.data 128
+small_ops:
+.i 40 64 80
+large_ops:
+.i 98304 65536 163840
+fmt:
+.c "%i/%i = %i (expected %i)\n"
+x:
+.c "%d\n"
+.code
+ jmpi main
+
+#define generate_divider(operand) \
+ name divider_##operand \
+divider_##operand: \
+ prolog \
+ arg $i \
+ getarg %r1 $i \
+ divi %r2 %r1 operand \
+ retr %r2 \
+ epilog
+generate_divider(8)
+generate_divider(32768)
+
+#define generate_test_divider(divisor) \
+ name test_divider_##divisor \
+test_divider_##divisor: \
+ prolog \
+ allocai 4 $loc \
+ arg $p \
+ arg $c \
+ getarg %v0 $p \
+ getarg %v1 $c \
+ muli %v1 %v1 4 \
+ addr %v1 %v0 %v1 \
+loop_##divisor: \
+ bger done_##divisor %v0 %v1 \
+ ldr_i %v2 %v0 \
+ prepare \
+ pushargr %v2 \
+ finishi divider_##divisor \
+ retval %v2 \
+ ldr_i %r2 %v0 \
+ divi %r0 %r2 divisor \
+ /* save div result */ \
+ stxi_i $loc %fp %r0 \
+ prepare \
+ pushargi fmt \
+ ellipsis \
+ pushargr %r2 \
+ pushargi divisor \
+ pushargr %v2 \
+ pushargr %r0 \
+ finishi @printf \
+ addi %v0 %v0 4 \
+ /* reload div result */ \
+ ldxi_i %r0 %fp $loc \
+ beqr loop_##divisor %r0 %v2 \
+ /* return if failed */ \
+ reti 1 \
+done_##divisor: \
+ reti 0 \
+ epilog
+generate_test_divider(8)
+generate_test_divider(32768)
+
+ name main
+main:
+ prolog
+ prepare
+ pushargi small_ops
+ pushargi 3
+ finishi test_divider_8
+ retval %r0
+ bnei fail %r0 0
+ prepare
+ pushargi large_ops
+ pushargi 3
+ finishi test_divider_32768
+ retval %r0
+ bnei fail %r0 0
+ reti 0
+fail:
+ reti 1
+ epilog