Visual c++ VisualC++x86 Ab: VC++如何返回值?

Visual c++ VisualC++x86 Ab: VC++如何返回值?,visual-c++,x86,abi,x87,long-double,Visual C++,X86,Abi,X87,Long Double,我知道1/2/4字节整数在eax中返回,8字节整数在eax:edx中返回 顺便问一下,4/8/16字节的浮点值是多少?我记得长双精度可能是16字节。。是否在cdecl/stdcall中返回 多亏了@MatteoItalia,我知道VC++的长双精度是8字节;那么,如何使用16字节浮点 不要说我用8字节!。我真的需要它 嗯,我想我应该满足于10字节浮点…FP返回值在ST0 x87寄存器中返回,请参见例如 顺便说一下,在VC++中,长double在x87中是80位,实际上是double的同义词 FP

我知道1/2/4字节整数在eax中返回,8字节整数在eax:edx中返回

顺便问一下,4/8/16字节的浮点值是多少?我记得长双精度可能是16字节。。是否在cdecl/stdcall中返回

多亏了@MatteoItalia,我知道VC++的长双精度是8字节;那么,如何使用16字节浮点

不要说我用8字节!。我真的需要它


嗯,我想我应该满足于10字节浮点…

FP返回值在ST0 x87寄存器中返回,请参见例如


顺便说一下,在VC++中,长double在x87中是80位,实际上是double的同义词

FP返回值在ST0 x87寄存器中返回,请参见示例


顺便说一下,在VC++中,长double在x87中是80位,实际上是double的同义词

您没有提供体系结构,但x86在ST0中返回浮点值,在XMM0中返回x86_64。看

但是VC中用于x86和x86_64的长双精度是,并且不会提供更多的精度。因此,在Windows上要执行80位浮点操作,需要使用另一个编译器,例如。此外,80位长的double由x87计算,因此它的性能可能比良好的SSE库差

如果您需要超过10字节长的双精度浮点,那么您必须实现自己的浮点库或使用一些外部库。通过软库内置对的支持。看


另一种方法是使用PowerPC或SPARC实现接近四倍的精度值。它与IEEE不兼容,但您可以利用硬件双重支持来加速,因此它比soft u float128快。您没有提供体系结构,但x86在ST0中返回浮点值,在XMM0中返回x86 64。看

但是VC中用于x86和x86_64的长双精度是,并且不会提供更多的精度。因此,在Windows上要执行80位浮点操作,需要使用另一个编译器,例如。此外,80位长的double由x87计算,因此它的性能可能比良好的SSE库差

如果您需要超过10字节长的双精度浮点,那么您必须实现自己的浮点库或使用一些外部库。通过软库内置对的支持。看


另一种方法是使用PowerPC或SPARC实现接近四倍的精度值。它与IEEE不兼容,但您可以利用硬件双重支持来加速,因此它比soft uu float128快

@ikh:x86或我所知的任何广泛使用的平台上都没有本机128位FP支持,您可能需要寻找一些在软件中实现它的库,但它将比基于硬件的FP慢得多。顺便问一下,你为什么需要这么精确的类型?@MetteoItalia um,我应该对10字节浮点感到满意。。我正在写一个小字节的代码,解释语言,需要16字节的浮点…,但我应该用10字节的一个16byte@ikh:x87不支持80位=10字节FP,但VC++不公开此功能。g++OTOH至少在Linux上通过longdouble类型提供了它。我认为,即使在这种情况下,返回值仍将保留在ST0中。@ikh:x86或我所知道的任何广泛使用的平台上都没有本机128位FP支持,您可能需要寻找一些在软件中实现它的库,但它将比基于硬件的FP慢得多。顺便问一下,你为什么需要这么精确的类型?@MetteoItalia um,我应该对10字节浮点感到满意。。我正在写一个小字节的代码,解释语言,需要16字节的浮点…,但我应该用10字节的一个16byte@ikh:x87不支持80位=10字节FP,但VC++不公开此功能。g++OTOH至少在Linux上通过longdouble类型提供了它。我认为即使在这种情况下,返回值仍将保留在ST0中。同样在Windows上,MSVCRT代码将x87有效位精度设置为main之前的53位双精度,因此如果您的GCC/Clang代码与之链接,则需要手动将其设置回默认的64位有效位全精度。同样在Windows上,MSVCRT代码将x87有效位精度设置为main之前的53位双精度,因此如果您的GCC/Clang代码与之链接,则需要手动将其设置回默认的64位有效位全精度。