gpt4 book ai didi

assembly - Intel x86_64 汇编,如何在 x87 和 SSE2 之间移动? (计算 double 的反正切)

转载 作者:行者123 更新时间:2023-12-03 09:16:11 26 4
gpt4 key购买 nike

我尝试计算 double 浮点值的反正切,该值保存在 xmm 寄存器中。对于正常的浮点,可以使用旧的 x87 指令 FPATAN,但是如何使用 double 来做到这一点?

最佳答案

您仍然可以将数据从 xmm 复制到 x87 以使用诸如 fpatan 之类的指令,但通常您应该调用数学库函数。 (fpatan 太慢了,用许多简单的指令替换它仍然很好。)Wikipedia 建议查看 Netlib 以获取可自由再发行的 C 实现。 (显然,最简单的方法是在您使用的任何系统上调用 libm 中的函数。)


如果您打算这样做,请不要使用静态存储来存储您跳转的内存;在堆栈上使用临时变量。

另请注意 fpatan takes 2 inputs ,因为它实现了 atan2 library function ,根据两个输入的符号在适当的象限中给出结果。

; assuming you did  sub  rsp, 24   or something earlier in your function

movsd [rsp], xmm1
fld qword [rsp] ; st0 = xmm1
movsd [rsp], xmm0
fld qword [rsp] ; st0 = xmm0, st1 = xmm1

fpatan ; st0 = arctan(xmm1/xmm0)

fstp qword [rsp] ; x87 stack is empty again
movsd xmm0, [rsp] ; xmm0 = arctan(xmm1/xmm0)

; and then add rsp, 24 at some point before returning

关于assembly - Intel x86_64 汇编,如何在 x87 和 SSE2 之间移动? (计算 double 的反正切),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37567154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com