我使用SBCL(64位v1.4.0)进行数值计算.启用优化后,将显示以下编译器注释:
note: doing float to pointer coercion (cost 13) to "<return value>"
Run Code Online (Sandbox Code Playgroud)
我使用的代码如下:
(defun add (a b)
(declare (optimize (speed 3) (safety 0)))
(declare (double-float a b))
(the double-float (+ a b)))
Run Code Online (Sandbox Code Playgroud)
我也试过ftype并得到了相同的说明.
另一方面,以下代码未显示注释:
(defun add-fixnum (a b)
(declare (optimize (speed 3) (safety 0)))
(declare (fixnum a b))
(the fixnum (+ a b)))
Run Code Online (Sandbox Code Playgroud)
我认为double-float和fixnum都是64位宽.为什么SBCL不能通过像C语言这样的寄存器返回双浮点值?有没有办法避免浮动指针强制没有内联扩展?