Guest User

Untitled

a guest
May 26th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.39 KB | None | 0 0
  1. (PROCLAIM '(OPTIMIZE (SPEED 3) (SAFETY 0) (DEBUG 0)))
  2.  
  3. (DEFUN FACT1 (X)
  4. "factorial, using DO"
  5. (DECLARE (FIXNUM X))
  6. (DO ((FACT-N 1 (THE FIXNUM (* FACT-N N)))
  7. (N 1 (1+ N)))
  8. ((> N X) FACT-N)
  9. (DECLARE (FIXNUM FACT-N N))))
  10.  
  11. ; disassembly for FACT1
  12. ; 0B2DB0CA: B904000000 MOV ECX, 4 ; no-arg-parsing entry point
  13. ; CF: B804000000 MOV EAX, 4
  14. ; D4: EB0D JMP L1
  15. ; D6: L0: C1F902 SAR ECX, 2
  16. ; D9: 0FAFC8 IMUL ECX, EAX
  17. ; DC: C1F802 SAR EAX, 2
  18. ; DF: 40 INC EAX
  19. ; E0: C1E002 SHL EAX, 2
  20. ; E3: L1: 39D0 CMP EAX, EDX
  21. ; E5: 7EEF JLE L0
  22. ; E7: 8BD1 MOV EDX, ECX
  23. ; E9: 8D65F8 LEA ESP, [EBP-8]
  24. ; EC: F8 CLC
  25. ; ED: 8B6DFC MOV EBP, [EBP-4]
  26. ; F0: C20400 RET 4
  27.  
  28.  
  29. (DEFUN FACT2 (X)
  30. "factorial, using LOOP"
  31. (DECLARE (FIXNUM X))
  32. (LOOP
  33. :FOR N :OF-TYPE FIXNUM :FROM 1 :TO X
  34. :AND FACT-N :OF-TYPE FIXNUM := 1 :THEN (* FACT-N N)
  35. :FINALLY (RETURN FACT-N)))
  36.  
  37. ; disassembly for FACT2
  38. ; 0B6A658A: B804000000 MOV EAX, 4 ; no-arg-parsing entry point
  39. ; 8F: 31C9 XOR ECX, ECX
  40. ; 91: B904000000 MOV ECX, 4
  41. ; 96: EB13 JMP L1
  42. ; 98: L0: 8BD8 MOV EBX, EAX
  43. ; 9A: C1FB02 SAR EBX, 2
  44. ; 9D: 43 INC EBX
  45. ; 9E: C1F902 SAR ECX, 2
  46. ; A1: 0FAFC8 IMUL ECX, EAX
  47. ; A4: 8D049D00000000 LEA EAX, [EBX*4]
  48. ; AB: L1: 39D0 CMP EAX, EDX
  49. ; AD: 7EE9 JLE L0
  50. ; AF: 8BD1 MOV EDX, ECX
  51. ; B1: 8D65F8 LEA ESP, [EBP-8]
  52. ; B4: F8 CLC
  53. ; B5: 8B6DFC MOV EBP, [EBP-4]
  54. ; B8: C20400 RET 4
  55.  
  56. (DEFUN FACT3 (X)
  57. (DECLARE (FIXNUM X))
  58. (THE FIXNUM
  59. (IF (= X 1)
  60. 1
  61. (* X (FACT3 (- X 1))))))
  62.  
  63. ; disassembly for FACT3
  64. ; 0B0FAD55: L0: 83F904 CMP ECX, 4 ; no-arg-parsing entry point
  65. ; 58: 750E JNE L2
  66. ; 5A: B804000000 MOV EAX, 4
  67. ; 5F: L1: 8D65F8 LEA ESP, [EBP-8]
  68. ; 62: 8B6DFC MOV EBP, [EBP-4]
  69. ; 65: C20400 RET 4
  70. ; 68: L2: 894DF4 MOV [EBP-12], ECX
  71. ; 6B: 8BC1 MOV EAX, ECX
  72. ; 6D: 83E804 SUB EAX, 4
  73. ; 70: 8BD0 MOV EDX, EAX
  74. ; 72: 8BDD MOV EBX, EBP
  75. ; 74: 8BC4 MOV EAX, ESP
  76. ; 76: 83EC20 SUB ESP, 32
  77. ; 79: 8BCA MOV ECX, EDX
  78. ; 7B: 8958FC MOV [EAX-4], EBX
  79. ; 7E: 8BE8 MOV EBP, EAX
  80. ; 80: C745F889AD0F0B MOV DWORD PTR [EBP-8], 185576841
  81. ; 87: EBCC JMP L0
  82. ; 89: 8B4DF4 MOV ECX, [EBP-12]
  83. ; 8C: C1F902 SAR ECX, 2
  84. ; 8F: 0FAFC8 IMUL ECX, EAX
  85. ; 92: 8BC1 MOV EAX, ECX
  86. ; 94: EBC9 JMP L1
  87.  
  88. (DEFUN FACT4 (X)
  89. (DECLARE (FIXNUM X))
  90. (LABELS ((FACT4-SUB (N FACT-N)
  91. (DECLARE (FIXNUM N FACT-N))
  92. (IF (= N 1)
  93. FACT-N
  94. (FACT4-SUB (1- N) (THE FIXNUM (* FACT-N N))))))
  95. (FACT4-SUB X 1)))
  96.  
  97. ; disassembly for FACT4
  98. ; 0B472274: B904000000 MOV ECX, 4 ; no-arg-parsing entry point
  99. ; 79: EB24 JMP L2
  100. ; 7B: L0: 83F804 CMP EAX, 4
  101. ; 7E: 750C JNE L1
  102. ; 80: 8BD1 MOV EDX, ECX
  103. ; 82: 8D65F8 LEA ESP, [EBP-8]
  104. ; 85: F8 CLC
  105. ; 86: 8B6DFC MOV EBP, [EBP-4]
  106. ; 89: C20400 RET 4
  107. ; 8C: L1: 8BD0 MOV EDX, EAX
  108. ; 8E: C1FA02 SAR EDX, 2
  109. ; 91: 83EA01 SUB EDX, 1
  110. ; 94: C1F902 SAR ECX, 2
  111. ; 97: 0FAFC8 IMUL ECX, EAX
  112. ; 9A: 8BC2 MOV EAX, EDX
  113. ; 9C: C1E002 SHL EAX, 2
  114. ; 9F: L2: EBDA JMP L0
Add Comment
Please, Sign In to add comment