Commit | Line | Data |
---|---|---|
33309c6a JM |
1 | (module $debug |
2 | ||
456d0a21 | 3 | (func $checkpoint_user_memory |
0a19c2f1 JM |
4 | (global.set $mem_user_start (global.get $mem_unused_start)) |
5 | (global.set $string_mem_user_start (global.get $string_mem_next)) | |
456d0a21 JM |
6 | ) |
7 | ||
3ea09886 | 8 | (func $CHECK_FREE_LIST (result i32) |
349faa83 | 9 | (LET $first (i32.add |
0a19c2f1 JM |
10 | (global.get $mem) |
11 | (i32.mul (global.get $mem_free_list) 4)) | |
349faa83 | 12 | $count 0) |
3ea09886 JM |
13 | |
14 | (block $done | |
15 | (loop $loop | |
349faa83 JM |
16 | (br_if $done |
17 | (i32.ge_s $first | |
0a19c2f1 JM |
18 | (i32.add (global.get $mem) |
19 | (i32.mul (global.get $mem_unused_start) | |
349faa83 | 20 | 4)))) |
0a19c2f1 JM |
21 | (local.set $count (i32.add $count ($MalVal_size $first))) |
22 | (local.set $first (i32.add (global.get $mem) (i32.mul 4 ($VAL0 $first)))) | |
3ea09886 JM |
23 | (br $loop) |
24 | ) | |
25 | ) | |
26 | $count | |
27 | ) | |
28 | ||
29 | (func $PR_MEMORY_SUMMARY_SMALL | |
0a19c2f1 JM |
30 | (LET $free (i32.sub (global.get $MEM_SIZE) |
31 | (i32.mul (global.get $mem_unused_start) 4)) | |
349faa83 | 32 | $free_list_count ($CHECK_FREE_LIST) |
0a19c2f1 | 33 | $mv (global.get $NIL) |
349faa83 | 34 | $mem_ref_count 0) |
3ea09886 | 35 | |
3ea09886 JM |
36 | (block $done |
37 | (loop $loop | |
349faa83 | 38 | (br_if $done (i32.ge_s $mv (i32.add |
0a19c2f1 JM |
39 | (global.get $mem) |
40 | (i32.mul (global.get $mem_unused_start) | |
349faa83 | 41 | 4)))) |
0a19c2f1 JM |
42 | (if (i32.ne ($TYPE $mv) (global.get $FREE_T)) |
43 | (local.set $mem_ref_count (i32.add $mem_ref_count | |
3ea09886 JM |
44 | (i32.shr_u |
45 | (i32.load $mv) | |
46 | 5)))) | |
0a19c2f1 | 47 | (local.set $mv (i32.add $mv (i32.mul 4 ($MalVal_size $mv)))) |
3ea09886 JM |
48 | (br $loop) |
49 | ) | |
50 | ) | |
51 | ||
52 | ($printf_3 "Free: %d, Values: %d (refs: %d), Emptys: " | |
53 | $free | |
0c62f14e | 54 | (i32.sub |
0a19c2f1 | 55 | (i32.sub (global.get $mem_unused_start) 1) |
3ea09886 JM |
56 | $free_list_count) |
57 | $mem_ref_count) | |
0a19c2f1 | 58 | (local.set $mv (global.get $NIL)) |
3ea09886 JM |
59 | (block $done |
60 | (loop $loop | |
0a19c2f1 | 61 | (br_if $done (i32.gt_s $mv (global.get $TRUE))) |
3ea09886 | 62 | ($printf_1 "%d," (i32.div_s (i32.load $mv) 32)) |
0a19c2f1 | 63 | (local.set $mv (i32.add $mv 8)) |
3ea09886 JM |
64 | (br $loop) |
65 | ) | |
66 | ) | |
0a19c2f1 | 67 | (local.set $mv (global.get $EMPTY_LIST)) |
3ea09886 JM |
68 | (block $done |
69 | (loop $loop | |
0a19c2f1 | 70 | (br_if $done (i32.gt_s $mv (global.get $EMPTY_HASHMAP))) |
3ea09886 | 71 | ($printf_1 "%d," (i32.div_s (i32.load $mv) 32)) |
0a19c2f1 | 72 | (local.set $mv (i32.add $mv 12)) |
3ea09886 JM |
73 | (br $loop) |
74 | ) | |
75 | ) | |
76 | ($print "\n") | |
77 | ) | |
78 | ||
79 | (func $PR_VALUE (param $fmt i32 $mv i32) | |
349faa83 | 80 | (LET $temp ($pr_str $mv 1)) |
33309c6a JM |
81 | ($printf_1 $fmt ($to_String $temp)) |
82 | ($RELEASE $temp) | |
83 | ) | |
84 | ||
85 | (func $PR_MEMORY_VALUE (param $idx i32) (result i32) | |
33309c6a | 86 | ;;; mv = mem + idx |
349faa83 JM |
87 | (LET $mv ($MalVal_ptr $idx) |
88 | $type ($TYPE $mv) | |
89 | $size ($MalVal_size $mv) | |
90 | $val0 ($MalVal_val $idx 0)) | |
33309c6a | 91 | |
456d0a21 | 92 | ($printf_2 "%4d: type %2d" $idx $type) |
33309c6a JM |
93 | |
94 | (if (i32.eq $type 15) | |
456d0a21 JM |
95 | (then ($printf_1 ", size %2d" $size)) |
96 | (else ($printf_1 ", refs %2d" ($REFS $mv)))) | |
33309c6a | 97 | |
0a19c2f1 JM |
98 | (if (OR (i32.eq $type (global.get $STRING_T)) |
99 | (i32.eq $type (global.get $SYMBOL_T))) | |
3ea09886 | 100 | ;; for strings/symbolx pointers, print hex values |
456d0a21 JM |
101 | (then ($printf_2 " [%4d|%3ds" ($MalVal_refcnt_type $idx) $val0)) |
102 | (else ($printf_2 " [%4d|%4d" ($MalVal_refcnt_type $idx) $val0))) | |
33309c6a JM |
103 | |
104 | (if (i32.eq $size 2) | |
105 | (then | |
456d0a21 | 106 | ($print "|----|----]")) |
33309c6a | 107 | (else |
456d0a21 | 108 | ($printf_1 "|%4d" ($MalVal_val $idx 1)) |
33309c6a | 109 | (if (i32.eq $size 3) |
456d0a21 JM |
110 | (then ($print "|----]")) |
111 | (else ($printf_1 "|%4d]" ($MalVal_val $idx 2)))))) | |
33309c6a JM |
112 | |
113 | ;;; printf(" >> ") | |
114 | ($print " >> ") | |
115 | ||
116 | (block $done (block $unknown | |
117 | (block (block (block (block (block (block (block (block | |
118 | (block (block (block (block (block (block (block (block | |
119 | (br_table 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
120 | $unknown $type)) | |
121 | ;; 0: nil | |
122 | ($print "nil") | |
123 | (br $done)) | |
124 | ;; 1: boolean | |
125 | (if (i32.eq $val0 0) | |
126 | ;; true | |
127 | ($print "false") | |
128 | ;; false | |
129 | ($print "true")) | |
130 | (br $done)) | |
131 | ;; 2: integer | |
132 | ($printf_1 "%d" $val0) | |
133 | (br $done)) | |
134 | ;; 3: float/ERROR | |
135 | ($print " *** GOT FLOAT *** ") | |
136 | (br $done)) | |
137 | ;; 4: string/kw | |
138 | ($printf_1 "'%s'" ($to_String $mv)) | |
139 | (br $done)) | |
140 | ;; 5: symbol | |
141 | ($print ($to_String $mv)) | |
142 | (br $done)) | |
143 | ;; 6: list | |
0a19c2f1 | 144 | (if (i32.le_u $mv (global.get $EMPTY_HASHMAP)) |
33309c6a JM |
145 | (then |
146 | ($print "()")) | |
147 | (else | |
148 | ;;; printf("(... %d ...), next: %d\n", mv->val[1], mv->val[0]) | |
456d0a21 | 149 | ($printf_2 "(... %d ...), next: %d" |
33309c6a JM |
150 | ($MalVal_val $idx 1) |
151 | ($MalVal_val $idx 0)))) | |
152 | (br $done)) | |
153 | ;; 7: vector | |
0a19c2f1 | 154 | (if (i32.le_u $mv (global.get $EMPTY_HASHMAP)) |
33309c6a JM |
155 | (then |
156 | ($print "[]")) | |
157 | (else | |
158 | ;;; printf("[... %d ...], next: %d\n", mv->val[1], mv->val[0])val | |
159 | ($printf_2 "[... %d ...], next: %d" | |
160 | ($MalVal_val $idx 1) | |
161 | ($MalVal_val $idx 0)))) | |
162 | (br $done)) | |
163 | ;; 8: hashmap | |
0a19c2f1 | 164 | (if (i32.le_u $mv (global.get $EMPTY_HASHMAP)) |
33309c6a JM |
165 | (then |
166 | ($print "{}")) | |
167 | (else | |
168 | ;;; printf("{... '%s'(%d) : %d ...}\n", | |
169 | ;; to_String(mem + mv->val[1]), mv->val[1], mv->val[2]) | |
170 | ($printf_3 "{... '%s'(%d) : %d ...}" | |
171 | ($to_String ($MalVal_ptr ($MalVal_val $idx 1))) | |
172 | ($MalVal_val $idx 1) | |
173 | ($MalVal_val $idx 2)))) | |
174 | (br $done)) | |
175 | ;; 9: function | |
176 | ($print "function") | |
177 | (br $done)) | |
178 | ;; 10: mal function | |
179 | ($print "mal function") | |
180 | (br $done)) | |
181 | ;; 11: macro fn | |
182 | ($print "macro fn") | |
183 | (br $done)) | |
184 | ;; 12: atom | |
185 | ($print "atom") | |
186 | (br $done)) | |
187 | ;; 13: environment | |
188 | ($print "environment") | |
189 | (br $done)) | |
190 | ;; 14: metadata | |
191 | ($print "metadata") | |
192 | (br $done)) | |
193 | ;; 15: FREE | |
194 | ($printf_1 "FREE next: 0x%x" $val0) | |
0a19c2f1 | 195 | (if (i32.eq $idx (global.get $mem_free_list)) |
33309c6a | 196 | ($print " (free start)")) |
0a19c2f1 | 197 | (if (i32.eq $val0 (global.get $mem_unused_start)) |
33309c6a JM |
198 | ($print " (free end)")) |
199 | (br $done)) | |
200 | ;; 16: unknown | |
201 | ($print "unknown") | |
202 | ) | |
203 | ||
3ea09886 | 204 | ($print "\n") |
33309c6a JM |
205 | |
206 | (i32.add $size $idx) | |
207 | ) | |
208 | ||
50eea9ad | 209 | (func $PR_STRINGS (param $start i32) |
349faa83 JM |
210 | (LET $ms 0 |
211 | $idx 0) | |
50eea9ad | 212 | ($printf_2 "String - showing %d -> %d:\n" |
0a19c2f1 JM |
213 | $start (i32.sub (global.get $string_mem_next) |
214 | (global.get $string_mem))) | |
215 | (if (i32.le_s (i32.sub (global.get $string_mem_next) | |
216 | (global.get $string_mem)) | |
50eea9ad JM |
217 | $start) |
218 | (then ($print " ---\n")) | |
219 | (else | |
0a19c2f1 | 220 | (local.set $ms (global.get $string_mem)) |
50eea9ad JM |
221 | (block $done |
222 | (loop $loop | |
0a19c2f1 JM |
223 | (br_if $done (i32.ge_u $ms (global.get $string_mem_next))) |
224 | (local.set $idx (i32.sub $ms (global.get $string_mem))) | |
50eea9ad JM |
225 | (if (i32.ge_s $idx $start) |
226 | ($printf_4 "%4d: refs %2d, size %2d >> '%s'\n" | |
227 | $idx | |
228 | (i32.load16_u $ms) | |
229 | (i32.load16_u (i32.add $ms 2)) | |
230 | (i32.add $ms 4))) | |
231 | ||
0a19c2f1 | 232 | (local.set $ms (i32.add $ms (i32.load16_u (i32.add $ms 2)))) |
50eea9ad JM |
233 | (br $loop) |
234 | ) | |
235 | ))) | |
236 | ) | |
237 | ||
3ea09886 | 238 | (func $PR_MEMORY (param $start i32 $end i32) |
349faa83 JM |
239 | (LET $string_start 0 |
240 | $idx 0) | |
33309c6a | 241 | (if (i32.lt_s $start 0) |
50eea9ad | 242 | (then |
0a19c2f1 JM |
243 | (local.set $start (global.get $mem_user_start)) |
244 | (local.set $string_start (i32.sub (global.get $string_mem_user_start) | |
245 | (global.get $string_mem))))) | |
33309c6a | 246 | (if (i32.lt_s $end 0) |
0a19c2f1 | 247 | (local.set $end (global.get $mem_unused_start))) |
33309c6a JM |
248 | ;;; printf("Values - (mem) showing %d -> %d", start, end) |
249 | ;;; printf(" (unused start: %d, free list: %d):\n", | |
250 | ;;; mem_unused_start, mem_free_list) | |
251 | ($printf_4 "Values - (mem) showing 0x%x -> 0x%x (unused start: 0x%x, free list: 0x%x):\n" | |
252 | $start | |
253 | $end | |
0a19c2f1 JM |
254 | (global.get $mem_unused_start) |
255 | (global.get $mem_free_list)) | |
33309c6a JM |
256 | |
257 | (if (i32.le_s $end $start) | |
258 | (then | |
259 | ($print " ---\n") | |
0a19c2f1 | 260 | (local.set $end (global.get $mem_unused_start))) |
33309c6a | 261 | (else |
0a19c2f1 | 262 | (local.set $idx $start) |
33309c6a JM |
263 | ;;; while (idx < end) |
264 | (block $loopvals_exit | |
265 | (loop $loopvals | |
349faa83 | 266 | (br_if $loopvals_exit (i32.ge_s $idx $end)) |
0a19c2f1 | 267 | (local.set $idx ($PR_MEMORY_VALUE $idx)) |
33309c6a JM |
268 | (br $loopvals) |
269 | ) | |
270 | ))) | |
50eea9ad | 271 | ($PR_STRINGS $string_start) |
3ea09886 | 272 | ($PR_MEMORY_SUMMARY_SMALL) |
33309c6a JM |
273 | ) |
274 | ||
3ea09886 | 275 | (func $PR_MEMORY_RAW (param $start i32 $end i32) |
33309c6a JM |
276 | (block $loop_exit |
277 | (loop $loop | |
349faa83 | 278 | (br_if $loop_exit (i32.ge_u $start $end)) |
33309c6a | 279 | ($printf_2 "0x%x 0x%x\n" $start (i32.load $start)) |
0a19c2f1 | 280 | (local.set $start (i32.add 4 $start)) |
33309c6a JM |
281 | (br $loop) |
282 | ) | |
283 | ) | |
284 | ) | |
285 | ) |