我需要追踪eglibc-2.13中
如何跟踪从sin()到__sin()的宏定义?我真正需要的是确切的代码(包括文件名和行号),以及构建过程推断使用哪个实现的方法。该架构为i386。
double sin(double x)
函数的具体实现方式。我下载了源代码,唯一有意义的部分是与平台相关的__sin函数。它是否是/usr/lib/i386-linux-gnu/libm.a中包含的内容的核心?如何跟踪从sin()到__sin()的宏定义?我真正需要的是确切的代码(包括文件名和行号),以及构建过程推断使用哪个实现的方法。该架构为i386。
sin
没有汇编代码,因为除了优化 C 代码已经执行的操作之外,没有直接的方法来编写它。x87 fsin/fcos 指令不足以实现符合 IEEE 标准的sin
函数。如果您想要一个非符合性的速度优化,gcc 的-ffast-math
可以为您完成这项工作。 - R.. GitHub STOP HELPING ICEsin
而不参考C代码是没有障碍的。 - Eric Postpischilfsqrt
指令那样能够完成整个sqrt()
的工作,或者以更不平凡的例子来说,你可以使用专门的指数函数指令在 387 汇编中实现exp
。 - R.. GitHub STOP HELPING ICEsin
或cos
实现时,有许多事情可能不容易用 C 语言表示。就我个人而言,在 64 位平台上,可以使用整数指令进行参数缩减,并利用 x86 64bx64b -> 128b 乘法指令;也可以进行浮点运算以进行缩减,并利用 SSE4.1 的roundsd
指令以静态舍入模式进行最终舍入到整数。我相信我还可以想到更多的例子。 - Stephen Canon