小编mag*_*non的帖子

避免浮动到Common Lisp中的指针强制

我使用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语言这样的寄存器返回双浮点值?有没有办法避免浮动指针强制没有内联扩展?

double optimization common-lisp

3
推荐指数
1
解决办法
423
查看次数

标签 统计

common-lisp ×1

double ×1

optimization ×1