Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (PROCLAIM '(OPTIMIZE (SPEED 3) (SAFETY 0) (DEBUG 0)))
- (DEFUN FACT1 (X)
- "factorial, using DO"
- (DECLARE (FIXNUM X))
- (DO ((FACT-N 1 (THE FIXNUM (* FACT-N N)))
- (N 1 (1+ N)))
- ((> N X) FACT-N)
- (DECLARE (FIXNUM FACT-N N))))
- ; disassembly for FACT1
- ; 0B2DB0CA: B904000000 MOV ECX, 4 ; no-arg-parsing entry point
- ; CF: B804000000 MOV EAX, 4
- ; D4: EB0D JMP L1
- ; D6: L0: C1F902 SAR ECX, 2
- ; D9: 0FAFC8 IMUL ECX, EAX
- ; DC: C1F802 SAR EAX, 2
- ; DF: 40 INC EAX
- ; E0: C1E002 SHL EAX, 2
- ; E3: L1: 39D0 CMP EAX, EDX
- ; E5: 7EEF JLE L0
- ; E7: 8BD1 MOV EDX, ECX
- ; E9: 8D65F8 LEA ESP, [EBP-8]
- ; EC: F8 CLC
- ; ED: 8B6DFC MOV EBP, [EBP-4]
- ; F0: C20400 RET 4
- (DEFUN FACT2 (X)
- "factorial, using LOOP"
- (DECLARE (FIXNUM X))
- (LOOP
- :FOR N :OF-TYPE FIXNUM :FROM 1 :TO X
- :AND FACT-N :OF-TYPE FIXNUM := 1 :THEN (* FACT-N N)
- :FINALLY (RETURN FACT-N)))
- ; disassembly for FACT2
- ; 0B6A658A: B804000000 MOV EAX, 4 ; no-arg-parsing entry point
- ; 8F: 31C9 XOR ECX, ECX
- ; 91: B904000000 MOV ECX, 4
- ; 96: EB13 JMP L1
- ; 98: L0: 8BD8 MOV EBX, EAX
- ; 9A: C1FB02 SAR EBX, 2
- ; 9D: 43 INC EBX
- ; 9E: C1F902 SAR ECX, 2
- ; A1: 0FAFC8 IMUL ECX, EAX
- ; A4: 8D049D00000000 LEA EAX, [EBX*4]
- ; AB: L1: 39D0 CMP EAX, EDX
- ; AD: 7EE9 JLE L0
- ; AF: 8BD1 MOV EDX, ECX
- ; B1: 8D65F8 LEA ESP, [EBP-8]
- ; B4: F8 CLC
- ; B5: 8B6DFC MOV EBP, [EBP-4]
- ; B8: C20400 RET 4
- (DEFUN FACT3 (X)
- (DECLARE (FIXNUM X))
- (THE FIXNUM
- (IF (= X 1)
- 1
- (* X (FACT3 (- X 1))))))
- ; disassembly for FACT3
- ; 0B0FAD55: L0: 83F904 CMP ECX, 4 ; no-arg-parsing entry point
- ; 58: 750E JNE L2
- ; 5A: B804000000 MOV EAX, 4
- ; 5F: L1: 8D65F8 LEA ESP, [EBP-8]
- ; 62: 8B6DFC MOV EBP, [EBP-4]
- ; 65: C20400 RET 4
- ; 68: L2: 894DF4 MOV [EBP-12], ECX
- ; 6B: 8BC1 MOV EAX, ECX
- ; 6D: 83E804 SUB EAX, 4
- ; 70: 8BD0 MOV EDX, EAX
- ; 72: 8BDD MOV EBX, EBP
- ; 74: 8BC4 MOV EAX, ESP
- ; 76: 83EC20 SUB ESP, 32
- ; 79: 8BCA MOV ECX, EDX
- ; 7B: 8958FC MOV [EAX-4], EBX
- ; 7E: 8BE8 MOV EBP, EAX
- ; 80: C745F889AD0F0B MOV DWORD PTR [EBP-8], 185576841
- ; 87: EBCC JMP L0
- ; 89: 8B4DF4 MOV ECX, [EBP-12]
- ; 8C: C1F902 SAR ECX, 2
- ; 8F: 0FAFC8 IMUL ECX, EAX
- ; 92: 8BC1 MOV EAX, ECX
- ; 94: EBC9 JMP L1
- (DEFUN FACT4 (X)
- (DECLARE (FIXNUM X))
- (LABELS ((FACT4-SUB (N FACT-N)
- (DECLARE (FIXNUM N FACT-N))
- (IF (= N 1)
- FACT-N
- (FACT4-SUB (1- N) (THE FIXNUM (* FACT-N N))))))
- (FACT4-SUB X 1)))
- ; disassembly for FACT4
- ; 0B472274: B904000000 MOV ECX, 4 ; no-arg-parsing entry point
- ; 79: EB24 JMP L2
- ; 7B: L0: 83F804 CMP EAX, 4
- ; 7E: 750C JNE L1
- ; 80: 8BD1 MOV EDX, ECX
- ; 82: 8D65F8 LEA ESP, [EBP-8]
- ; 85: F8 CLC
- ; 86: 8B6DFC MOV EBP, [EBP-4]
- ; 89: C20400 RET 4
- ; 8C: L1: 8BD0 MOV EDX, EAX
- ; 8E: C1FA02 SAR EDX, 2
- ; 91: 83EA01 SUB EDX, 1
- ; 94: C1F902 SAR ECX, 2
- ; 97: 0FAFC8 IMUL ECX, EAX
- ; 9A: 8BC2 MOV EAX, EDX
- ; 9C: C1E002 SHL EAX, 2
- ; 9F: L2: EBDA JMP L0
Add Comment
Please, Sign In to add comment