fork download
  1. (defmacro alet (form &body body) `(let ((it ,form)) ,@body))
  2. (defmacro aand (x &rest rest) `(alet ,x (and it ,@rest)))
  3.  
  4. (defun make-anton-solver (string &aux (arg (gensym)))
  5. `(lambda (,arg)
  6. (declare (simple-string ,arg)
  7. (optimize speed (safety 0)))
  8. (alet -1
  9. ,(reduce (lambda (x z)
  10. `(aand (position ,x ,arg :start (1+ it)) ,z))
  11. string :initial-value t :from-end t))))
  12.  
  13. (alet (make-anton-solver "anton")
  14. (format t "~(~s~)~%~%" it)
  15. (disassemble (compile nil it)))
Success #stdin #stdout 0.05s 37240KB
stdin
Standard input is empty
stdout
(lambda (#:g368)
  (declare (simple-string #:g368)
           (optimize speed (safety 0)))
  (alet -1
    (aand (position #\a #:g368 :start (1+ it))
          (aand (position #\n #:g368 :start (1+ it))
                (aand (position #\t #:g368 :start (1+ it))
                      (aand (position #\o #:g368 :start (1+ it))
                            (aand (position #\n #:g368 :start (1+ it)) t)))))))

; disassembly for (LAMBDA (#:G368) :IN "/home/SfG3fF/prog.fasl")
; Size: 819 bytes. Origin: #x52B344B9
; 4B9:       807EF1E5         CMP BYTE PTR [RSI-15], -27      ; no-arg-parsing entry point
; 4BD:       0F85D1020000     JNE L44
; 4C3:       488BD6           MOV RDX, RSI
; 4C6:       488B5EF9         MOV RBX, [RSI-7]
; 4CA:       31C0             XOR EAX, EAX
; 4CC:       EB14             JMP L1
; 4CE:       6690             NOP
; 4D0: L0:   8B4C4201         MOV ECX, [RDX+RAX*2+1]
; 4D4:       4883F961         CMP RCX, 97
; 4D8:       0F84AE020000     JEQ L43
; 4DE:       4883C002         ADD RAX, 2
; 4E2: L1:   4839D8           CMP RAX, RBX
; 4E5:       7CE9             JL L0
; 4E7:       B917001050       MOV ECX, #x50100017             ; NIL
; 4EC: L2:   4881F917001050   CMP RCX, #x50100017             ; NIL
; 4F3:       0F8425010000     JEQ L17
; 4F9:       4883C102         ADD RCX, 2
; 4FD:       807EF1E5         CMP BYTE PTR [RSI-15], -27
; 501:       0F852D020000     JNE L37
; 507:       488BD6           MOV RDX, RSI
; 50A:       488B5EF9         MOV RBX, [RSI-7]
; 50E:       488BC1           MOV RAX, RCX
; 511:       EB1F             JMP L4
; 513:       660F1F840000000000 NOP
; 51C:       0F1F4000         NOP
; 520: L3:   8B4C4201         MOV ECX, [RDX+RAX*2+1]
; 524:       4883F96E         CMP RCX, 110
; 528:       0F84FE010000     JEQ L36
; 52E:       4883C002         ADD RAX, 2
; 532: L4:   4839D8           CMP RAX, RBX
; 535:       7CE9             JL L3
; 537:       B917001050       MOV ECX, #x50100017             ; NIL
; 53C: L5:   4881F917001050   CMP RCX, #x50100017             ; NIL
; 543:       0F84D5000000     JEQ L17
; 549:       4883C102         ADD RCX, 2
; 54D:       807EF1E5         CMP BYTE PTR [RSI-15], -27
; 551:       0F857D010000     JNE L30
; 557:       488BD6           MOV RDX, RSI
; 55A:       488B5EF9         MOV RBX, [RSI-7]
; 55E:       488BC1           MOV RAX, RCX
; 561:       EB1F             JMP L7
; 563:       660F1F840000000000 NOP
; 56C:       0F1F4000         NOP
; 570: L6:   8B4C4201         MOV ECX, [RDX+RAX*2+1]
; 574:       4883F974         CMP RCX, 116
; 578:       0F844E010000     JEQ L29
; 57E:       4883C002         ADD RAX, 2
; 582: L7:   4839D8           CMP RAX, RBX
; 585:       7CE9             JL L6
; 587:       B917001050       MOV ECX, #x50100017             ; NIL
; 58C: L8:   4881F917001050   CMP RCX, #x50100017             ; NIL
; 593:       0F8485000000     JEQ L17
; 599:       4883C102         ADD RCX, 2
; 59D:       807EF1E5         CMP BYTE PTR [RSI-15], -27
; 5A1:       0F85CD000000     JNE L23
; 5A7:       488BD6           MOV RDX, RSI
; 5AA:       488B5EF9         MOV RBX, [RSI-7]
; 5AE:       488BC1           MOV RAX, RCX
; 5B1:       EB1F             JMP L10
; 5B3:       660F1F840000000000 NOP
; 5BC:       0F1F4000         NOP
; 5C0: L9:   8B4C4201         MOV ECX, [RDX+RAX*2+1]
; 5C4:       4883F96F         CMP RCX, 111
; 5C8:       0F849E000000     JEQ L22
; 5CE:       4883C002         ADD RAX, 2
; 5D2: L10:  4839D8           CMP RAX, RBX
; 5D5:       7CE9             JL L9
; 5D7:       B917001050       MOV ECX, #x50100017             ; NIL
; 5DC: L11:  4881F917001050   CMP RCX, #x50100017             ; NIL
; 5E3:       7439             JEQ L17
; 5E5:       4883C102         ADD RCX, 2
; 5E9:       807EF1E5         CMP BYTE PTR [RSI-15], -27
; 5ED:       7536             JNE L18
; 5EF:       488BD6           MOV RDX, RSI
; 5F2:       488B5EF9         MOV RBX, [RSI-7]
; 5F6:       488BC1           MOV RAX, RCX
; 5F9:       EB1E             JMP L16
; 5FB:       0F1F440000       NOP
; 600: L12:  8B4C4201         MOV ECX, [RDX+RAX*2+1]
; 604:       4883F96E         CMP RCX, 110
; 608:       750B             JNE L15
; 60A: L13:  BA4F001050       MOV EDX, #x5010004F             ; T
; 60F: L14:  488BE5           MOV RSP, RBP
; 612:       F8               CLC
; 613:       5D               POP RBP
; 614:       C3               RET
; 615: L15:  4883C002         ADD RAX, 2
; 619: L16:  4839D8           CMP RAX, RBX
; 61C:       7CE2             JL L12
; 61E: L17:  BA17001050       MOV EDX, #x50100017             ; NIL
; 623:       EBEA             JMP L14
; 625: L18:  807EF1E1         CMP BYTE PTR [RSI-15], -31
; 629:       740C             JEQ L19
; 62B:       488B46F9         MOV RAX, [RSI-7]
; 62F:       4839C1           CMP RCX, RAX
; 632:       7DEA             JNL L17
; 634:       CC20             BREAK 32                        ; NIL-ARRAY-ACCESSED-ERROR
; 636:       18               BYTE #X18                       ; RSI
; 637: L19:  488BD6           MOV RDX, RSI
; 63A:       488B5EF9         MOV RBX, [RSI-7]
; 63E:       488BC1           MOV RAX, RCX
; 641:       EB22             JMP L21
; 643:       660F1F840000000000 NOP
; 64C:       0F1F4000         NOP
; 650: L20:  488BC8           MOV RCX, RAX
; 653:       48D1F9           SAR RCX, 1
; 656:       0FB64C0A01       MOVZX ECX, BYTE PTR [RDX+RCX+1]
; 65B:       4883F96E         CMP RCX, 110
; 65F:       74A9             JEQ L13
; 661:       4883C002         ADD RAX, 2
; 665: L21:  4839D8           CMP RAX, RBX
; 668:       7CE6             JL L20
; 66A:       EBB2             JMP L17
; 66C: L22:  488BC8           MOV RCX, RAX
; 66F:       E968FFFFFF       JMP L11
; 674: L23:  807EF1E1         CMP BYTE PTR [RSI-15], -31
; 678:       7416             JEQ L25
; 67A:       488B46F9         MOV RAX, [RSI-7]
; 67E:       4839C1           CMP RCX, RAX
; 681:       7C0A             JL L24
; 683:       B917001050       MOV ECX, #x50100017             ; NIL
; 688:       E94FFFFFFF       JMP L11
; 68D: L24:  CC20             BREAK 32                        ; NIL-ARRAY-ACCESSED-ERROR
; 68F:       18               BYTE #X18                       ; RSI
; 690: L25:  488BD6           MOV RDX, RSI
; 693:       488B5EF9         MOV RBX, [RSI-7]
; 697:       488BC1           MOV RAX, RCX
; 69A:       EB19             JMP L27
; 69C:       0F1F4000         NOP
; 6A0: L26:  488BC8           MOV RCX, RAX
; 6A3:       48D1F9           SAR RCX, 1
; 6A6:       0FB64C0A01       MOVZX ECX, BYTE PTR [RDX+RCX+1]
; 6AB:       4883F96F         CMP RCX, 111
; 6AF:       7413             JEQ L28
; 6B1:       4883C002         ADD RAX, 2
; 6B5: L27:  4839D8           CMP RAX, RBX
; 6B8:       7CE6             JL L26
; 6BA:       B917001050       MOV ECX, #x50100017             ; NIL
; 6BF:       E918FFFFFF       JMP L11
; 6C4: L28:  488BC8           MOV RCX, RAX
; 6C7:       E910FFFFFF       JMP L11
; 6CC: L29:  488BC8           MOV RCX, RAX
; 6CF:       E9B8FEFFFF       JMP L8
; 6D4: L30:  807EF1E1         CMP BYTE PTR [RSI-15], -31
; 6D8:       7416             JEQ L32
; 6DA:       488B46F9         MOV RAX, [RSI-7]
; 6DE:       4839C1           CMP RCX, RAX
; 6E1:       7C0A             JL L31
; 6E3:       B917001050       MOV ECX, #x50100017             ; NIL
; 6E8:       E99FFEFFFF       JMP L8
; 6ED: L31:  CC20             BREAK 32                        ; NIL-ARRAY-ACCESSED-ERROR
; 6EF:       18               BYTE #X18                       ; RSI
; 6F0: L32:  488BD6           MOV RDX, RSI
; 6F3:       488B5EF9         MOV RBX, [RSI-7]
; 6F7:       488BC1           MOV RAX, RCX
; 6FA:       EB19             JMP L34
; 6FC:       0F1F4000         NOP
; 700: L33:  488BC8           MOV RCX, RAX
; 703:       48D1F9           SAR RCX, 1
; 706:       0FB64C0A01       MOVZX ECX, BYTE PTR [RDX+RCX+1]
; 70B:       4883F974         CMP RCX, 116
; 70F:       7413             JEQ L35
; 711:       4883C002         ADD RAX, 2
; 715: L34:  4839D8           CMP RAX, RBX
; 718:       7CE6             JL L33
; 71A:       B917001050       MOV ECX, #x50100017             ; NIL
; 71F:       E968FEFFFF       JMP L8
; 724: L35:  488BC8           MOV RCX, RAX
; 727:       E960FEFFFF       JMP L8
; 72C: L36:  488BC8           MOV RCX, RAX
; 72F:       E908FEFFFF       JMP L5
; 734: L37:  807EF1E1         CMP BYTE PTR [RSI-15], -31
; 738:       7416             JEQ L39
; 73A:       488B46F9         MOV RAX, [RSI-7]
; 73E:       4839C1           CMP RCX, RAX
; 741:       7C0A             JL L38
; 743:       B917001050       MOV ECX, #x50100017             ; NIL
; 748:       E9EFFDFFFF       JMP L5
; 74D: L38:  CC20             BREAK 32                        ; NIL-ARRAY-ACCESSED-ERROR
; 74F:       18               BYTE #X18                       ; RSI
; 750: L39:  488BD6           MOV RDX, RSI
; 753:       488B5EF9         MOV RBX, [RSI-7]
; 757:       488BC1           MOV RAX, RCX
; 75A:       EB19             JMP L41
; 75C:       0F1F4000         NOP
; 760: L40:  488BC8           MOV RCX, RAX
; 763:       48D1F9           SAR RCX, 1
; 766:       0FB64C0A01       MOVZX ECX, BYTE PTR [RDX+RCX+1]
; 76B:       4883F96E         CMP RCX, 110
; 76F:       7413             JEQ L42
; 771:       4883C002         ADD RAX, 2
; 775: L41:  4839D8           CMP RAX, RBX
; 778:       7CE6             JL L40
; 77A:       B917001050       MOV ECX, #x50100017             ; NIL
; 77F:       E9B8FDFFFF       JMP L5
; 784: L42:  488BC8           MOV RCX, RAX
; 787:       E9B0FDFFFF       JMP L5
; 78C: L43:  488BC8           MOV RCX, RAX
; 78F:       E958FDFFFF       JMP L2
; 794: L44:  807EF1E1         CMP BYTE PTR [RSI-15], -31
; 798:       7416             JEQ L46
; 79A:       488B46F9         MOV RAX, [RSI-7]
; 79E:       4885C0           TEST RAX, RAX
; 7A1:       7F0A             JNLE L45
; 7A3:       B917001050       MOV ECX, #x50100017             ; NIL
; 7A8:       E93FFDFFFF       JMP L2
; 7AD: L45:  CC20             BREAK 32                        ; NIL-ARRAY-ACCESSED-ERROR
; 7AF:       18               BYTE #X18                       ; RSI
; 7B0: L46:  488BD6           MOV RDX, RSI
; 7B3:       488B5EF9         MOV RBX, [RSI-7]
; 7B7:       31C0             XOR EAX, EAX
; 7B9:       EB1A             JMP L48
; 7BB:       0F1F440000       NOP
; 7C0: L47:  488BC8           MOV RCX, RAX
; 7C3:       48D1F9           SAR RCX, 1
; 7C6:       0FB64C0A01       MOVZX ECX, BYTE PTR [RDX+RCX+1]
; 7CB:       4883F961         CMP RCX, 97
; 7CF:       7413             JEQ L49
; 7D1:       4883C002         ADD RAX, 2
; 7D5: L48:  4839D8           CMP RAX, RBX
; 7D8:       7CE6             JL L47
; 7DA:       B917001050       MOV ECX, #x50100017             ; NIL
; 7DF:       E908FDFFFF       JMP L2
; 7E4: L49:  488BC8           MOV RCX, RAX
; 7E7:       E900FDFFFF       JMP L2