在sqrt之前阻止对v / ucomisd的调用

时间:2016-11-17 20:34:14

标签: c gcc assembly

我正在优化我的代码,并且来到这个

#include <math.h>

typedef double vector __attribute__((vector_size(16)));

double norm_vector(vector u) {
  vector w = u*u;
  return sqrt(w[0]+w[1]);
}

我发现用

进行编译
gcc -xc -std=gnu11 -O3  -Wall -Wextra -fno-verbose-asm -march=haswell

在调用sqrt之前执行vucomisd指令

norm_vector:
        vmulpd  xmm0, xmm0, xmm0
        vhaddpd xmm1, xmm0, xmm0
        vsqrtsd xmm0, xmm0, xmm1
        vucomisd        xmm0, xmm0
        jp      .L13
        ret
.L13:
        sub     rsp, 8
        vmovapd xmm0, xmm1
        call    sqrt
        add     rsp, 8
        ret

是否注意sqrt的论证是非负面的?在我想避免这个调用的情况下(因为根据定义,参数将为正),如何做到这一点?

0 个答案:

没有答案