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