* enchancement: disassemble now annotates some previously missing static
functions, like LENGTH.
* optimization: calls to static functions on x86-64 use less instructions.
- * optimization: compute encode-universal-time at compile time when possible.
+ * optimization: compute encode-universal-time at compile time when possible.
+ * optimization: when referencing internal functions as #'x, don't go through
+ an indirect fdefn structure.
changes in sbcl-1.1.8 relative to sbcl-1.1.7:
* notice: The implementation of MAP-ALLOCATED-OBJECTS (the heart of
(define-fop (fop-fdefinition 60)
(fdefinition-object (pop-stack) t))
+(define-fop (fop-known-fun 65)
+ (%coerce-name-to-fun (pop-stack)))
+
(define-fop (fop-sanctify-for-execution 61)
(let ((component (pop-stack)))
(sb!vm:sanctify-for-execution component)
(dump-push (cdr entry) fasl-output))
(:fdefinition
(dump-object (cdr entry) fasl-output)
- (dump-fop 'fop-fdefinition fasl-output))))
+ (dump-fop 'fop-fdefinition fasl-output))
+ (:known-fun
+ (dump-object (cdr entry) fasl-output)
+ (dump-fop 'fop-known-fun fasl-output))))
(null
(dump-fop 'fop-misc-trap fasl-output)))))
(reference-core-fun code-obj index (cdr const) object))
(:fdefinition
(setf (code-header-ref code-obj index)
- (fdefinition-object (cdr const) t))))))))))
+ (fdefinition-object (cdr const) t)))
+ (:known-fun
+ (setf (code-header-ref code-obj index)
+ (%coerce-name-to-fun (cdr const)))))))))))
(values))
(vop fast-symbol-global-value node block name-tn res)
(vop symbol-global-value node block name-tn res))))
(:global-function
- (let ((fdefn-tn (make-load-time-constant-tn :fdefinition name)))
- (if unsafe
- (vop fdefn-fun node block fdefn-tn res)
- (vop safe-fdefn-fun node block fdefn-tn res)))))))
+ (cond #-sb-xc-host
+ ((and (info :function :definition name)
+ (info :function :info name))
+ ;; Known functions can be saved without going through fdefns,
+ ;; except during cross-compilation
+ (emit-move node block (make-load-time-constant-tn :known-fun name)
+ res))
+ (t
+ (let ((fdefn-tn (make-load-time-constant-tn :fdefinition name)))
+ (if unsafe
+ (vop fdefn-fun node block fdefn-tn res)
+ (vop safe-fdefn-fun node block fdefn-tn res)))))))))
;;; some sanity checks for a CLAMBDA passed to IR2-CONVERT-CLOSURE
(defun assertions-on-ir2-converted-clambda (clambda)