type :four = {l, b, w} data $z = { w 0 } export function $test() { @start %a =w loadw $z %y =w add %a, %a %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, %y %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 # struct four { 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 # <<<