diff options
author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-03-27 15:00:45 -0400 |
---|---|---|
committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-03-27 15:00:45 -0400 |
commit | 36635660b40573f6a0c19d50dfdd9277589030de (patch) | |
tree | a1b4463f7260462c314bd8d7cb35b3d199143f33 /test/abi4.ssa | |
parent | aad52241c88ad5327a8488c66dc906c8393c9c92 (diff) | |
download | roux-36635660b40573f6a0c19d50dfdd9277589030de.tar.gz |
extract tests out of src
Diffstat (limited to 'test/abi4.ssa')
-rw-r--r-- | test/abi4.ssa | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/abi4.ssa b/test/abi4.ssa new file mode 100644 index 0000000..4c3d89b --- /dev/null +++ b/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 +# <<< |