From 240cfcd5cdda9301457867f9d26edcd0cf272b24 Mon Sep 17 00:00:00 2001 From: Quentin Carbonneaux Date: Thu, 17 Mar 2016 13:41:12 -0400 Subject: support return of structs --- lisc/test/abi4.ssa | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 lisc/test/abi4.ssa (limited to 'lisc/test') diff --git a/lisc/test/abi4.ssa b/lisc/test/abi4.ssa new file mode 100644 index 0000000..4c3d89b --- /dev/null +++ b/lisc/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 +# typedef struct { char t[17]; } mem; +# extern mem test(void); +# int main() { mem m = test(); printf("%s\n", m.t); return 0; } +# <<< + +# >>> output +# ABCDEFGHIJKLMNOP +# <<< -- cgit 1.4.1