https://github.com/akkartik/mu/blob/master/081table.subx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 == code
21
22
23
24
25
26 get:
27
28
29
30
31
32
33
34
35
36
37
38 55/push-ebp
39 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
40
41 51/push-ecx
42 52/push-edx
43 56/push-esi
44
45 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
46
47 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
48
49 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
50 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
51 $get:search-loop:
52
53 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
54 73/jump-if-addr>= $get:abort/disp8
55
56
57 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
58 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
59
60 e8/call lookup/disp32
61
62 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
63
64
65
66 50/push-eax
67 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
68
69 e8/call string-equal?/disp32
70
71 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
72
73 3d/compare-eax-and 0/imm32/false
74 74/jump-if-= $get:mismatch/disp8
75 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
76 eb/jump $get:end/disp8
77 $get:mismatch:
78
79 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
80
81 eb/jump $get:search-loop/disp8
82 $get:end:
83
84 5e/pop-to-esi
85 5a/pop-to-edx
86 59/pop-to-ecx
87
88 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
89 5d/pop-to-ebp
90 c3/return
91
92 $get:abort:
93
94
95 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 .
96 68/push 2/imm32/stderr
97
98 e8/call _write/disp32
99
100 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
101
102
103 68/push ": get: key not found: "/imm32
104 68/push 2/imm32/stderr
105
106 e8/call _write/disp32
107
108 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
109
110
111 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
112 68/push 2/imm32/stderr
113
114 e8/call _write/disp32
115
116 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
117
118
119 68/push Newline/imm32
120 68/push 2/imm32/stderr
121
122 e8/call _write/disp32
123
124 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
125
126 bb/copy-to-ebx 1/imm32
127 b8/copy-to-eax 1/imm32/exit
128 cd/syscall 0x80/imm8
129
130
131 test-get:
132
133 55/push-ebp
134 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
135
136
137 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
138 68/push 0x18/imm32/size
139 68/push 0/imm32/read
140 68/push 0/imm32/write
141 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
142
143
144 68/push Heap/imm32
145 68/push 0xc/imm32/row-size
146 68/push "code"/imm32
147 51/push-ecx
148
149 e8/call get-or-insert/disp32
150
151 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
152
153
154 68/push Heap/imm32
155 68/push 0xc/imm32/row-size
156 68/push "data"/imm32
157 51/push-ecx
158
159 e8/call get-or-insert/disp32
160
161 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
162 $test-get:check1:
163
164
165 68/push 0xc/imm32/row-size
166 68/push "code"/imm32
167 51/push-ecx
168
169 e8/call get/disp32
170
171 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
172
173
174
175 68/push "F - test-get/0"/imm32
176 68/push 0x14/imm32
177 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
178 50/push-eax
179
180 e8/call check-ints-equal/disp32
181
182 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
183 $test-get:check2:
184
185
186 68/push 0xc/imm32/row-size
187 68/push "data"/imm32
188 51/push-ecx
189
190 e8/call get/disp32
191
192 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
193
194
195
196 68/push "F - test-get/1"/imm32
197 68/push 0x20/imm32
198 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
199 50/push-eax
200
201 e8/call check-ints-equal/disp32
202
203 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
204 $test-get:end:
205
206 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
207 5d/pop-to-ebp
208 c3/return
209
210
211 get-slice:
212
213
214
215
216
217
218
219
220
221
222
223 55/push-ebp
224 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
225
226 51/push-ecx
227 52/push-edx
228 56/push-esi
229
230 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
231
232 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
233
234 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
235 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
236 $get-slice:search-loop:
237
238 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
239 73/jump-if-addr>= $get-slice:abort/disp8
240
241
242 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
243 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
244
245 e8/call lookup/disp32
246
247 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
248
249
250
251 50/push-eax
252 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
253
254 e8/call slice-equal?/disp32
255
256 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
257
258 3d/compare-eax-and 0/imm32/false
259 74/jump-if-= $get-slice:mismatch/disp8
260 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
261 eb/jump $get-slice:end/disp8
262 $get-slice:mismatch:
263
264 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
265
266 eb/jump $get-slice:search-loop/disp8
267 $get-slice:end:
268
269 5e/pop-to-esi
270 5a/pop-to-edx
271 59/pop-to-ecx
272
273 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
274 5d/pop-to-ebp
275 c3/return
276
277 $get-slice:abort:
278
279
280 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 .
281 68/push 2/imm32/stderr
282
283 e8/call _write/disp32
284
285 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
286
287
288 68/push ": get-slice: key not found: "/imm32
289 68/push 2/imm32/stderr
290
291 e8/call _write/disp32
292
293 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
294
295
296 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
297 68/push Stderr/imm32
298
299 e8/call write-slice-buffered/disp32
300
301 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
302
303
304 68/push Stderr/imm32
305
306 e8/call flush/disp32
307
308 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
309
310
311 68/push Newline/imm32
312 68/push 2/imm32/stderr
313
314 e8/call _write/disp32
315
316 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
317
318 bb/copy-to-ebx 1/imm32
319 b8/copy-to-eax 1/imm32/exit
320 cd/syscall 0x80/imm8
321
322
323 test-get-slice:
324
325 55/push-ebp
326 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
327
328
329 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
330 68/push 0x18/imm32/size
331 68/push 0/imm32/read
332 68/push 0/imm32/write
333 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
334
335
336 68/push Heap/imm32
337 68/push 0xc/imm32/row-size
338 68/push "code"/imm32
339 51/push-ecx
340
341 e8/call get-or-insert/disp32
342
343 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
344
345
346 68/push Heap/imm32
347 68/push 0xc/imm32/row-size
348 68/push "data"/imm32
349 51/push-ecx
350
351 e8/call get-or-insert/disp32
352
353 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
354 $test-get-slice:check1:
355
356 b8/copy-to-eax "code"/imm32
357 8b/copy 0/mod/indirect 0/rm32/eax . . . 2/r32/edx . .
358 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 2/index/edx . 2/r32/edx 4/disp8 .
359 05/add-to-eax 4/imm32
360
361 52/push-edx
362 50/push-eax
363 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
364
365
366 68/push 0xc/imm32/row-size
367 52/push-edx
368 51/push-ecx
369
370 e8/call get-slice/disp32
371
372 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
373
374
375
376 68/push "F - test-get-slice/0"/imm32
377 68/push 0x14/imm32
378 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
379 50/push-eax
380
381 e8/call check-ints-equal/disp32
382
383 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
384 $test-get-slice:check2:
385
386 b8/copy-to-eax "data"/imm32
387 8b/copy 0/mod/indirect 0/rm32/eax . . . 2/r32/edx . .
388 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 2/index/edx . 2/r32/edx 4/disp8 .
389 05/add-to-eax 4/imm32
390
391 52/push-edx
392 50/push-eax
393 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
394
395
396 68/push 0xc/imm32/row-size
397 52/push-edx
398 51/push-ecx
399
400 e8/call get-slice/disp32
401
402 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
403
404
405
406 68/push "F - test-get-slice/1"/imm32
407 68/push 0x20/imm32
408 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
409 50/push-eax
410
411 e8/call check-ints-equal/disp32
412
413 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
414 $test-get-slice:end:
415
416 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
417 5d/pop-to-ebp
418 c3/return
419
420
421
422
423 get-or-insert:
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440 55/push-ebp
441 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
442
443 51/push-ecx
444 52/push-edx
445 56/push-esi
446
447 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
448
449 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
450
451 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
452 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
453 $get-or-insert:search-loop:
454
455 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
456 73/jump-if-addr>= $get-or-insert:not-found/disp8
457
458
459 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
460 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
461
462 e8/call lookup/disp32
463
464 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
465
466
467
468 50/push-eax
469 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
470
471 e8/call string-equal?/disp32
472
473 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
474
475 3d/compare-eax-and 0/imm32/false
476 74/jump-if-= $get-or-insert:mismatch/disp8
477 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
478 eb/jump $get-or-insert:end/disp8
479 $get-or-insert:mismatch:
480
481 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
482
483 eb/jump $get-or-insert:search-loop/disp8
484 $get-or-insert:not-found:
485
486 8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . .
487 3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 .
488 73/jump-if-addr>= $get-or-insert:abort/disp8
489
490
491 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 .
492 52/push-edx
493
494 e8/call zero-out/disp32
495
496 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
497
498
499 52/push-edx
500 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
501 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 .
502
503 e8/call copy-array/disp32
504
505 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
506
507
508 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0x10/disp8 .
509
510 01/add 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . .
511
512
513 89/copy 3/mod/direct 0/rm32/eax . . . 2/r32/edx . .
514
515 05/add-to-eax 8/imm32
516 $get-or-insert:end:
517
518 5e/pop-to-esi
519 5a/pop-to-edx
520 59/pop-to-ecx
521
522 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
523 5d/pop-to-ebp
524 c3/return
525
526 $get-or-insert:abort:
527
528
529 68/push "get-or-insert: table is full\n"/imm32
530 68/push 2/imm32/stderr
531
532 e8/call _write/disp32
533
534 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
535
536 bb/copy-to-ebx 1/imm32
537 b8/copy-to-eax 1/imm32/exit
538 cd/syscall 0x80/imm8
539
540
541 test-get-or-insert:
542
543 55/push-ebp
544 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
545
546 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
547 68/push 0x18/imm32/size
548 68/push 0/imm32/read
549 68/push 0/imm32/write
550 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
551 $test-get-or-insert:first-call:
552
553
554
555 68/push Heap/imm32
556 68/push 0xc/imm32/row-size
557 68/push "code"/imm32
558 51/push-ecx
559
560 e8/call get-or-insert/disp32
561
562 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
563
564
565
566 68/push "F - test-get-or-insert/0"/imm32
567 68/push 0x14/imm32
568 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
569 50/push-eax
570
571 e8/call check-ints-equal/disp32
572
573 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
574
575
576 68/push "F - test-get-or-insert/1"/imm32
577 68/push 0xc/imm32/row-size
578 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
579
580 e8/call check-ints-equal/disp32
581
582 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
583
584
585 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
586 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
587
588 e8/call lookup/disp32
589
590 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
591
592
593 68/push "F - test-get-or-insert/2"/imm32
594 68/push "code"/imm32
595 50/push-eax
596
597 e8/call check-strings-equal/disp32
598
599 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
600 $test-get-or-insert:second-call:
601
602
603
604 68/push Heap/imm32
605 68/push 0xc/imm32/row-size
606 68/push "code"/imm32
607 51/push-ecx
608
609 e8/call get-or-insert/disp32
610
611 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
612
613
614
615 68/push "F - test-get-or-insert/3"/imm32
616 68/push 0x14/imm32
617 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
618 50/push-eax
619
620 e8/call check-ints-equal/disp32
621
622 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
623
624
625
626 68/push "F - test-get-or-insert/4"/imm32
627 68/push 0xc/imm32/row-size
628 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
629
630 e8/call check-ints-equal/disp32
631
632 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
633
634
635 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
636 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
637
638 e8/call lookup/disp32
639
640 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
641
642
643 68/push "F - test-get-or-insert/5"/imm32
644 68/push "code"/imm32
645 50/push-eax
646
647 e8/call check-strings-equal/disp32
648
649 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
650 $test-get-or-insert:third-call:
651
652
653
654 68/push Heap/imm32
655 68/push 0xc/imm32/row-size
656 68/push "data"/imm32
657 51/push-ecx
658
659 e8/call get-or-insert/disp32
660
661 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
662
663
664
665
666 68/push "F - test-get-or-insert/6"/imm32
667 68/push 0x20/imm32
668 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
669 50/push-eax
670
671 e8/call check-ints-equal/disp32
672
673 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
674
675
676 68/push "F - test-get-or-insert/7"/imm32
677 68/push 0x18/imm32/two-rows
678 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
679
680 e8/call check-ints-equal/disp32
681
682 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
683
684
685 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x1c/disp8 .
686 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x18/disp8 .
687
688 e8/call lookup/disp32
689
690 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
691
692
693 68/push "F - test-get-or-insert/8"/imm32
694 68/push "data"/imm32
695 50/push-eax
696
697 e8/call check-strings-equal/disp32
698
699 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
700 $test-get-or-insert:end:
701
702 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
703 5d/pop-to-ebp
704 c3/return
705
706
707
708
709 get-or-insert-handle:
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726 55/push-ebp
727 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
728
729 51/push-ecx
730 52/push-edx
731 53/push-ebx
732 56/push-esi
733
734 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
735
736
737
738 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 .
739 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
740
741 e8/call lookup/disp32
742
743 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
744
745 89/copy 3/mod/direct 3/rm32/ebx . . . 0/r32/eax . .
746
747 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
748
749 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
750 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
751 $get-or-insert-handle:search-loop:
752
753 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
754 73/jump-if-addr>= $get-or-insert-handle:not-found/disp8
755
756
757 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
758 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
759
760 e8/call lookup/disp32
761
762 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
763
764
765
766 50/push-eax
767 53/push-ebx
768
769 e8/call string-equal?/disp32
770
771 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
772
773 3d/compare-eax-and 0/imm32/false
774 74/jump-if-= $get-or-insert-handle:mismatch/disp8
775 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
776 eb/jump $get-or-insert-handle:end/disp8
777 $get-or-insert-handle:mismatch:
778
779 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x14/disp8 .
780
781 eb/jump $get-or-insert-handle:search-loop/disp8
782 $get-or-insert-handle:not-found:
783
784 8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . .
785 3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 .
786 73/jump-if-addr>= $get-or-insert-handle:abort/disp8
787
788
789 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0x14/disp8 .
790
791 01/add 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . .
792
793 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 .
794 89/copy 0/mod/indirect 2/rm32/edx . . . 0/r32/eax . .
795 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0x10/disp8 .
796 89/copy 1/mod/*+disp8 2/rm32/edx . . . 0/r32/eax 4/disp8 .
797
798
799 89/copy 3/mod/direct 0/rm32/eax . . . 2/r32/edx . .
800
801 05/add-to-eax 8/imm32
802 $get-or-insert-handle:end:
803
804 5e/pop-to-esi
805 5b/pop-to-ebx
806 5a/pop-to-edx
807 59/pop-to-ecx
808
809 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
810 5d/pop-to-ebp
811 c3/return
812
813 $get-or-insert-handle:abort:
814
815
816 68/push "get-or-insert-handle: table is full\n"/imm32
817 68/push 2/imm32/stderr
818
819 e8/call _write/disp32
820
821 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
822
823 bb/copy-to-ebx 1/imm32
824 b8/copy-to-eax 1/imm32/exit
825 cd/syscall 0x80/imm8
826
827
828 test-get-or-insert-handle:
829
830 55/push-ebp
831 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
832
833 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
834 68/push 0x18/imm32/size
835 68/push 0/imm32/read
836 68/push 0/imm32/write
837 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
838
839 68/push 0/imm32
840 68/push 0/imm32
841 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
842 $test-get-or-insert-handle:first-call:
843
844
845
846 52/push-edx
847 68/push "code"/imm32
848 68/push Heap/imm32
849
850 e8/call copy-array/disp32
851
852 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
853
854
855 68/push 0xc/imm32/row-size
856 ff 6/subop/push 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 .
857 ff 6/subop/push 0/mod/indirect 2/rm32/edx . . . . . .
858 51/push-ecx
859
860 e8/call get-or-insert-handle/disp32
861
862 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
863
864
865
866 68/push "F - test-get-or-insert-handle/0"/imm32
867 68/push 0x14/imm32
868 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
869 50/push-eax
870
871 e8/call check-ints-equal/disp32
872
873 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
874
875
876 68/push "F - test-get-or-insert-handle/1"/imm32
877 68/push 0xc/imm32/row-size
878 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
879
880 e8/call check-ints-equal/disp32
881
882 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
883
884
885 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
886 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
887
888 e8/call lookup/disp32
889
890 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
891
892
893 68/push "F - test-get-or-insert-handle/2"/imm32
894 68/push "code"/imm32
895 50/push-eax
896
897 e8/call check-strings-equal/disp32
898
899 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
900 $test-get-or-insert-handle:second-call:
901
902
903
904 52/push-edx
905 68/push "code"/imm32
906 68/push Heap/imm32
907
908 e8/call copy-array/disp32
909
910 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
911
912
913 68/push 0xc/imm32/row-size
914 ff 6/subop/push 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 .
915 ff 6/subop/push 0/mod/indirect 2/rm32/edx . . . . . .
916 51/push-ecx
917
918 e8/call get-or-insert-handle/disp32
919
920 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
921
922
923
924 68/push "F - test-get-or-insert-handle/3"/imm32
925 68/push 0x14/imm32
926 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
927 50/push-eax
928
929 e8/call check-ints-equal/disp32
930
931 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
932
933
934
935 68/push "F - test-get-or-insert-handle/4"/imm32
936 68/push 0xc/imm32/row-size
937 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
938
939 e8/call check-ints-equal/disp32
940
941 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
942
943
944 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
945 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
946
947 e8/call lookup/disp32
948
949 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
950
951
952 68/push "F - test-get-or-insert-handle/5"/imm32
953 68/push "code"/imm32
954 50/push-eax
955
956 e8/call check-strings-equal/disp32
957
958 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
959 $test-get-or-insert-handle:third-call:
960
961
962
963 52/push-edx
964 68/push "data"/imm32
965 68/push Heap/imm32
966
967 e8/call copy-array/disp32
968
969 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
970
971
972 68/push 0xc/imm32/row-size
973 ff 6/subop/push 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 .
974 ff 6/subop/push 0/mod/indirect 2/rm32/edx . . . . . .
975 51/push-ecx
976
977 e8/call get-or-insert-handle/disp32
978
979 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
980
981
982
983
984 68/push "F - test-get-or-insert-handle/6"/imm32
985 68/push 0x20/imm32
986 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
987 50/push-eax
988
989 e8/call check-ints-equal/disp32
990
991 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
992
993
994 68/push "F - test-get-or-insert-handle/7"/imm32
995 68/push 0x18/imm32/two-rows
996 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
997
998 e8/call check-ints-equal/disp32
999
1000 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1001
1002
1003 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x1c/disp8 .
1004 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x18/disp8 .
1005
1006 e8/call lookup/disp32
1007
1008 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1009
1010
1011 68/push "F - test-get-or-insert-handle/8"/imm32
1012 68/push "data"/imm32
1013 50/push-eax
1014
1015 e8/call check-strings-equal/disp32
1016
1017 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1018 $test-get-or-insert-handle:end:
1019
1020 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1021 5d/pop-to-ebp
1022 c3/return
1023
1024
1025
1026 get-or-insert-slice:
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043 55/push-ebp
1044 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1045
1046 51/push-ecx
1047 52/push-edx
1048 56/push-esi
1049
1050 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
1051
1052 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
1053
1054 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
1055 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
1056 $get-or-insert-slice:search-loop:
1057
1058 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
1059 73/jump-if-addr>= $get-or-insert-slice:not-found/disp8
1060
1061
1062 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
1063 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1064
1065 e8/call lookup/disp32
1066
1067 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1068
1069
1070
1071 50/push-eax
1072 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
1073
1074 e8/call slice-equal?/disp32
1075
1076 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1077
1078 3d/compare-eax-and 0/imm32/false
1079 74/jump-if-= $get-or-insert-slice:mismatch/disp8
1080 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
1081 eb/jump $get-or-insert-slice:end/disp8
1082 $get-or-insert-slice:mismatch:
1083
1084 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
1085
1086 eb/jump $get-or-insert-slice:search-loop/disp8
1087 $get-or-insert-slice:not-found:
1088
1089 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
1090
1091 8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . .
1092 3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 .
1093 7d/jump-if->= $get-or-insert-slice:abort/disp8
1094
1095
1096 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 .
1097 52/push-edx
1098
1099 e8/call zero-out/disp32
1100
1101 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1102
1103
1104 52/push-edx
1105 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
1106 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 .
1107
1108 e8/call slice-to-string/disp32
1109
1110 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1111
1112
1113 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0x10/disp8 .
1114
1115 01/add 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . .
1116
1117
1118 89/copy 3/mod/direct 0/rm32/eax . . . 2/r32/edx . .
1119
1120 05/add-to-eax 8/imm32
1121 $get-or-insert-slice:end:
1122
1123 5e/pop-to-esi
1124 5a/pop-to-edx
1125 59/pop-to-ecx
1126
1127 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1128 5d/pop-to-ebp
1129 c3/return
1130
1131 $get-or-insert-slice:abort:
1132
1133
1134 68/push "get-or-insert-slice: table is full\n"/imm32
1135 68/push 2/imm32/stderr
1136
1137 e8/call _write/disp32
1138
1139 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1140
1141 bb/copy-to-ebx 1/imm32
1142 b8/copy-to-eax 1/imm32/exit
1143 cd/syscall 0x80/imm8
1144
1145
1146 test-get-or-insert-slice:
1147
1148 55/push-ebp
1149 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1150
1151 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
1152 68/push 0x18/imm32/size
1153 68/push 0/imm32/read
1154 68/push 0/imm32/write
1155 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
1156
1157 b8/copy-to-eax "code"/imm32
1158 8b/copy 0/mod/indirect 0/rm32/eax . . . 2/r32/edx . .
1159 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 2/index/edx . 2/r32/edx 4/disp8 .
1160 05/add-to-eax 4/imm32
1161
1162 52/push-edx
1163 50/push-eax
1164 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
1165 $test-get-or-insert-slice:first-call:
1166
1167
1168
1169 68/push Heap/imm32
1170 68/push 0xc/imm32/row-size
1171 52/push-edx
1172 51/push-ecx
1173
1174 e8/call get-or-insert-slice/disp32
1175
1176 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
1177
1178
1179
1180 68/push "F - test-get-or-insert-slice/0"/imm32
1181 68/push 0x14/imm32
1182 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1183 50/push-eax
1184
1185 e8/call check-ints-equal/disp32
1186
1187 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1188
1189
1190 68/push "F - test-get-or-insert-slice/1"/imm32
1191 68/push 0xc/imm32/row-size
1192 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1193
1194 e8/call check-ints-equal/disp32
1195
1196 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1197
1198
1199 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
1200 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
1201
1202 e8/call lookup/disp32
1203
1204 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1205
1206
1207 68/push "F - test-get-or-insert-slice/2"/imm32
1208 68/push "code"/imm32
1209 50/push-eax
1210
1211 e8/call check-strings-equal/disp32
1212
1213 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1214 $test-get-or-insert-slice:second-call:
1215
1216
1217
1218 68/push Heap/imm32
1219 68/push 0xc/imm32/row-size
1220 52/push-edx
1221 51/push-ecx
1222
1223 e8/call get-or-insert-slice/disp32
1224
1225 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
1226
1227
1228
1229 68/push "F - test-get-or-insert-slice/3"/imm32
1230 68/push 0x14/imm32
1231 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1232 50/push-eax
1233
1234 e8/call check-ints-equal/disp32
1235
1236 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1237
1238
1239
1240 68/push "F - test-get-or-insert-slice/4"/imm32
1241 68/push 0xc/imm32/row-size
1242 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1243
1244 e8/call check-ints-equal/disp32
1245
1246 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1247
1248
1249 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
1250 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
1251
1252 e8/call lookup/disp32
1253
1254 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1255
1256
1257 68/push "F - test-get-or-insert-slice/5"/imm32
1258 68/push "code"/imm32
1259 50/push-eax
1260
1261 e8/call check-strings-equal/disp32
1262
1263 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1264 $test-get-or-insert-slice:third-call:
1265
1266
1267 b8/copy-to-eax "data"/imm32
1268 8b/copy 0/mod/indirect 0/rm32/eax . . . 2/r32/edx . .
1269 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 2/index/edx . 2/r32/edx 4/disp8 .
1270 05/add-to-eax 4/imm32
1271
1272 52/push-edx
1273 50/push-eax
1274 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
1275
1276
1277 68/push Heap/imm32
1278 68/push 0xc/imm32/row-size
1279 52/push-edx
1280 51/push-ecx
1281
1282 e8/call get-or-insert-slice/disp32
1283
1284 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
1285
1286
1287
1288
1289 68/push "F - test-get-or-insert-slice/6"/imm32
1290 68/push 0x20/imm32
1291 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1292 50/push-eax
1293
1294 e8/call check-ints-equal/disp32
1295
1296 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1297
1298
1299 68/push "F - test-get-or-insert-slice/7"/imm32
1300 68/push 0x18/imm32/two-rows
1301 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1302
1303 e8/call check-ints-equal/disp32
1304
1305 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1306
1307
1308 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x1c/disp8 .
1309 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x18/disp8 .
1310
1311 e8/call lookup/disp32
1312
1313 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1314
1315
1316 68/push "F - test-get-or-insert-slice/8"/imm32
1317 68/push "data"/imm32
1318 50/push-eax
1319
1320 e8/call check-strings-equal/disp32
1321
1322 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1323 $test-get-or-insert-slice:end:
1324
1325 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1326 5d/pop-to-ebp
1327 c3/return
1328
1329
1330 get-or-stop:
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345 55/push-ebp
1346 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1347
1348 51/push-ecx
1349 52/push-edx
1350 56/push-esi
1351
1352 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
1353
1354 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
1355
1356 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
1357 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
1358 $get-or-stop:search-loop:
1359
1360 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
1361 73/jump-if-addr>= $get-or-stop:stop/disp8
1362
1363
1364 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
1365 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1366
1367 e8/call lookup/disp32
1368
1369 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1370
1371
1372
1373 50/push-eax
1374 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
1375
1376 e8/call string-equal?/disp32
1377
1378 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1379
1380 3d/compare-eax-and 0/imm32/false
1381 74/jump-if-= $get-or-stop:mismatch/disp8
1382 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
1383 eb/jump $get-or-stop:end/disp8
1384 $get-or-stop:mismatch:
1385
1386 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
1387
1388 eb/jump $get-or-stop:search-loop/disp8
1389 $get-or-stop:end:
1390
1391 5e/pop-to-esi
1392 5a/pop-to-edx
1393 59/pop-to-ecx
1394
1395 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1396 5d/pop-to-ebp
1397 c3/return
1398
1399 $get-or-stop:stop:
1400
1401
1402 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 .
1403 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1404
1405 e8/call write-buffered/disp32
1406
1407 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1408
1409
1410 68/push ": get-or-stop: key not found: "/imm32
1411 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1412
1413 e8/call write-buffered/disp32
1414
1415 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1416
1417
1418 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
1419 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1420
1421 e8/call write-buffered/disp32
1422
1423 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1424
1425
1426 68/push Newline/imm32
1427 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1428
1429 e8/call write-buffered/disp32
1430
1431 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1432
1433
1434 68/push 1/imm32
1435 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x1c/disp8 .
1436
1437 e8/call stop/disp32
1438
1439 $get-or-stop:terminus:
1440
1441 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1442
1443 b8/copy-to-eax 1/imm32/exit
1444 cd/syscall 0x80/imm8
1445
1446 test-get-or-stop:
1447
1448
1449 55/push-ebp
1450 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1451
1452
1453
1454 68/push _test-error-stream/imm32
1455
1456 e8/call clear-stream/disp32
1457
1458 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1459
1460
1461 68/push $_test-error-buffered-file->buffer/imm32
1462
1463 e8/call clear-stream/disp32
1464
1465 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1466
1467 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
1468 68/push 0x18/imm32/size
1469 68/push 0/imm32/read
1470 68/push 0/imm32/write
1471 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
1472
1473 68/push 0/imm32
1474 68/push 0/imm32
1475 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
1476
1477
1478
1479 68/push 0x18/imm32/nbytes-of-args-for-get-or-stop
1480 52/push-edx
1481
1482 e8/call tailor-exit-descriptor/disp32
1483
1484 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1485
1486
1487 68/push Heap/imm32
1488 68/push 0xc/imm32/row-size
1489 68/push "code"/imm32
1490 51/push-ecx
1491
1492 e8/call get-or-insert/disp32
1493
1494 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
1495 $test-get-or-stop:success:
1496
1497
1498 52/push-edx/ed
1499 68/push _test-error-buffered-file/imm32
1500 68/push "foo"/imm32/abort-prefix
1501 68/push 0xc/imm32/row-size
1502 68/push "code"/imm32
1503 51/push-ecx
1504
1505 e8/call get-or-stop/disp32
1506
1507 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
1508 $test-get-or-stop:success-assertion:
1509
1510
1511
1512 68/push "F - test-get-or-stop/0"/imm32
1513 68/push 0x14/imm32
1514 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1515 50/push-eax
1516
1517 e8/call check-ints-equal/disp32
1518
1519 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1520 $test-get-or-stop:failure:
1521
1522
1523 52/push-edx/ed
1524 68/push _test-error-buffered-file/imm32
1525 68/push "foo"/imm32/abort-prefix
1526 68/push 0xc/imm32/row-size
1527 68/push "data"/imm32
1528 51/push-ecx
1529
1530 e8/call get-or-stop/disp32
1531
1532
1533 59/pop-to-ecx
1534 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
1535 5a/pop-to-edx
1536 $test-get-or-stop:failure-assertion:
1537
1538
1539
1540 68/push "F - test-get-or-stop/1"/imm32
1541 68/push 2/imm32
1542
1543 ff 6/subop/push 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 .
1544
1545 e8/call check-ints-equal/disp32
1546
1547 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1548 $test-get-or-stop:end:
1549
1550
1551 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x2c/imm32
1552 5d/pop-to-ebp
1553 c3/return
1554
1555
1556 get-slice-or-stop:
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571 55/push-ebp
1572 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1573
1574 51/push-ecx
1575 52/push-edx
1576 56/push-esi
1577
1578 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
1579
1580 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
1581
1582 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
1583 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
1584 $get-slice-or-stop:search-loop:
1585
1586 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
1587 73/jump-if-addr>= $get-slice-or-stop:stop/disp8
1588
1589
1590 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
1591 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1592
1593 e8/call lookup/disp32
1594
1595 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1596
1597
1598
1599 50/push-eax
1600 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
1601
1602 e8/call slice-equal?/disp32
1603
1604 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1605
1606 3d/compare-eax-and 0/imm32/false
1607 74/jump-if-= $get-slice-or-stop:mismatch/disp8
1608 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
1609 eb/jump $get-slice-or-stop:end/disp8
1610 $get-slice-or-stop:mismatch:
1611
1612 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
1613
1614 eb/jump $get-slice-or-stop:search-loop/disp8
1615 $get-slice-or-stop:end:
1616
1617 5e/pop-to-esi
1618 5a/pop-to-edx
1619 59/pop-to-ecx
1620
1621 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1622 5d/pop-to-ebp
1623 c3/return
1624
1625 $get-slice-or-stop:stop:
1626
1627
1628 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x14/disp8 .
1629 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1630
1631 e8/call write-buffered/disp32
1632
1633 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1634
1635
1636 68/push ": get-slice-or-stop: key not found: "/imm32
1637 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1638
1639 e8/call write-buffered/disp32
1640
1641 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1642
1643
1644 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
1645 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1646
1647 e8/call write-slice-buffered/disp32
1648
1649 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1650
1651
1652 68/push Newline/imm32
1653 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 .
1654
1655 e8/call write-buffered/disp32
1656
1657 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1658
1659
1660 68/push 1/imm32
1661 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x1c/disp8 .
1662
1663 e8/call stop/disp32
1664
1665 $get-slice-or-stop:terminus:
1666
1667 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1668
1669 b8/copy-to-eax 1/imm32/exit
1670 cd/syscall 0x80/imm8
1671
1672 test-get-slice-or-stop:
1673
1674
1675 55/push-ebp
1676 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1677
1678
1679
1680 68/push _test-error-stream/imm32
1681
1682 e8/call clear-stream/disp32
1683
1684 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1685
1686
1687 68/push $_test-error-buffered-file->buffer/imm32
1688
1689 e8/call clear-stream/disp32
1690
1691 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
1692
1693 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
1694 68/push 0x18/imm32/size
1695 68/push 0/imm32/read
1696 68/push 0/imm32/write
1697 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
1698
1699 68/push 0/imm32
1700 68/push 0/imm32
1701 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
1702
1703
1704 b8/copy-to-eax "code"/imm32
1705 8b/copy 0/mod/indirect 0/rm32/eax . . . 3/r32/ebx . .
1706 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 3/index/ebx . 3/r32/ebx 4/disp8 .
1707 05/add-to-eax 4/imm32
1708
1709 53/push-ebx
1710 50/push-eax
1711 89/copy 3/mod/direct 3/rm32/ebx . . . 4/r32/esp . .
1712
1713
1714
1715 68/push 0x18/imm32/nbytes-of-args-for-get-or-stop
1716 52/push-edx
1717
1718 e8/call tailor-exit-descriptor/disp32
1719
1720 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1721
1722
1723 68/push Heap/imm32
1724 68/push 0xc/imm32/row-size
1725 68/push "code"/imm32
1726 51/push-ecx
1727
1728 e8/call get-or-insert/disp32
1729
1730 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
1731 $test-get-slice-or-stop:success:
1732
1733
1734 52/push-edx/ed
1735 68/push _test-error-buffered-file/imm32
1736 68/push "foo"/imm32/abort-prefix
1737 68/push 0xc/imm32/row-size
1738 53/push-ebx/slice
1739 51/push-ecx
1740
1741 e8/call get-slice-or-stop/disp32
1742
1743
1744 59/pop-to-ecx
1745 5b/pop-to-ebx
1746 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1747 5a/pop-to-edx
1748 $test-get-slice-or-stop:success-assertion:
1749
1750
1751
1752 68/push "F - test-get-slice-or-stop/0"/imm32
1753 68/push 0x14/imm32
1754 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1755 50/push-eax
1756
1757 e8/call check-ints-equal/disp32
1758
1759 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1760 $test-get-slice-or-stop:failure:
1761
1762
1763 b8/copy-to-eax "segment2"/imm32
1764 05/add-to-eax 4/imm32
1765 89/copy 0/mod/indirect 3/rm32/ebx . . . 0/r32/eax . .
1766
1767 05/add-to-eax 8/imm32/strlen
1768 89/copy 1/mod/*+disp8 3/rm32/ebx . . . 0/r32/eax 4/disp8 .
1769
1770
1771 52/push-edx/ed
1772 68/push _test-error-buffered-file/imm32
1773 68/push "foo"/imm32/abort-prefix
1774 68/push 0xc/imm32/row-size
1775 53/push-ebx/slice
1776 51/push-ecx
1777
1778 e8/call get-slice-or-stop/disp32
1779
1780
1781 59/pop-to-ecx
1782 5b/pop-to-ebx
1783 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1784 5a/pop-to-edx
1785 $test-get-slice-or-stop:failure-assertion:
1786
1787
1788
1789 68/push "F - test-get-or-stop/1"/imm32
1790 68/push 2/imm32
1791
1792 ff 6/subop/push 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 .
1793
1794 e8/call check-ints-equal/disp32
1795
1796 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1797 $test-get-slice-or-stop:end:
1798
1799
1800 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x34/imm32
1801 5d/pop-to-ebp
1802 c3/return
1803
1804
1805 maybe-get:
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817 55/push-ebp
1818 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1819
1820 51/push-ecx
1821 52/push-edx
1822 56/push-esi
1823
1824 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
1825
1826 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
1827
1828 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
1829 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
1830 $maybe-get:search-loop:
1831
1832 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
1833 73/jump-if-addr>= $maybe-get:null/disp8
1834
1835
1836 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
1837 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1838
1839 e8/call lookup/disp32
1840
1841 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1842
1843
1844
1845 50/push-eax
1846 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
1847
1848 e8/call string-equal?/disp32
1849
1850 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1851
1852 3d/compare-eax-and 0/imm32/false
1853 74/jump-if-= $maybe-get:mismatch/disp8
1854 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
1855 eb/jump $maybe-get:end/disp8
1856 $maybe-get:mismatch:
1857
1858 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
1859
1860 eb/jump $maybe-get:search-loop/disp8
1861 $maybe-get:null:
1862 b8/copy-to-eax 0/imm32
1863 $maybe-get:end:
1864
1865 5e/pop-to-esi
1866 5a/pop-to-edx
1867 59/pop-to-ecx
1868
1869 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1870 5d/pop-to-ebp
1871 c3/return
1872
1873 test-maybe-get:
1874
1875 55/push-ebp
1876 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1877
1878
1879 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
1880 68/push 0x18/imm32/size
1881 68/push 0/imm32/read
1882 68/push 0/imm32/write
1883 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
1884
1885
1886 68/push Heap/imm32
1887 68/push 0xc/imm32/row-size
1888 68/push "code"/imm32
1889 51/push-ecx
1890
1891 e8/call get-or-insert/disp32
1892
1893 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
1894 $test-maybe-get:success:
1895
1896
1897
1898 68/push 0xc/imm32/row-size
1899 68/push "code"/imm32
1900 51/push-ecx
1901
1902 e8/call maybe-get/disp32
1903
1904 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1905
1906
1907
1908 68/push "F - test-maybe-get/0"/imm32
1909 68/push 0x14/imm32
1910 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1911 50/push-eax
1912
1913 e8/call check-ints-equal/disp32
1914
1915 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1916
1917
1918
1919 68/push "F - test-maybe-get/1"/imm32
1920 68/push 0xc/imm32/row-size
1921 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
1922
1923 e8/call check-ints-equal/disp32
1924
1925 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1926
1927
1928 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
1929 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
1930
1931 e8/call lookup/disp32
1932
1933 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1934
1935
1936 68/push "F - test-maybe-get/2"/imm32
1937 68/push "code"/imm32
1938 50/push-eax
1939
1940 e8/call check-strings-equal/disp32
1941
1942 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1943 $test-maybe-get:failure:
1944
1945
1946
1947 68/push 0xc/imm32/row-size
1948 68/push "data"/imm32
1949 51/push-ecx
1950
1951 e8/call maybe-get/disp32
1952
1953 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1954
1955
1956 68/push "F - test-maybe-get/3"/imm32
1957 68/push 0/imm32
1958 50/push-eax
1959
1960 e8/call check-ints-equal/disp32
1961
1962 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1963 $test-maybe-get:end:
1964
1965 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1966 5d/pop-to-ebp
1967 c3/return
1968
1969
1970 maybe-get-slice:
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982 55/push-ebp
1983 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1984
1985 51/push-ecx
1986 52/push-edx
1987 56/push-esi
1988
1989 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
1990
1991 8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 0xc/disp8 .
1992
1993 8b/copy 0/mod/indirect 6/rm32/esi . . . 2/r32/edx . .
1994 8d/copy-address 0/mod/indirect 4/rm32/sib 1/base/ecx 2/index/edx . 2/r32/edx . .
1995 $maybe-get-slice:search-loop:
1996
1997 39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . .
1998 73/jump-if-addr>= $maybe-get-slice:null/disp8
1999
2000
2001 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
2002 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
2003
2004 e8/call lookup/disp32
2005
2006 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
2007
2008
2009
2010 50/push-eax
2011 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
2012
2013 e8/call slice-equal?/disp32
2014
2015 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
2016
2017 3d/compare-eax-and 0/imm32/false
2018 74/jump-if-= $maybe-get-slice:mismatch/disp8
2019 8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 8/disp8 .
2020 eb/jump $maybe-get-slice:end/disp8
2021 $maybe-get-slice:mismatch:
2022
2023 03/add 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 .
2024
2025 eb/jump $maybe-get-slice:search-loop/disp8
2026 $maybe-get-slice:null:
2027 b8/copy-to-eax 0/imm32
2028 $maybe-get-slice:end:
2029
2030 5e/pop-to-esi
2031 5a/pop-to-edx
2032 59/pop-to-ecx
2033
2034 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
2035 5d/pop-to-ebp
2036 c3/return
2037
2038 test-maybe-get-slice:
2039
2040 55/push-ebp
2041 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
2042
2043
2044 81 5/subop/subtract 3/mod/direct 4/rm32/esp . . . . . 0x18/imm32
2045 68/push 0x18/imm32/size
2046 68/push 0/imm32/read
2047 68/push 0/imm32/write
2048 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
2049
2050
2051 68/push Heap/imm32
2052 68/push 0xc/imm32/row-size
2053 68/push "code"/imm32
2054 51/push-ecx
2055
2056 e8/call get-or-insert/disp32
2057
2058 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
2059 $test-maybe-get-slice:success:
2060
2061
2062 b8/copy-to-eax "code"/imm32
2063 8b/copy 0/mod/indirect 0/rm32/eax . . . 2/r32/edx . .
2064 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 2/index/edx . 2/r32/edx 4/disp8 .
2065 05/add-to-eax 4/imm32
2066
2067 52/push-edx
2068 50/push-eax
2069 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
2070
2071
2072 68/push 0xc/imm32/row-size
2073 52/push-edx
2074 51/push-ecx
2075
2076 e8/call maybe-get-slice/disp32
2077
2078 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
2079
2080
2081
2082 68/push "F - test-maybe-get-slice/0"/imm32
2083 68/push 0x14/imm32
2084 29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
2085 50/push-eax
2086
2087 e8/call check-ints-equal/disp32
2088
2089 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
2090
2091
2092
2093 68/push "F - test-maybe-get-slice/1"/imm32
2094 68/push 0xc/imm32/row-size
2095 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
2096
2097 e8/call check-ints-equal/disp32
2098
2099 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
2100
2101
2102 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0x10/disp8 .
2103 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 0xc/disp8 .
2104
2105 e8/call lookup/disp32
2106
2107 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
2108
2109
2110 68/push "F - test-maybe-get-slice/2"/imm32
2111 68/push "code"/imm32
2112 50/push-eax
2113
2114 e8/call check-strings-equal/disp32
2115
2116 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
2117 $test-maybe-get-slice:failure:
2118
2119
2120 b8/copy-to-eax "data"/imm32
2121 8b/copy 0/mod/indirect 0/rm32/eax . . . 2/r32/edx . .
2122 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 2/index/edx . 2/r32/edx 4/disp8 .
2123 05/add-to-eax 4/imm32
2124
2125 52/push-edx
2126 50/push-eax
2127 89/copy 3/mod/direct 2/rm32/edx . . . 4/r32/esp . .
2128
2129
2130 68/push 0xc/imm32/row-size
2131 52/push-edx
2132 51/push-ecx
2133
2134 e8/call maybe-get-slice/disp32
2135
2136 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
2137
2138
2139 68/push "F - test-maybe-get-slice/3"/imm32
2140 68/push 0/imm32
2141 50/push-eax
2142
2143 e8/call check-ints-equal/disp32
2144
2145 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
2146 $test-maybe-get-slice:end:
2147
2148 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
2149 5d/pop-to-ebp
2150 c3/return
2151
2152