| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- type :four = {l, b, w}
- data $z = { w 0 }
- export
- function $test() {
- @start
- %a =w loadw $z
- %y =w add %a, %a
- %yl =l extsw %y
- %s =l alloc8 16 # allocate a :four struct
- %s1 =l add %s, 12 # get address of the w
- storel 4, %s # set the l
- storew 5, %s1 # set the w
- # only the last argument should be on the stack
- %f =l add $F, %yl
- %x =w call %f(w %y, w 1, w 2, w 3, :four %s, w 6)
- # store the result in the
- # global variable a
- %x1 =w add %y, %x
- storew %x1, $a
- ret
- }
- # >>> driver
- # #include <stdio.h>
- # struct four { long long l; char c; int i; };
- # extern void test(void);
- # int F(int a0, int a1, int a2, int a3, struct four s, int a6) {
- # printf("%d %d %d %d %d %d %d\n",
- # a0, a1, a2, a3, (int)s.l, s.i, a6);
- # return 42;
- # }
- # int a;
- # int main() { test(); printf("%d\n", a); return 0; }
- # <<<
- # >>> output
- # 0 1 2 3 4 5 6
- # 42
- # <<<
|