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