我编写了一个 AT&T 汇编函数来计算积分。我需要将它作为返回值传递,因为它是由用 C 编写的代码调用的。我已经成功地将它作为单精度float
和双精度返回double
。但我知道我可以以 80 位双扩展精度计算它,我很想将它传递给 C。
假设我要传递的值指向 TOP 指向的 FPU 寄存器。下面是我如何调用函数。
对于浮动:
//C
double integ_fo=integ_asm_fpu_fl();
#asm
...
fstps max # Fpu STore and Pop Short <- short for 32-bit
movss max, %xmm0 # MOVe Scalar Single precision
双倍:
//C
double integ_do=integ_asm_fpu_do();
#asm
...
fstpl max # Fpu STore and Pop Long <- long for 64-bit
movsd max, %xmm0 # MOVe Scalar Dingle precision
我现在的问题是:如何完成以下代码,以便 C 可以long double
从%XMM0
寄存器中读取。
对于长双:
//C
long double integ_lo=integ_asm_fpu_lo();
#asm
...
fstpt max # FPU Store and Pop exTended <- extended for 80-bit
之后我该怎么办?我将如何将 80 位从 移动max
到%XMM0
?