首页 > 解决方案 > gcc builtins 的源代码在哪里?

问题描述

gcc提供了许多内置例程。我在哪里可以找到内置例程的源代码?我知道有时它们可​​能是直接操作码。这例如在__builtin_clz 的实现中显示。

我尝试了以下四个功能

int leading_zeroes(int x){ return __builtin_ctz(x); }

double cpsgn(double x, double y){ return __builtin_copysign(x,y); }

int exponent(double x) { return __builtin_ilogb(x); }

double loadexp(double x, int y){ return __builtin_ldexp(x,y); }

最后,我对汇编代码感兴趣。使用https://godbolt.org/我得到了这个汇编代码

leading_zeroes:
  xor eax, eax
  rep bsf eax, edi
  ret
cpsgn:
  andpd xmm0, XMMWORD PTR .LC0[rip]
  movapd xmm2, xmm1
  andpd xmm2, XMMWORD PTR .LC1[rip]
  orpd xmm0, xmm2
  ret
exponent:
  jmp ilogb
loadexp:
  jmp ldexp
.LC0:
  .long 4294967295
  .long 2147483647
  .long 0
  .long 0
.LC1:
  .long 0
  .long -2147483648
  .long 0
  .long 0

就这样__builtin_ctz变成了bsfcopysign也解决了。但是,通常很慢的 and 会导致ilogb指令。我该如何解决(或)?ldexpjmpjmpcall

标签: gccassembly

解决方案


推荐阅读