gcc - 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
变成了bsf
。 copysign
也解决了。但是,通常很慢的 and 会导致ilogb
指令。我该如何解决(或)?ldexp
jmp
jmp
call
解决方案
推荐阅读
- javascript - 确认删除 sweetalert 时显示数据名称
- javascript - 未处理的拒绝(TypeError):无法读取 null 的属性“产品”
- python - 如何在 tkinter 上跟踪鼠标移动
- mysql - 为什么将查询作为视图调用需要大量额外的时间来执行?
- python - Tkinter event_generate 冻结线程连接
- rest - 从后端获得空响应 - Gatewayscript
- javascript - 如何在 nodejs 文件中运行 curl 命令?
- parallels - 如何使用 Parallels cli 工具创建 Ubuntu vm - prlctl
- javascript - 在 Bing Map API Java 上按邮政编码搜索
- vba - 参考部分表格 VBA