summary refs log tree commit diff
path: root/src/test/abi4.ssa
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-03-25 14:02:43 -0400
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-03-25 14:02:43 -0400
commit62e238a6ef151d56b79e1f076a57463f2e1fb020 (patch)
tree29c858054c62230eb73330f165cf30ff20e14d86 /src/test/abi4.ssa
parent97b58def96d47d937d86849380d8316ddb16bed8 (diff)
downloadroux-62e238a6ef151d56b79e1f076a57463f2e1fb020.tar.gz
great renaming campain!
Diffstat (limited to 'src/test/abi4.ssa')
-rw-r--r--src/test/abi4.ssa38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/test/abi4.ssa b/src/test/abi4.ssa
new file mode 100644
index 0000000..4c3d89b
--- /dev/null
+++ b/src/test/abi4.ssa
@@ -0,0 +1,38 @@
+# return a large struct to C
+
+type :mem = { b 17 }
+
+function $alpha(l %p, w %l, l %n) {
+@ini
+	%pe =l add %p, %n
+@lop
+	%p1 =l phi @ini %p, @lop %p2
+	%l1 =w phi @ini %l, @lop %l2
+	storeb %l1, %p1
+	%p2 =l add %p1, 1
+	%l2 =w add %l1, 1
+	%c1 =w ceql %p1, %pe
+	jnz %c1, @end, @lop
+@end
+	storeb 0, %pe
+	ret
+}
+
+function :mem $test() {
+@start
+	%p =l alloc4 17
+	%r0 =w call $alpha(l %p, w 65, l 16)
+	ret %p
+}
+
+
+# >>> driver
+# #include <stdio.h>
+# typedef struct { char t[17]; } mem;
+# extern mem test(void);
+# int main() { mem m = test(); printf("%s\n", m.t); return 0; }
+# <<<
+
+# >>> output
+# ABCDEFGHIJKLMNOP
+# <<<