https://github.com/akkartik/mu/blob/master/073next-token.subx
1
2
3 == code
4
5
6
7
8
9
10 next-token:
11
12 55/push-ebp
13 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
14
15 50/push-eax
16 51/push-ecx
17 56/push-esi
18 57/push-edi
19
20 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
21
22 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 7/r32/edi 0x10/disp8 .
23
24
25 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
26 56/push-esi
27
28 e8/call skip-chars-matching/disp32
29
30 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
31
32 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
33 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 0xc/disp8 .
34 89/copy 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . .
35
36
37 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 .
38 56/push-esi
39
40 e8/call skip-chars-not-matching/disp32
41
42 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
43
44 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
45 8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 0xc/disp8 .
46 89/copy 1/mod/*+disp8 7/rm32/edi . . . 0/r32/eax 4/disp8 .
47
48 5f/pop-to-edi
49 5e/pop-to-esi
50 59/pop-to-ecx
51 58/pop-to-eax
52
53 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
54 5d/pop-to-ebp
55 c3/return
56
57 test-next-token:
58
59 55/push-ebp
60 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
61
62
63
64 68/push _test-stream/imm32
65
66 e8/call clear-stream/disp32
67
68 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
69
70 68/push 0/imm32/end
71 68/push 0/imm32/start
72 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
73
74
75 68/push " ab"/imm32
76 68/push _test-stream/imm32
77
78 e8/call write/disp32
79
80 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
81
82
83 51/push-ecx
84 68/push 0x20/imm32
85 68/push _test-stream/imm32
86
87 e8/call next-token/disp32
88
89 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
90
91
92
93 68/push "F - test-next-token: start"/imm32
94 68/push 0xe/imm32
95
96 8b/copy 0/mod/indirect 1/rm32/ecx . . . 0/r32/eax . .
97 81 5/subop/subtract 3/mod/direct 0/rm32/eax . . . . . _test-stream/imm32
98 50/push-eax
99
100 e8/call check-ints-equal/disp32
101
102 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
103
104
105
106 68/push "F - test-next-token: end"/imm32
107 68/push 0x10/imm32
108
109 8b/copy 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 .
110 81 5/subop/subtract 3/mod/direct 0/rm32/eax . . . . . _test-stream/imm32
111 50/push-eax
112
113 e8/call check-ints-equal/disp32
114
115 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
116
117 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
118 5d/pop-to-ebp
119 c3/return
120
121 test-next-token-Eof:
122
123 55/push-ebp
124 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
125
126
127
128 68/push _test-stream/imm32
129
130 e8/call clear-stream/disp32
131
132 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
133
134 68/push 0/imm32/end
135 68/push 0/imm32/start
136 89/copy 3/mod/direct 1/rm32/ecx . . . 4/r32/esp . .
137
138
139
140 51/push-ecx
141 68/push 0x20/imm32
142 68/push _test-stream/imm32
143
144 e8/call next-token/disp32
145
146 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
147
148
149 68/push "F - test-next-token-Eof"/imm32
150 ff 6/subop/push 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 .
151 ff 6/subop/push 0/mod/indirect 1/rm32/ecx . . . . . .
152
153 e8/call check-ints-equal/disp32
154
155 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
156
157 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
158 5d/pop-to-ebp
159 c3/return
160
161
162
163 next-token-from-slice:
164
165 55/push-ebp
166 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
167
168 50/push-eax
169 51/push-ecx
170 52/push-edx
171 57/push-edi
172
173 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
174
175 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0x10/disp8 .
176
177 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 7/r32/edi 0x14/disp8 .
178
179
180 52/push-edx
181 51/push-ecx
182 ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 .
183
184 e8/call skip-chars-matching-in-slice/disp32
185
186 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
187
188 89/copy 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . .
189
190
191 52/push-edx
192 51/push-ecx
193 50/push-eax
194
195 e8/call skip-chars-not-matching-in-slice/disp32
196
197 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
198
199 89/copy 1/mod/*+disp8 7/rm32/edi . . . 0/r32/eax 4/disp8 .
200
201 5f/pop-to-edi
202 5a/pop-to-edx
203 59/pop-to-ecx
204 58/pop-to-eax
205
206 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
207 5d/pop-to-ebp
208 c3/return
209
210 test-next-token-from-slice:
211
212 55/push-ebp
213 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
214
215 b8/copy-to-eax " ab"/imm32
216 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
217 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
218 05/add-to-eax 4/imm32
219
220 68/push 0/imm32/end
221 68/push 0/imm32/start
222 89/copy 3/mod/direct 7/rm32/edi . . . 4/r32/esp . .
223
224
225 57/push-edi
226 68/push 0x20/imm32
227 51/push-ecx
228 50/push-eax
229
230 e8/call next-token-from-slice/disp32
231
232 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
233
234
235
236 68/push "F - test-next-token-from-slice: start"/imm32
237 68/push 2/imm32
238
239 8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . .
240 2b/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
241 51/push-ecx
242
243 e8/call check-ints-equal/disp32
244
245 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
246
247
248
249 68/push "F - test-next-token-from-slice: end"/imm32
250 68/push 4/imm32
251
252 8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 .
253 2b/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
254 51/push-ecx
255
256 e8/call check-ints-equal/disp32
257
258 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
259
260 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
261 5d/pop-to-ebp
262 c3/return
263
264 test-next-token-from-slice-Eof:
265
266 55/push-ebp
267 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
268
269 68/push 0/imm32/end
270 68/push 0/imm32/start
271 89/copy 3/mod/direct 7/rm32/edi . . . 4/r32/esp . .
272
273
274 57/push-edi
275 68/push 0x20/imm32
276 68/push 0/imm32
277 68/push 0/imm32
278
279 e8/call next-token-from-slice/disp32
280
281 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
282
283
284
285 68/push "F - test-next-token-from-slice-Eof"/imm32
286 68/push 0/imm32
287
288 8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 .
289 2b/subtract 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . .
290 51/push-ecx
291
292 e8/call check-ints-equal/disp32
293
294 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
295
296 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
297 5d/pop-to-ebp
298 c3/return
299
300 test-next-token-from-slice-nothing:
301
302 55/push-ebp
303 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
304
305 b8/copy-to-eax " "/imm32
306 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
307 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
308 05/add-to-eax 4/imm32
309
310 68/push 0/imm32/end
311 68/push 0/imm32/start
312 89/copy 3/mod/direct 7/rm32/edi . . . 4/r32/esp . .
313
314
315 57/push-edi
316 68/push 0x20/imm32
317 51/push-ecx
318 50/push-eax
319
320 e8/call next-token-from-slice/disp32
321
322 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0x10/imm32
323
324
325
326 68/push "F - test-next-token-from-slice-Eof"/imm32
327 68/push 0/imm32
328
329 8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 .
330 2b/subtract 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . .
331 51/push-ecx
332
333 e8/call check-ints-equal/disp32
334
335 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
336
337 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
338 5d/pop-to-ebp
339 c3/return
340
341 skip-chars-matching:
342
343 55/push-ebp
344 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
345
346 50/push-eax
347 51/push-ecx
348 52/push-edx
349 53/push-ebx
350 56/push-esi
351
352 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
353
354 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
355
356 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
357
358 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0xc/disp8 .
359 $skip-chars-matching:loop:
360
361 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
362 7d/jump-if-greater-or-equal $skip-chars-matching:end/disp8
363
364 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
365 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
366
367 39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . .
368 75/jump-if-not-equal $skip-chars-matching:end/disp8
369
370 41/increment-ecx
371 eb/jump $skip-chars-matching:loop/disp8
372 $skip-chars-matching:end:
373
374 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
375
376 5e/pop-to-esi
377 5b/pop-to-ebx
378 5a/pop-to-edx
379 59/pop-to-ecx
380 58/pop-to-eax
381
382 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
383 5d/pop-to-ebp
384 c3/return
385
386 test-skip-chars-matching:
387
388
389
390 68/push _test-stream/imm32
391
392 e8/call clear-stream/disp32
393
394 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
395
396
397 68/push " ab"/imm32
398 68/push _test-stream/imm32
399
400 e8/call write/disp32
401
402 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
403
404
405 68/push 0x20/imm32
406 68/push _test-stream/imm32
407
408 e8/call skip-chars-matching/disp32
409
410 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
411
412
413 68/push "F - test-skip-chars-matching"/imm32
414 68/push 2/imm32
415
416 b8/copy-to-eax _test-stream/imm32
417 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
418
419 e8/call check-ints-equal/disp32
420
421 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
422
423 c3/return
424
425 test-skip-chars-matching-none:
426
427
428
429 68/push _test-stream/imm32
430
431 e8/call clear-stream/disp32
432
433 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
434
435
436 68/push "ab"/imm32
437 68/push _test-stream/imm32
438
439 e8/call write/disp32
440
441 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
442
443
444 68/push 0x20/imm32
445 68/push _test-stream/imm32
446
447 e8/call skip-chars-matching/disp32
448
449 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
450
451
452 68/push "F - test-skip-chars-matching-none"/imm32
453 68/push 0/imm32
454
455 b8/copy-to-eax _test-stream/imm32
456 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
457
458 e8/call check-ints-equal/disp32
459
460 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
461
462 c3/return
463
464 skip-chars-matching-whitespace:
465
466 55/push-ebp
467 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
468
469 50/push-eax
470 51/push-ecx
471 53/push-ebx
472 56/push-esi
473
474 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
475
476 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
477
478 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
479 $skip-chars-matching-whitespace:loop:
480
481 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
482 7d/jump-if-greater-or-equal $skip-chars-matching-whitespace:end/disp8
483
484 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
485 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
486
487 3d/compare-eax-and 0x20/imm32/space
488 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
489
490 3d/compare-eax-and 0x0a/imm32/newline
491 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
492
493 3d/compare-eax-and 0x09/imm32/tab
494 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
495
496 3d/compare-eax-and 0x0d/imm32/cr
497 75/jump-if-not-equal $skip-chars-matching-whitespace:end/disp8
498 $skip-chars-matching-whitespace:body:
499
500 41/increment-ecx
501 eb/jump $skip-chars-matching-whitespace:loop/disp8
502 $skip-chars-matching-whitespace:end:
503
504 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
505
506 5e/pop-to-esi
507 5b/pop-to-ebx
508 59/pop-to-ecx
509 58/pop-to-eax
510
511 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
512 5d/pop-to-ebp
513 c3/return
514
515 test-skip-chars-matching-whitespace:
516
517
518
519 68/push _test-stream/imm32
520
521 e8/call clear-stream/disp32
522
523 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
524
525
526 68/push " \nab"/imm32
527 68/push _test-stream/imm32
528
529 e8/call write/disp32
530
531 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
532
533
534 68/push _test-stream/imm32
535
536 e8/call skip-chars-matching-whitespace/disp32
537
538 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
539
540
541 68/push "F - test-skip-chars-matching-whitespace"/imm32
542 68/push 2/imm32
543
544 b8/copy-to-eax _test-stream/imm32
545 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
546
547 e8/call check-ints-equal/disp32
548
549 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
550
551 c3/return
552
553
554 skip-chars-not-matching:
555
556 55/push-ebp
557 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
558
559 50/push-eax
560 51/push-ecx
561 52/push-edx
562 53/push-ebx
563 56/push-esi
564
565 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
566
567 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
568
569 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
570
571 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0xc/disp8 .
572 $skip-chars-not-matching:loop:
573
574 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
575 7d/jump-if-greater-or-equal $skip-chars-not-matching:end/disp8
576
577 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
578 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
579
580 39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . .
581 74/jump-if-equal $skip-chars-not-matching:end/disp8
582
583 41/increment-ecx
584 eb/jump $skip-chars-not-matching:loop/disp8
585 $skip-chars-not-matching:end:
586
587 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
588
589 5e/pop-to-esi
590 5b/pop-to-ebx
591 5a/pop-to-edx
592 59/pop-to-ecx
593 58/pop-to-eax
594
595 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
596 5d/pop-to-ebp
597 c3/return
598
599 test-skip-chars-not-matching:
600
601
602
603 68/push _test-stream/imm32
604
605 e8/call clear-stream/disp32
606
607 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
608
609
610 68/push "ab "/imm32
611 68/push _test-stream/imm32
612
613 e8/call write/disp32
614
615 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
616
617
618 68/push 0x20/imm32
619 68/push _test-stream/imm32
620
621 e8/call skip-chars-not-matching/disp32
622
623 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
624
625
626 68/push "F - test-skip-chars-not-matching"/imm32
627 68/push 2/imm32
628
629 b8/copy-to-eax _test-stream/imm32
630 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
631
632 e8/call check-ints-equal/disp32
633
634 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
635
636 c3/return
637
638 test-skip-chars-not-matching-none:
639
640
641
642 68/push _test-stream/imm32
643
644 e8/call clear-stream/disp32
645
646 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
647
648
649 68/push " ab"/imm32
650 68/push _test-stream/imm32
651
652 e8/call write/disp32
653
654 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
655
656
657 68/push 0x20/imm32
658 68/push _test-stream/imm32
659
660 e8/call skip-chars-not-matching/disp32
661
662 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
663
664
665 68/push "F - test-skip-chars-not-matching-none"/imm32
666 68/push 0/imm32
667
668 b8/copy-to-eax _test-stream/imm32
669 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
670
671 e8/call check-ints-equal/disp32
672
673 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
674
675 c3/return
676
677 test-skip-chars-not-matching-all:
678
679
680
681 68/push _test-stream/imm32
682
683 e8/call clear-stream/disp32
684
685 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
686
687
688 68/push "ab"/imm32
689 68/push _test-stream/imm32
690
691 e8/call write/disp32
692
693 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
694
695
696 68/push 0x20/imm32
697 68/push _test-stream/imm32
698
699 e8/call skip-chars-not-matching/disp32
700
701 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
702
703
704 68/push "F - test-skip-chars-not-matching-all"/imm32
705 68/push 2/imm32
706
707 b8/copy-to-eax _test-stream/imm32
708 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
709
710 e8/call check-ints-equal/disp32
711
712 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
713
714 c3/return
715
716 skip-chars-not-matching-whitespace:
717
718 55/push-ebp
719 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
720
721 50/push-eax
722 51/push-ecx
723 53/push-ebx
724 56/push-esi
725
726 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 .
727
728 8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
729
730 8b/copy 0/mod/indirect 6/rm32/esi . . . 3/r32/ebx . .
731 $skip-chars-not-matching-whitespace:loop:
732
733 39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . .
734 7d/jump-if-greater-or-equal $skip-chars-not-matching-whitespace:end/disp8
735
736 31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . .
737 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 .
738
739 3d/compare-eax-and 0x20/imm32/space
740 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
741
742 3d/compare-eax-and 0x0a/imm32/newline
743 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
744
745 3d/compare-eax-and 0x09/imm32/tab
746 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
747
748 3d/compare-eax-and 0x0d/imm32/cr
749 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
750
751 41/increment-ecx
752 eb/jump $skip-chars-not-matching-whitespace:loop/disp8
753 $skip-chars-not-matching-whitespace:end:
754
755 89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 .
756
757 5e/pop-to-esi
758 5b/pop-to-ebx
759 59/pop-to-ecx
760 58/pop-to-eax
761
762 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
763 5d/pop-to-ebp
764 c3/return
765
766 test-skip-chars-not-matching-whitespace:
767
768
769
770 68/push _test-stream/imm32
771
772 e8/call clear-stream/disp32
773
774 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
775
776
777 68/push "ab\n"/imm32
778 68/push _test-stream/imm32
779
780 e8/call write/disp32
781
782 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
783
784
785 68/push _test-stream/imm32
786
787 e8/call skip-chars-not-matching-whitespace/disp32
788
789 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32
790
791
792 68/push "F - test-skip-chars-not-matching-whitespace"/imm32
793 68/push 2/imm32
794
795 b8/copy-to-eax _test-stream/imm32
796 ff 6/subop/push 1/mod/*+disp8 0/rm32/eax . . . . 4/disp8 .
797
798 e8/call check-ints-equal/disp32
799
800 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
801
802 c3/return
803
804 skip-chars-matching-in-slice:
805
806 55/push-ebp
807 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
808
809 51/push-ecx
810 52/push-edx
811 53/push-ebx
812
813 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
814
815 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
816
817 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0x10/disp8 .
818
819 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
820 $skip-chars-matching-in-slice:loop:
821
822 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
823 73/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp8
824
825 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
826 39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . .
827 75/jump-if-not-equal $skip-chars-matching-in-slice:end/disp8
828
829 40/increment-eax
830 eb/jump $skip-chars-matching-in-slice:loop/disp8
831 $skip-chars-matching-in-slice:end:
832
833 5b/pop-to-ebx
834 5a/pop-to-edx
835 59/pop-to-ecx
836
837 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
838 5d/pop-to-ebp
839 c3/return
840
841 test-skip-chars-matching-in-slice:
842
843 b8/copy-to-eax " ab"/imm32
844 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
845 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
846 05/add-to-eax 4/imm32
847
848
849 68/push 0x20/imm32/space
850 51/push-ecx
851 50/push-eax
852
853 e8/call skip-chars-matching-in-slice/disp32
854
855 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
856
857
858 68/push "F - test-skip-chars-matching-in-slice"/imm32
859 68/push 2/imm32
860
861 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
862 51/push-ecx
863
864 e8/call check-ints-equal/disp32
865
866 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
867
868 c3/return
869
870 test-skip-chars-matching-in-slice-none:
871
872 b8/copy-to-eax "ab"/imm32
873 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
874 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
875 05/add-to-eax 4/imm32
876
877
878 68/push 0x20/imm32/space
879 51/push-ecx
880 50/push-eax
881
882 e8/call skip-chars-matching-in-slice/disp32
883
884 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
885
886
887 68/push "F - test-skip-chars-matching-in-slice-none"/imm32
888 68/push 2/imm32
889
890 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
891 51/push-ecx
892
893 e8/call check-ints-equal/disp32
894
895 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
896
897 c3/return
898
899 skip-chars-matching-whitespace-in-slice:
900
901 55/push-ebp
902 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
903
904 51/push-ecx
905 53/push-ebx
906
907 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
908
909 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
910
911 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
912 $skip-chars-matching-whitespace-in-slice:loop:
913
914 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
915 0f 83/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp32
916
917 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
918
919 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space
920 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
921
922 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline
923 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
924
925 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab
926 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
927
928 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr
929 75/jump-if-not-equal $skip-chars-matching-whitespace-in-slice:end/disp8
930 $skip-chars-matching-whitespace-in-slice:body:
931
932 40/increment-eax
933 eb/jump $skip-chars-matching-whitespace-in-slice:loop/disp8
934 $skip-chars-matching-whitespace-in-slice:end:
935
936 5b/pop-to-ebx
937 59/pop-to-ecx
938
939 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
940 5d/pop-to-ebp
941 c3/return
942
943 test-skip-chars-matching-whitespace-in-slice:
944
945 b8/copy-to-eax " \nab"/imm32
946 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
947 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
948 05/add-to-eax 4/imm32
949
950
951 51/push-ecx
952 50/push-eax
953
954 e8/call skip-chars-matching-whitespace-in-slice/disp32
955
956 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
957
958
959 68/push "F - test-skip-chars-matching-whitespace-in-slice"/imm32
960 68/push 2/imm32
961
962 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
963 51/push-ecx
964
965 e8/call check-ints-equal/disp32
966
967 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
968
969 c3/return
970
971
972 skip-chars-not-matching-in-slice:
973
974 55/push-ebp
975 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
976
977 51/push-ecx
978 52/push-edx
979 53/push-ebx
980
981 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
982
983 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
984
985 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0x10/disp8 .
986
987 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
988 $skip-chars-not-matching-in-slice:loop:
989
990 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
991 73/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp8
992
993 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
994 39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . .
995 74/jump-if-equal $skip-chars-not-matching-in-slice:end/disp8
996
997 40/increment-eax
998 eb/jump $skip-chars-not-matching-in-slice:loop/disp8
999 $skip-chars-not-matching-in-slice:end:
1000
1001 5b/pop-to-ebx
1002 5a/pop-to-edx
1003 59/pop-to-ecx
1004
1005 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1006 5d/pop-to-ebp
1007 c3/return
1008
1009 test-skip-chars-not-matching-in-slice:
1010
1011 b8/copy-to-eax "ab "/imm32
1012 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1013 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1014 05/add-to-eax 4/imm32
1015
1016
1017 68/push 0x20/imm32/space
1018 51/push-ecx
1019 50/push-eax
1020
1021 e8/call skip-chars-not-matching-in-slice/disp32
1022
1023 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1024
1025
1026 68/push "F - test-skip-chars-not-matching-in-slice"/imm32
1027 68/push 1/imm32
1028
1029 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1030 51/push-ecx
1031
1032 e8/call check-ints-equal/disp32
1033
1034 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1035
1036 c3/return
1037
1038 test-skip-chars-not-matching-in-slice-none:
1039
1040 b8/copy-to-eax " ab"/imm32
1041 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1042 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1043 05/add-to-eax 4/imm32
1044
1045
1046 68/push 0x20/imm32/space
1047 51/push-ecx
1048 50/push-eax
1049
1050 e8/call skip-chars-not-matching-in-slice/disp32
1051
1052 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1053
1054
1055 68/push "F - test-skip-chars-not-matching-in-slice-none"/imm32
1056 68/push 3/imm32
1057
1058 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1059 51/push-ecx
1060
1061 e8/call check-ints-equal/disp32
1062
1063 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1064
1065 c3/return
1066
1067 test-skip-chars-not-matching-in-slice-all:
1068
1069 b8/copy-to-eax "ab"/imm32
1070 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1071 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1072 05/add-to-eax 4/imm32
1073
1074
1075 68/push 0x20/imm32/space
1076 51/push-ecx
1077 50/push-eax
1078
1079 e8/call skip-chars-not-matching-in-slice/disp32
1080
1081 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1082
1083
1084 68/push "F - test-skip-chars-not-matching-in-slice-all"/imm32
1085 68/push 0/imm32
1086
1087 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1088 51/push-ecx
1089
1090 e8/call check-ints-equal/disp32
1091
1092 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1093
1094 c3/return
1095
1096 skip-chars-not-matching-whitespace-in-slice:
1097
1098 55/push-ebp
1099 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . .
1100
1101 51/push-ecx
1102 53/push-ebx
1103
1104 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 .
1105
1106 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0xc/disp8 .
1107
1108 31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . .
1109 $skip-chars-not-matching-whitespace-in-slice:loop:
1110
1111 39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . .
1112 0f 83/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp32
1113
1114 8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . .
1115
1116 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space
1117 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1118
1119 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline
1120 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1121
1122 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab
1123 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1124
1125 81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr
1126 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
1127
1128 40/increment-eax
1129 eb/jump $skip-chars-not-matching-whitespace-in-slice:loop/disp8
1130 $skip-chars-not-matching-whitespace-in-slice:end:
1131
1132 5b/pop-to-ebx
1133 59/pop-to-ecx
1134
1135 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . .
1136 5d/pop-to-ebp
1137 c3/return
1138
1139 test-skip-chars-not-matching-whitespace-in-slice:
1140
1141 b8/copy-to-eax "ab\n"/imm32
1142 8b/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . .
1143 8d/copy-address 1/mod/*+disp8 4/rm32/sib 0/base/eax 1/index/ecx . 1/r32/ecx 4/disp8 .
1144 05/add-to-eax 4/imm32
1145
1146
1147 51/push-ecx
1148 50/push-eax
1149
1150 e8/call skip-chars-not-matching-whitespace-in-slice/disp32
1151
1152 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32
1153
1154
1155 68/push "F - test-skip-chars-not-matching-whitespace-in-slice"/imm32
1156 68/push 1/imm32
1157
1158 29/subtract 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . .
1159 51/push-ecx
1160
1161 e8/call check-ints-equal/disp32
1162
1163 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32
1164
1165 c3/return
1166
1167