tech-userlevel archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: float128 in libstdc++



On 24.06.2017 14:15, Martin Husemann wrote:
> On Sat, Jun 24, 2017 at 01:46:07PM +0200, Kamil Rytarowski wrote:
>> To be clear, we now thinking only about i386 and amd64. Other OSes push
>> also systemz machines to this competition.
> 
> I have no idea what systemz machines are and why you are limiting the
> arch coverage for this discussion arbitrarily.
> 

systemz machines are IBM mainframes.

I list i386/amd64/systemz as they enable float128 in clang frontend:

https://github.com/NetBSD/src/blob/trunk/external/bsd/llvm/dist/clang/lib/Basic/Targets.cpp#L475

https://github.com/NetBSD/src/blob/trunk/external/bsd/llvm/dist/clang/lib/Basic/Targets.cpp#L491

NetBSD currently enables it on i386/amd64 and i64. Itanium is currently
without LLVM backend support.

$ git grep _GLIBCXX_USE_FLOAT128
arch/alpha/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/arm/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/armeb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/coldfire/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earm/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmeb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmhf/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmhfeb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv4/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv4eb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv6/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv6eb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv6hf/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv6hfeb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv7/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv7eb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv7hf/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/earmv7hfeb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/hppa/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/i386/c++config.h:#define _GLIBCXX_USE_FLOAT128 1
arch/ia64/c++config.h:#define _GLIBCXX_USE_FLOAT128 1
arch/m68000/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/m68k/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/mips64eb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/mips64el/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/mipseb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/mipsel/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/or1k/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/powerpc/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/powerpc64/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/riscv32/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/riscv64/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/sh3eb/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/sh3el/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/sparc/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/sparc64/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/vax/c++config.h:/* #undef _GLIBCXX_USE_FLOAT128 */
arch/x86_64/c++config.h:#define _GLIBCXX_USE_FLOAT128 1

> We have softfloat support for 128bit in userland, and could probably
> use that for all architectures, but the downside would be that lots of
> stupid configure scripts will start picking this up and use it, and
> users will see a heavy performance degradation.
> 
> That is why IMO providing the type and support functions is a bad idea
> unless supported by hardware or forced by ABI.
> 

SYSV ABI AMD64 notes float128 optionally and software emulated for at
least order hardware.

I assume that undefining it now would break ABI compatibility in x86
ports, and we should still enable it in libstdc++ with Clang/libtdc++.
This is the default setup most people will get with using GCC in base
and Clang from pkgsrc.

> Martin
> 


Attachment: signature.asc
Description: OpenPGP digital signature



Home | Main Index | Thread Index | Old Index