Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何在某处计算正弦值,然后在汇编中移动到XMM0?_Assembly_Sse - Fatal编程技术网

Assembly 如何在某处计算正弦值,然后在汇编中移动到XMM0?

Assembly 如何在某处计算正弦值,然后在汇编中移动到XMM0?,assembly,sse,Assembly,Sse,我以前在做FPU的集成任务,现在我在和SSE做斗争 我的主要问题是,当我使用FPU堆栈时,有一个fsin函数,它可以用于堆栈顶部的数字(st0) 现在我想计算XMM0中所有四个数字的正弦,或者在其他地方计算,然后进入XMM0。我使用的是AT&T语法 我认为第二个想法实际上是可能的,但我不知道如何实现:) 有人知道怎么做吗 三个选项: 使用和现有的库,计算SSE向量上的sin 使用SSE编写自己的向量sin函数 将向量存储到内存中,使用fsin计算每个元素的正弦,并加载结果。假设堆栈是16字节对齐

我以前在做FPU的集成任务,现在我在和SSE做斗争

我的主要问题是,当我使用FPU堆栈时,有一个
fsin
函数,它可以用于堆栈顶部的数字(st0)

现在我想计算
XMM0
中所有四个数字的正弦,或者在其他地方计算,然后进入
XMM0
。我使用的是AT&T语法

我认为第二个想法实际上是可能的,但我不知道如何实现:)

有人知道怎么做吗

三个选项:

  • 使用和现有的库,计算SSE向量上的sin
  • 使用SSE编写自己的向量
    sin
    函数
  • 将向量存储到内存中,使用
    fsin
    计算每个元素的正弦,并加载结果。假设堆栈是16字节对齐的,并且有16字节的空间,如下所示:

       movaps  %xmm0, (%rsp)
       mov     $3,     %rcx
    0: flds   (%rsp,%rcx,4)
       fsin
       fstps  (%rsp,%rcx,4)
       sub     $1,     %rcx
       jns     0b
    

  • (1) 几乎可以肯定,这是您最佳的性能选择,也是最简单的。如果您有编写向量代码的丰富经验,并且事先知道参数属于某个范围,那么使用(2)可以获得更好的性能。使用
    fsin
    会起作用,但如果有必要的话,它又丑又慢,而且不是特别准确。

    ?我不认为这意味着你认为它会做什么(它不是动词)。fsin不会将值放在堆栈顶部?它在英语中被称为“正弦”。这个答案是相关的:(总结,SSE似乎没有提供本机
    sin
    指令)。另外,这个页面看起来可能会有所帮助:@dbaupp我知道SSE不提供它,但也许您知道如何将fpu堆栈中的值插入xmm0?