DISASSEMBLE shows no differences in assembly for different functions
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
SBCL |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
SBCL 2.1.11 on Linux amd64.
(define-
(defmacro with-compile-
(cond ((not (null branches))
(let ((true-branches (macroexpand-1 '%true-branches% env)))
`(if ,branch
(t `(progn ,@body))))
(defmacro compile-time-if (branch then &optional else &environment env)
(if (member branch (macroexpand-1 '%true-branches% env))
then
(or else `(progn))))
(sb-ext:
(sb-ext:
(sb-ext:
(defun make-adder (x &key huge-p enormous-p)
(with-
(lambda (y) (+ x y
CL-USER> (disassemble (make-adder 10))
; disassembly for (LAMBDA (Y) :IN MAKE-ADDER)
; Size: 28 bytes. Origin: #x5370C788 ; (LAMBDA (Y)
; 88: 488BD1 MOV RDX, RCX
; 8B: E8A0432FFF CALL #x52A00B30 ; GENERIC-+
; 90: 31FF XOR EDI, EDI
; 92: E899432FFF CALL #x52A00B30 ; GENERIC-+
; 97: 31FF XOR EDI, EDI
; 99: E892432FFF CALL #x52A00B30 ; GENERIC-+
; 9E: 488BE5 MOV RSP, RBP
; A1: F8 CLC
; A2: 5D POP RBP
; A3: C3 RET
NIL
CL-USER> (disassemble (make-adder 10 :huge-p t))
; disassembly for (LAMBDA (Y) :IN MAKE-ADDER)
; Size: 28 bytes. Origin: #x5370C788 ; (LAMBDA (Y)
; 88: 488BD1 MOV RDX, RCX
; 8B: E8A0432FFF CALL #x52A00B30 ; GENERIC-+
; 90: 31FF XOR EDI, EDI
; 92: E899432FFF CALL #x52A00B30 ; GENERIC-+
; 97: 31FF XOR EDI, EDI
; 99: E892432FFF CALL #x52A00B30 ; GENERIC-+
; 9E: 488BE5 MOV RSP, RBP
; A1: F8 CLC
; A2: 5D POP RBP
; A3: C3 RET
NIL
(make-adder 10 :huge-p t) and (make-adder 10) return functions that behave differently, and yet the demonstrated assembly is the same and completely omits the PRINT call of one of the functions.
Changed in sbcl: | |
status: | New → Fix Committed |
assignee: | Stas Boukarev (stassats) → nobody |
Changed in sbcl: | |
status: | Fix Committed → Fix Released |
Smaller test case:
(defun make-adder (x &key huge-p)
(if huge-p
(lambda (y) (+ x y (print 1000)))
(lambda (y) (+ x y 0))))
CL-USER> (disassemble (make-adder 10))
:IN
MAKE- ADDER)
; disassembly for (LAMBDA (Y) :IN MAKE-ADDER)
; Size: 21 bytes. Origin: #x5370CB78 ; (LAMBDA (Y)
; 78: 488BD1 MOV RDX, RCX
; 7B: E8B03F2FFF CALL #x52A00B30 ; GENERIC-+
; 80: 31FF XOR EDI, EDI
; 82: E8A93F2FFF CALL #x52A00B30 ; GENERIC-+
; 87: 488BE5 MOV RSP, RBP
; 8A: F8 CLC
; 8B: 5D POP RBP
; 8C: C3 RET
NIL
CL-USER> (disassemble (make-adder 10 :huge-p t))
:IN
MAKE- ADDER)
; disassembly for (LAMBDA (Y) :IN MAKE-ADDER)
; Size: 21 bytes. Origin: #x5370CB78 ; (LAMBDA (Y)
; 78: 488BD1 MOV RDX, RCX
; 7B: E8B03F2FFF CALL #x52A00B30 ; GENERIC-+
; 80: 31FF XOR EDI, EDI
; 82: E8A93F2FFF CALL #x52A00B30 ; GENERIC-+
; 87: 488BE5 MOV RSP, RBP
; 8A: F8 CLC
; 8B: 5D POP RBP
; 8C: C3 RET
NIL