Note to self:
Just converting the ((LAMBDA ...) ...) to (FUNCALL (LAMBDA ...) ...) is not good -- at least not until the following is fixed:
; GOOD (disassemble (compile nil `(lambda (x y) (declare (single-float x y)) (+ x ((lambda (z) z) y)))))
; disassembly for (LAMBDA (X Y)) ; 0485DF02: 0F28D9 MOVAPS XMM3, XMM1 ; no-arg-parsing entry point ; 05: F30F58DA ADDSS XMM3, XMM2 ; 09: 66480F7EDA MOVD RDX, XMM3 ; 0E: 48C1E220 SHL RDX, 32 ; 12: 4883CA1A OR RDX, 26 ; 16: 488BE5 MOV RSP, RBP ; 19: F8 CLC ; 1A: 5D POP RBP ; 1B: C3 RET
;; BAD (disassemble (compile nil `(lambda (x y) (declare (single-float x y)) (+ x (funcall (lambda (z) z) y)))))
; disassembly for (LAMBDA (X Y)) ; 048E1BF8: 488D5C24F0 LEA RBX, [RSP-16] ; no-arg-parsing entry point ; BFD: 4883EC18 SUB RSP, 24 ; C01: 488B55F0 MOV RDX, [RBP-16] ; C05: 488B0584FFFFFF MOV RAX, [RIP-124] ; #<FUNCTION (LAMBDA ; #) ..> ; C0C: B908000000 MOV ECX, 8 ; C11: 48892B MOV [RBX], RBP ; C14: 488BEB MOV RBP, RBX ; C17: FF50FF CALL QWORD PTR [RAX-1] ; C1A: 480F42E3 CMOVB RSP, RBX ; C1E: 488BFA MOV RDI, RDX ; C21: 488B55F8 MOV RDX, [RBP-8] ; C25: 4C8D1C25E0010020 LEA R11, [#x200001E0] ; GENERIC-+ ; C2D: 41FFD3 CALL R11 ; C30: 480F42E3 CMOVB RSP, RBX ; C34: 488BE5 MOV RSP, RBP ; C37: F8 CLC ; C38: 5D POP RBP ; C39: C3 RET
Note to self:
Just converting the ((LAMBDA ...) ...) to (FUNCALL (LAMBDA ...) ...) is not good -- at least not until the following is fixed:
; GOOD
(disassemble
(compile nil
`(lambda (x y)
(declare (single-float x y))
(+ x ((lambda (z) z) y)))))
; disassembly for (LAMBDA (X Y))
; 0485DF02: 0F28D9 MOVAPS XMM3, XMM1 ; no-arg-parsing entry point
; 05: F30F58DA ADDSS XMM3, XMM2
; 09: 66480F7EDA MOVD RDX, XMM3
; 0E: 48C1E220 SHL RDX, 32
; 12: 4883CA1A OR RDX, 26
; 16: 488BE5 MOV RSP, RBP
; 19: F8 CLC
; 1A: 5D POP RBP
; 1B: C3 RET
;; BAD
(disassemble
(compile nil
`(lambda (x y)
(declare (single-float x y))
(+ x (funcall (lambda (z) z) y)))))
; disassembly for (LAMBDA (X Y))
; #) ..>
; 048E1BF8: 488D5C24F0 LEA RBX, [RSP-16] ; no-arg-parsing entry point
; BFD: 4883EC18 SUB RSP, 24
; C01: 488B55F0 MOV RDX, [RBP-16]
; C05: 488B0584FFFFFF MOV RAX, [RIP-124] ; #<FUNCTION (LAMBDA
; C0C: B908000000 MOV ECX, 8
; C11: 48892B MOV [RBX], RBP
; C14: 488BEB MOV RBP, RBX
; C17: FF50FF CALL QWORD PTR [RAX-1]
; C1A: 480F42E3 CMOVB RSP, RBX
; C1E: 488BFA MOV RDI, RDX
; C21: 488B55F8 MOV RDX, [RBP-8]
; C25: 4C8D1C25E0010020 LEA R11, [#x200001E0] ; GENERIC-+
; C2D: 41FFD3 CALL R11
; C30: 480F42E3 CMOVB RSP, RBX
; C34: 488BE5 MOV RSP, RBP
; C37: F8 CLC
; C38: 5D POP RBP
; C39: C3 RET