Armpit Scheme, a minimalist interpreter, performs at a decent clip, similar to Guile 1.7.1, a full-fledged interpreter. Performance has not yet been tested against the more recent and faster Guile 2.x.
A minimal amount of performance assessment has been performed on Armpit Scheme using test code from the Gambit-C Scheme Benchmarks (available here) discussed (among others) by Pierard and Feeley (2007) in the context of Mobit (a Portable and Mobile Scheme Interpreter).
Three functions were used in the present assessment to estimate Armpit Scheme's performance in relation to the Gambit-C Scheme compiler and to GNU Guile: tak.scm, ctak.scm and mazefun.scm. The first test computes the Takeuchi function recursively: (tak 18 12 6), the second test computes the same function in continuation-passing style: (ctak 18 12 6), and the third test generates a 11x11 cell maze in a purely functional way: (make-maze 11 11). On Armpit Scheme, all tests were started with a clear heap (system reset). For the tak test, 4 evaluations were performed: 1) gtak - an interpreted version with generic arithmetic, 2) rtak - an interpreted version with fixnum-specific arithmetic (fx-, fx=?), 3) tak - a compiled version of rtak with *immutable-primitives* and *inline-cons* switches set to #t, and 4) atak - an ARMSchembled version of tak with the *inline-cons* switch set to #t. The source code for rtak, tak and atak is given with the compiler testing code file, here (scm), and the resulting machine code for tak and atak is given at the bottom of this page. The code for gtak is:
(define gtak
(lambda (x y z)
(if (>= y x)
z
(gtak (gtak (- x 1) y z)
(gtak (- y 1) z x)
(gtak (- z 1) x y)))))
The test results included with the benchmark source from the University of Montreal were obtained on a 2 GHz Intel Core MacBook Pro. Tests with GNU Guile version 1.7.1 were performed on a 500 MHz Sparc IIe SUN Blade 100 (development machine). Armpit Scheme tests were performed on 60MHz Tiny2106 and LPC-H2214 (arm7tdmi), 202 MHz TCT-Hammer (arm920t), 50 MHz EVB-LM3S1968 and 72 MHz STM32-LCD (cortex-m3), and 1000 MHz BeagleBoard-XM (cortex-a8). The STM32-LCD, TCT-Hammer and BeagleBoard-XM were communicating via on-chip USB while others used uarts. A benchmark run of the BeagleBoard-XM, with uart communication, was also performed to assess the impact of usb on performance.
To obtain a common base for comparison, results obtained for multiple benchmark iterations and at speeds other than 60 MHz were converted to the time, t1/60, that it would take to perform 1 iteration of the benchmark if the CPU clock was 60MHz and the system performance scaled linearly:
t1/60 = (time-for-n-iterations / n) * (CPU-clock-speed / 60MHz).Times were typically measured only to the nearest second on Guile and Armpit Scheme. The results (t1/60) were as follows (Version 050, all values in seconds):
benchmark Gambit-C Guile LM3S1968 Tiny2106 STM32-LCD Beagle-XM TCT-Hammer LPC-H2214 B-XM-uart --------- -------- ----- -------- -------- --------- --------- ---------- --------- --------- gtak 0.025 5 2.3 2.8 3.4 2.8 2.4 3.6 2.3 rtak -- -- 1.8 2.1 2.7 2.1 1.8 2.9 1.8 tak -- -- -- --- 1.8 1.3 1.3 2.3 1.3 atak -- -- 0.061 0.047 0.068 0.077 0.067 0.11 0.077 ctak 0.60 36 5.0 6.0 7.5 5.3 4.7 7.2 4.8 mazefun 0.05 6 5.4 6.8 8.4 4.0 3.7 5.8 3.5
By comparison, the results for the previous stable version (00.0160) were (note: 2 tested MCUs differ):
benchmark Gambit-C Guile LM3S1968 Tiny2106 LPC-H2888 CS-EP9302 TCT-Hammer LPC-H2214 --------- -------- ----- -------- -------- --------- --------- ---------- --------- gtak 0.025 5 3 4 5 5 4 8 atak -- -- -- 0.06 0.19 0.11 0.08 0.27 ctak 0.60 36 6 7 8 8 7 12 mazefun 0.05 6 10 12 7 6 6 10
From the 4 MCUs tested in both 00.0160 and 050 one observes that 050 is faster, especially for mazefun which is nearly twice as fast. Performance of atak is up by approximately 20% and gtak is faster by 20% to 40%. Performance on MCUs with external memory is faster than Guile 1.7.1 and possibly similar to the new Guile 2.x which is driven by a VM and faster than 1.7.1 (but not tested here because the test machine is not equipped with the needed libraries). Within version 050, using Fixnum (integer) arithmetic functions in rtak gives a 20% speed improvement over the generic arithmetic in gtak. The compiled tak with Fixnum arithmetic is approximately twice as fast as the interpreted gtak with generic arithmetic, and provides a reduction of computation time of approximately 30% relative to the interpreted Fixnum version in rtak. The speedup between rtak and tak is indicative of the potential speed improvement that a bytecode oriented VM might bring to interpreted Armpit Scheme (approx. 30%, which is not huge). The ARMSchembled atak is 20 times faster than the compiled tak, suggesting that the caps_050 compiler has room for improvement, however, it generally works, and is relatively small. Armpit Scheme (running on ARM), whether interpreted, compiled or ARMSchembled, is still slower than the optimized output of Gambit-C (running on Intel Core). Finally, we note that using usb communications slows interpreted code by approximately 15% when compared to communicating via uart, whereas compiled and ARMSchembled code is unaffected (compare columns Beagle-XM and B-XM-uart).
Compiled and ARMSchembled machine code for tak and atak, produced by Armpit Scheme's caps and as, for ARM and Thumb2 (Cortex-M3) instruction sets:
;; tak -- ARM (approx. 8000 bytes)
((unpack-above-heap
(link
#(#vu8(223 0 0 0
4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48
160 147 5 2 0 154 3 32 192 227 2 4 162 232 8 160 66 226 2 0 130 227 212 71 159 229
12 192 160 225 8 80 143 226 15 16 160 225 254 1 0 234 231 1 0 234 4 224 79 226 3 0
32 226 8 32 155 229 8 32 66 226 0 0 82 225 16 48 160 147 244 1 0 154 3 32 192 227
2 4 162 232 8 192 66 226 0 18 162 232 8 160 66 226 2 0 130 227 164 71 159 229 12
192 160 225 15 16 160 225 238 1 0 234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66
226 0 0 82 225 8 48 160 147 227 1 0 154 3 32 192 227 16 4 162 232 8 160 66 226 2
0 130 227 108 71 159 229 12 192 160 225 15 16 160 225 223 1 0 234 4 80 160 225 16
4 154 232 124 135 159 229 14 224 160 225 68 32 155 229 60 32 146 229 4 16 143 226
2 240 160 225 12 192 160 225 0 6 154 232 2 4 154 232 47 0 52 227 2 0 0 10 44 71 159
229 12 192 160 225 207 1 0 234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226
0 0 82 225 8 48 160 147 196 1 0 154 3 32 192 227 2 4 162 232 8 160 66 226 2 0 130
227 248 70 159 229 12 192 160 225 15 16 160 225 192 1 0 234 4 224 79 226 3 0 32 226
8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 181 1 0 154 3 32 192 227 16 4
162 232 8 160 66 226 2 0 130 227 15 80 160 227 4 224 79 226 3 0 32 226 8 32 155 229
0 32 66 226 0 0 82 225 8 48 160 147 169 1 0 154 3 32 192 227 0 6 162 232 8 160 66
226 2 0 130 227 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48
160 147 158 1 0 154 3 32 192 227 32 4 162 232 8 160 66 226 2 0 130 227 96 70 159
229 12 192 160 225 15 16 160 225 154 1 0 234 4 224 79 226 3 0 32 226 8 32 155 229
0 32 66 226 0 0 82 225 8 48 160 147 143 1 0 154 3 32 192 227 16 4 162 232 8 160 66
226 2 0 130 227 15 80 160 227 20 70 159 229 12 192 160 225 15 16 160 225 138 1 0
234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 127 1
0 154 3 32 192 227 48 0 162 232 8 80 66 226 2 0 130 227 220 69 159 229 12 192 160
225 15 16 160 225 123 1 0 234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0
0 82 225 8 48 160 147 112 1 0 154 3 32 192 227 48 0 162 232 8 80 66 226 2 0 130 227
4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 101 1 0
154 3 32 192 227 0 6 162 232 8 160 66 226 2 0 130 227 4 224 79 226 3 0 32 226 8 32
155 229 0 32 66 226 0 0 82 225 8 48 160 147 90 1 0 154 3 32 192 227 32 4 162 232
8 160 66 226 2 0 130 227 76 69 159 229 12 192 160 225 15 16 160 225 86 1 0 234 4
224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 75 1 0 154
3 32 192 227 16 4 162 232 8 160 66 226 2 0 130 227 5 64 160 227 4 80 160 225 16 4
154 232 48 133 159 229 14 224 160 225 68 32 155 229 60 32 146 229 4 16 143 226 2 240
160 225 12 192 160 225 32 4 154 232 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66
226 0 0 82 225 8 48 160 147 53 1 0 154 3 32 192 227 48 0 162 232 8 80 66 226 2 0
130 227 0 6 154 232 16 4 154 232 15 16 160 225 55 1 0 234 32 4 154 232 4 224 79 226
3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 37 1 0 154 3 32 192
227 48 0 162 232 8 80 66 226 2 0 130 227 0 144 154 229 4 224 79 226 3 0 32 226 8
32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 25 1 0 154 3 32 192 227 32 4 162 232
8 160 66 226 2 0 130 227 76 68 159 229 12 192 160 225 15 16 160 225 21 1 0 234 4
224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 10 1 0 154
3 32 192 227 16 4 162 232 8 160 66 226 2 0 130 227 15 80 160 227 4 68 159 229 12
192 160 225 15 16 160 225 5 1 0 234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226
0 0 82 225 8 48 160 147 250 0 0 154 3 32 192 227 48 0 162 232 8 80 66 226 2 0 130 227
204 67 159 229 12 192 160 225 15 16 160 225 246 0 0 234 4 224 79 226 3 0 32
226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 235 0 0 154 3 32 192 227 48
0 162 232 8 80 66 226 2 0 130 227 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226
0 0 82 225 8 48 160 147 224 0 0 154 3 32 192 227 0 6 162 232 8 160 66 226 2 0 130
227 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 213
0 0 154 3 32 192 227 32 4 162 232 8 160 66 226 2 0 130 227 48 67 159 229 12 192 160
225 15 16 160 225 209 0 0 234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0
0 82 225 8 48 160 147 198 0 0 154 3 32 192 227 16 4 162 232 8 160 66 226 2 0 130
227 5 64 160 227 4 80 160 225 16 4 154 232 28 131 159 229 14 224 160 225 68 32 155
229 60 32 146 229 4 16 143 226 2 240 160 225 12 192 160 225 32 4 154 232 4 224 79
226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 176 0 0 154 3 32
192 227 48 0 162 232 8 80 66 226 2 0 130 227 0 6 154 232 16 4 154 232 15 16 160 225
178 0 0 234 32 4 154 232 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82
225 8 48 160 147 160 0 0 154 3 32 192 227 48 0 162 232 8 80 66 226 2 0 130 227 0
144 154 229 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147
148 0 0 154 3 32 192 227 32 4 162 232 8 160 66 226 2 0 130 227 56 66 159 229 12
192 160 225 15 16 160 225 144 0 0 234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66
226 0 0 82 225 8 48 160 147 133 0 0 154 3 32 192 227 16 4 162 232 8 160 66 226 2
0 130 227 15 80 160 227 244 65 159 229 12 192 160 225 15 16 160 225 128 0 0 234 4
224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 117 0 0 154
3 32 192 227 48 0 162 232 8 80 66 226 2 0 130 227 176 65 159 229 12 192 160 225
15 16 160 225 113 0 0 234 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82
225 8 48 160 147 102 0 0 154 3 32 192 227 48 0 162 232 8 80 66 226 2 0 130 227 4 224
79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 91 0 0 154 3
32 192 227 0 6 162 232 8 160 66 226 2 0 130 227 4 224 79 226 3 0 32 226 8 32 155
229 0 32 66 226 0 0 82 225 8 48 160 147 80 0 0 154 3 32 192 227 32 4 162 232 8 160
66 226 2 0 130 227 32 65 159 229 12 192 160 225 15 16 160 225 76 0 0 234 4 224 79
226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 65 0 0 154 3 32 192
227 16 4 162 232 8 160 66 226 2 0 130 227 5 64 160 227 4 80 160 225 16 4 154 232
8 129 159 229 14 224 160 225 68 32 155 229 60 32 146 229 4 16 143 226 2 240 160
225 12 192 160 225 32 4 154 232 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0
0 82 225 8 48 160 147 43 0 0 154 3 32 192 227 48 0 162 232 8 80 66 226 2 0 130 227
0 6 154 232 16 4 154 232 15 16 160 225 45 0 0 234 32 4 154 232 4 224 79 226 3 0
32 226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 27 0 0 154 3 32 192 227 48
0 162 232 8 80 66 226 2 0 130 227 0 6 154 232 16 4 154 232 2 4 154 232 29 0 0 234
4 112 160 225 64 64 159 229 12 192 160 225 15 16 160 225 26 0 0 234 4 112 133 229
63 64 160 227 2 4 154 232 1 240 160 225 16 8 0 0 175 1 128 0 24 8 0 0 175 2 128 0
32 8 0 0 175 3 128 0 15 0 0 0 175 2 128 0 175 1 128 0 175 3 128 0 175 4 128 0 4 240
31 229 0 0 0 0 4 240 31 229 0 0 0 0 4 240 31 229 0 0 0 0 4 240 31 229 0 0 0 0 4
240 31 229 0 0 0 0 4 240 31 229 0 0 0 0 4 240 31 229 0 0 0 0 0 0 0 168 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
((2100 . 32772) (2096 . 32771) (2092 . 32769)
(2088 . 32770) (2080 . 32771) (2072 . 32770) (2064 . 32769))
((32769 . "x") (32770 . "y") (32771 . "z") (32772 . "tak"))
((2156 . "_dfv") (2148 . "_apl") (2140 . "fx-") (2132 . "fx>=?") (2124 . "_lkp")
(2116 . "_mkc") (2108 . "_gc"))))))
;; tak -- Cortex-M3
((unpack-above-heap
(link
#(#vu8(223 0 0 0
79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235
0 15 0 191 156 191 79 240 8 3 0 240 250 188 32 240 3 2 162 232 2
4 162 241 8 10 66 240 2 0 223 248 180 73 79 234 12 12 79 234 12 12 15 242 12 5 15
241 4 1 0 240 234 188 0 240 186 188 79 234 15 14 79 234 12 12 78 240 0 14 128 240
3 0 219 248 8 32 162 241 8 2 178 235 0 15 0 191 156 191 79 240 16 3 0 240 208 188
32 240 3 2 162 232 2 4 162 241 8 12 162 232 0 18 162 241 8 10 66 240 2 0 223 248
116 73 79 234 12 12 79 234 12 12 15 241 4 1 0 240 194 188 79 234 15 14 79 234 12 12
78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240
8 3 0 240 166 188 32 240 3 2 162 232 16 4 162 241 8 10 66 240 2 0 223 248 44 73
79 234 12 12 79 234 12 12 15 241 4 1 0 240 156 188 79 234 4 5 154 232 16 4 223 248
56 137 79 234 14 14 79 234 12 12 219 248 68 32 210 248 60 32 15 241 4 1 151 70 0
191 79 234 12 12 154 232 0 6 154 232 2 4 148 240 47 15 0 191 8 191 0 240 8 184 223
248 224 72 79 234 12 12 79 234 12 12 0 240 118 188 79 234 15 14 79 234 12 12 78
240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8
3 0 240 90 188 32 240 3 2 162 232 2 4 162 241 8 10 66 240 2 0 223 248 156 72 79
234 12 12 79 234 12 12 15 241 4 1 0 240 80 188 79 234 15 14 79 234 12 12 78 240 0 14
128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240
52 188 32 240 3 2 162 232 16 4 162 241 8 10 66 240 2 0 79 240 15 5 79 234 15 14 79
234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156
191 79 240 8 3 0 240 22 188 32 240 3 2 162 232 0 6 162 241 8 10 66 240 2 0 79 234
15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15
0 191 156 191 79 240 8 3 0 240 250 187 32 240 3 2 162 232 32 4 162 241 8 10 66 240
2 0 223 248 220 71 79 234 12 12 79 234 12 12 15 241 4 1 0 240 240 187 79 234 15 14
79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191
156 191 79 240 8 3 0 240 212 187 32 240 3 2 162 232 16 4 162 241 8 10 66 240 2 0
79 240 15 5 223 248 128 71 79 234 12 12 79 234 12 12 15 241 4 1 0 240 200 187 79
234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0
15 0 191 156 191 79 240 8 3 0 240 172 187 32 240 3 2 162 232 48 0 162 241 8 5 66 240
2 0 223 248 56 71 79 234 12 12 79 234 12 12 15 241 4 1 0 240 162 187 79 234 15 14
79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191
156 191 79 240 8 3 0 240 134 187 32 240 3 2 162 232 48 0 162 241 8 5 66 240 2 0 79
234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235
0 15 0 191 156 191 79 240 8 3 0 240 106 187 32 240 3 2 162 232 0 6 162 241 8 10 66
240 2 0 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0
2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 78 187 32 240 3 2 162 232 32 4 162 241
8 10 66 240 2 0 223 248 128 70 79 234 12 12 79 234 12 12 15 241 4 1 0 240 68 187
79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235
0 15 0 191 156 191 79 240 8 3 0 240 40 187 32 240 3 2 162 232 16 4 162 241 8 10
66 240 2 0 79 240 5 4 79 234 4 5 154 232 16 4 223 248 84 134 79 234 14 14 79 234
12 12 219 248 68 32 210 248 60 32 15 241 4 1 151 70 0 191 79 234 12 12 154 232 32
4 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235
0 15 0 191 156 191 79 240 8 3 0 240 244 186 32 240 3 2 162 232 48 0 162 241 8 5
66 240 2 0 154 232 0 6 154 232 16 4 15 241 4 1 0 240 248 186 154 232 32 4 79 234
15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0
191 156 191 79 240 8 3 0 240 206 186 32 240 3 2 162 232 48 0 162 241 8 5 66 240 2
0 218 248 0 144 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162
241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 176 186 32 240 3 2 162 232 32
4 162 241 8 10 66 240 2 0 223 248 72 69 79 234 12 12 79 234 12 12 15 241 4 1 0 240
166 186 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241
0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 138 186 32 240 3 2 162 232 16 4
162 241 8 10 66 240 2 0 79 240 15 5 223 248 240 68 79 234 12 12 79 234 12 12 15 241
4 1 0 240 126 186 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32
162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 98 186 32 240 3 2 162 232
48 0 162 241 8 5 66 240 2 0 223 248 168 68 79 234 12 12 79 234 12 12 15 241 4 1 0
240 88 186 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 0
2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 60 186 32 240 3 2 162 232 48 0 162
241 8 5 66 240 2 0 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32
162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 32 186 32 240 3 2 162 232
0 6 162 241 8 10 66 240 2 0 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219
248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 4 186 32 240 3 2
162 232 32 4 162 241 8 10 66 240 2 0 223 248 228 67 79 234 12 12 79 234 12 12 15
241 4 1 0 240 250 185 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8
32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 222 185 32 240 3 2 162
232 16 4 162 241 8 10 66 240 2 0 79 240 5 4 79 234 4 5 154 232 16 4 223 248 192 131
79 234 14 14 79 234 12 12 219 248 68 32 210 248 60 32 15 241 4 1 151 70 0 191 79
234 12 12 154 232 32 4 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8
32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 170 185 32 240 3 2 162
232 48 0 162 241 8 5 66 240 2 0 154 232 0 6 154 232 16 4 15 241 4 1 0 240 174 185
154 232 32 4 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162
241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 132 185 32 240 3 2 162 232 48 0
162 241 8 5 66 240 2 0 218 248 0 144 79 234 15 14 79 234 12 12 78 240 0 14 128 240
3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 102 185
32 240 3 2 162 232 32 4 162 241 8 10 66 240 2 0 223 248 180 66 79 234 12 12 79 234
12 12 15 241 4 1 0 240 92 185 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0
219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 64 185 32 240
3 2 162 232 16 4 162 241 8 10 66 240 2 0 79 240 15 5 223 248 96 66 79 234 12 12
79 234 12 12 15 241 4 1 0 240 52 185 79 234 15 14 79 234 12 12 78 240 0 14 128 240
3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 24 185 32
240 3 2 162 232 48 0 162 241 8 5 66 240 2 0 223 248 12 66 79 234 12 12 79 234 12
12 15 241 4 1 0 240 14 185 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219
248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 242 184 32 240 3 2
162 232 48 0 162 241 8 5 66 240 2 0 79 234 15 14 79 234 12 12 78 240 0 14 128 240
3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 214 184
32 240 3 2 162 232 0 6 162 241 8 10 66 240 2 0 79 234 15 14 79 234 12 12 78 240 0
14 128 240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240
186 184 32 240 3 2 162 232 32 4 162 241 8 10 66 240 2 0 223 248 84 65 79 234 12
12 79 234 12 12 15 241 4 1 0 240 176 184 79 234 15 14 79 234 12 12 78 240 0 14 128
240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 148
184 32 240 3 2 162 232 16 4 162 241 8 10 66 240 2 0 79 240 5 4 79 234 4 5 154 232
16 4 223 248 44 129 79 234 14 14 79 234 12 12 219 248 68 32 210 248 60 32 15 241 4
1 151 70 0 191 79 234 12 12 154 232 32 4 79 234 15 14 79 234 12 12 78 240 0 14 128
240 3 0 219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 96
184 32 240 3 2 162 232 48 0 162 241 8 5 66 240 2 0 154 232 0 6 154 232 16 4 15 241
4 1 0 240 100 184 154 232 32 4 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0
219 248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 58 184 32 240
3 2 162 232 48 0 162 241 8 5 66 240 2 0 154 232 0 6 154 232 16 4 154 232 2 4 0 240
62 184 79 234 4 7 223 248 72 64 79 234 12 12 79 234 12 12 15 241 4 1 0 240 54 184
197 248 4 112 79 240 63 4 154 232 2 4 143 70 0 191 248 9 0 0 175 1 128 0 0 10 0
0 175 2 128 0 8 10 0 0 175 3 128 0 15 0 0 0 175 2 128 0 175 1 128 0 175 3 128 0 175
4 128 0 0 74 151 70 0 0 0 0 0 74 151 70 0 0 0 0 0 74 151 70 0 0 0 0 0 74 151 70
0 0 0 0 0 74 151 70 0 0 0 0 0 74 151 70 0 0 0 0 0 74 151 70 0 0 0 0 0 0 2 160 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)
((2588 . 32772) (2584 . 32771) (2580 . 32769) (2576 . 32770) (2568 . 32771)
(2560 . 32770) (2552 . 32769))
((32769 . "x") (32770 . "y") (32771 . "z") (32772 . "tak"))
((2644 . "_dfv") (2636 . "_apl") (2628 . "fx-") (2620 . "fx>=?") (2612 . "_lkp")
(2604 . "_mkc") (2596 . "_gc"))))))
;; ARM
(define atak
(unpack-above-heap
(link
#(#vu8(223 3 0 0
4 0 85 225 6 64 160 81 1 240 160 81 4 224 79 226 3 0 32 226 8 32
155 229 24 32 66 226 0 0 82 225 32 48 160 147 55 0 0 154 3 32 192
227 2 4 162 232 8 192 66 226 64 16 162 232 8 192 66 226 32 16 162
232 8 192 66 226 16 16 162 232 8 160 66 226 2 0 130 227 4 64 68
226 15 16 160 225 232 255 255 234 192 0 154 232 128 1 151 232 0 80 152
229 4 224 79 226 3 0 32 226 8 32 155 229 0 32 66 226 0 0 82
225 8 48 160 147 32 0 0 154 3 32 192 227 16 4 162 232 8 160 66
226 2 0 130 227 4 64 71 226 15 16 160 225 215 255 255 234 4 112 154
229 160 0 151 232 192 0 151 232 0 112 151 229 4 224 79 226 3 0 32
226 8 32 155 229 0 32 66 226 0 0 82 225 8 48 160 147 14 0 0 154 3 32 192
227 16 4 162 232 8 160 66 226 2 0 130 227 4 64 71 226 15 16 160
225 197 255 255 234 4 96 160 225 32 4 154 232 16 4 154 232 4 160 154
229 4 160 154 229 4 160 154 229 2 4 154 232 189 255 255 234 4 240 31
229 0 0 0 0 0 0 0 0 0 0 0 0 0) () () ((272 . "_gc"))))))
;; Cortex-M3
(define atak
(unpack-above-heap
(link
#(#vu8(223 3 0 0
181 235 4 15 0 191 92 191 79 234 6 4 143 70 0 191 79 234 15 14 79
234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162 241 24 2 178
235 0 15 0 191 156 191 79 240 32 3 0 240 124 184 32 240 3 2 162
232 2 4 162 241 8 12 162 232 64 16 162 241 8 12 162 232 32 16 162
241 8 12 162 232 16 16 162 241 8 10 66 240 2 0 164 241 4 4 15
241 4 1 255 247 202 191 154 232 192 0 151 232 128 1 216 248 0 80 79
234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219 248 8 32 162
241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0 240 72 184 32
240 3 2 162 232 16 4 162 241 8 10 66 240 2 0 167 241 4 4 15
241 4 1 255 247 162 191 218 248 4 112 151 232 160 0 151 232 192 0 215
248 0 112 79 234 15 14 79 234 12 12 78 240 0 14 128 240 3 0 219
248 8 32 162 241 0 2 178 235 0 15 0 191 156 191 79 240 8 3 0
240 30 184 32 240 3 2 162 232 16 4 162 241 8 10 66 240 2 0 167
241 4 4 15 241 4 1 255 247 120 191 79 234 4 6 154 232 32 4 154
232 16 4 218 248 4 160 218 248 4 160 218 248 4 160 154 232 2 4 255
247 104 191 0 74 151 70 0 0 0 0 0 0 0 0 0 0 0 0 0 0) () () ((312 . "_gc"))))))