Added restore-frame and save-frame on ARM
[voodoo-lang.git] / test / restore-frame.voo
blobd29c713a32cd9bb5e0d5c1a6791da7fc0bef1753
1 # Test for save-frame and restore-frame.
3 section data
5 address: word 0
7 format_20:
8 string "%d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n\x00"
11 section functions
12 import exit printf
13 export main
15 align
16 test:
17 function
18     let a 1
19     let b 2
20     let c 3
21     let d 4
22     let e 5
23     let f 6
24     let g 7
25     let h 8
26     let i 9
27     let j 10
28     let k 11
29     let l 12
30     let m 13
31     let n 14
32     let o 15
33     let p 16
34     let q 17
35     let r 18
36     let s 19
37     let t 20
38     let saved-frame auto-bytes %saved-frame-size
39     save-frame saved-frame
41     set @address print_values
42     call passthrough saved-frame
44     goto end_test
45 print_values:
46     call printf format_20 a b c d e f g h i j \
47         k l m n o p q r s t
49 end_test:
50     return
51 end function
54 align
55 nonlocal_jump:
56 function frame
57     restore-frame frame
58     goto @address
59     call exit 2
60 end function
62 align
63 passthrough:
64 function frame
65     call nonlocal_jump frame
66     call exit 1
67 end function
70 align
71 main:
72 function argc argv
73     call test
74     return 0
75 end function