dark.ssa 633 B

1234567891011121314151617181920212223242526272829303132
  1. # skip arm64 arm64_apple rv64
  2. # a hack example,
  3. # we use a dark type to get
  4. # a pointer to the stack.
  5. type :magic = align 1 { 0 }
  6. data $ret = { l 0 }
  7. export
  8. function $test(:magic %p) {
  9. @start
  10. %av =w loadw $a
  11. %a1 =w add 1, %av
  12. storew %a1, $a # increment $a
  13. %r1 =l loadl $ret # fetch from $ret
  14. %p1 =l add %p, -8
  15. %r2 =l loadl %p1 # get the return address
  16. storel %r2, $ret # store it in $ret
  17. %c =w ceql %r1, %r2
  18. jnz %c, @fin, @cal
  19. @cal
  20. %i =w call $test() # no argument given, intentionally!
  21. @fin
  22. ret
  23. }
  24. # >>> driver
  25. # extern void test(void);
  26. # int a = 2;
  27. # int main() { test(); return !(a == 5); }
  28. # <<<