2020-07-29 21:40:32 |
Stas Boukarev |
description |
cl:disassemble on SBCL generally comments out each of its lines of output with a single semi-colon as in:
* (defun foo ())
FOO
* (disassemble #'foo)
; disassembly for FOO
; Size: 28 bytes. Origin: #x10026B0073 ; FOO
; 73: 498B4510 MOV RAX, [R13+16] ; thread.binding-stack-pointer
; 77: 488945F8 MOV [RBP-8], RAX
; 7B: 840425F8FF1020 TEST AL, [#x2010FFF8] ; safepoint
; 82: BA17001120 MOV EDX, #x20110017 ; NIL
; 87: 488BE5 MOV RSP, RBP
; 8A: F8 CLC
; 8B: 5D POP RBP
; 8C: C3 RET
; 8D: CC10 INT3 16 ; Invalid argument count trap
NIL
However, it seems to behave differently for generic functions:
* (defgeneric bar ())
#<STANDARD-GENERIC-FUNCTION COMMON-LISP-USER::BAR (0)>
* (disassemble #'bar)
; disassembly for BAR
; Size: 70 bytes. Origin: #x10000EB857 ; (LAMBDA
(
&REST
SB-PCL::ARGS)
:IN
SB-PCL::MAKE-INITIAL-DFUN)
; 57: 840425F8FF1020 TEST AL, [#x2010FFF8] ; safepoint
; 5E: 498BFE MOV RDI, R14
; 61: 488B0550FCFFFF MOV RAX, [RIP-944] ; #<SB-KERNEL:FDEFN SB-PCL::INITIAL-DFUN>
; 68: B904000000 MOV ECX, 4
; 6D: FF7508 PUSH QWORD PTR [RBP+8]
; 70: FF6009 JMP QWORD PTR [RAX+9]
; 73: CC10 INT3 16 ; Invalid argument count trap
; 75: 6A20 PUSH 32
; 77: FF142530000020 CALL QWORD PTR [#x20000030] ; ALLOC-TRAMP-R11
; 7E: E996FCFFFF JMP #x10000EB519
; 83: CC1C INT3 28 ; UNBOUND-SYMBOL-ERROR
; 85: 30 BYTE #X30 ; R12
; 86: CC25 INT3 37 ; INVALID-ARRAY-INDEX-ERROR
; 88: 30 BYTE #X30 ; R12
; 89: 39 BYTE #X39 ; R14
; 8A: AA808010 BYTE #XAA, #X80, #X80, #X10 ; 10
; 8E: 4D2B6568 SUB R12, [R13+104] ; thread.alloc-region
; 92: 4154 PUSH R12
; 94: FF142530000020 CALL QWORD PTR [#x20000030] ; ALLOC-TRAMP-R11
; 9B: EB83 JMP #x10000EB820
NIL
Presumably this is not intentional |
(let ((*print-right-margin* 30))
(disassemble (lambda (&rest args) args)))
; disassembly for (LAMBDA
(
&REST
ARGS))
; Size: 29 bytes. Origin: #x228ED9B5 ; (LAMBDA
(
&REST
ARGS))
; B5: 498B4510 MOV RAX, [R13+16] ; thread.binding-stack-pointer
; B9: 488945E8 MOV [RBP-24], RAX
; BD: 488BE5 MOV RSP, RBP
; C0: F8 CLC
; C1: 5D POP RBP
; C2: C3 RET
; C3: CC10 INT3 16 ; Invalid argument count trap
; C5: 4C29DF SUB RDI, R11
; C8: 57 PUSH RDI
; C9: FF14255000A021 CALL QWORD PTR [#x21A00050] ; CONS->R11
; D0: EBB1 JMP #x228ED983 ; #<FUNCTION (LAMBDA
; ( ..))>
No ; for each line |
|