aboutsummaryrefslogtreecommitdiff
path: root/src/test/max.ssa
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/max.ssa')
-rw-r--r--src/test/max.ssa33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/test/max.ssa b/src/test/max.ssa
new file mode 100644
index 0000000..547e9d4
--- /dev/null
+++ b/src/test/max.ssa
@@ -0,0 +1,33 @@
+# find the maximum value
+# in a nul-terminated array
+# of unsigned bytes
+#
+# the output is stored in $a
+
+data $arr = { b 10, b -60, b 10, b 100, b 200, b 0 }
+
+function $test() {
+@start
+@loop
+ %max =w phi @start -1, @new %byt, @old %max
+ %loc =l phi @start $arr, @new %loc1, @old %loc1
+ %byt =w loadub %loc
+ %loc1 =l add 1, %loc
+ jnz %byt, @iter, @end
+@iter
+ %cmp =w cslew %max, %byt
+ jnz %cmp, @new, @old
+@new
+ jmp @loop
+@old
+ jmp @loop
+@end
+ storew %max, $a
+ ret
+}
+
+# >>> driver
+# extern void test(void);
+# int a;
+# int main() { test(); return !(a == 200); }
+# <<<