Skip to content

Conversation

@N-Storm
Copy link

@N-Storm N-Storm commented Apr 30, 2025

Hello,

( This fixes currently broken builds for ARM64 arch. )

From https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html:

__float128 is available on i386, x86_64, IA-64, LoongArch and hppa HP-UX, as well as on PowerPC GNU/Linux targets that enable the vector scalar (VSX) instruction set. __float128 supports the 128-bit floating type. On i386, x86_64, PowerPC, LoongArch and IA-64, other than HP-UX, __float128 is an alias for _Float128. On hppa and IA-64 HP-UX, __float128 is an alias for long double.

I.e. __float128 aren't portable, as it's not available on every platform. ARM64 aka aarch64 are the example platform without __float128. While _Float128 are standard and main platforms just alias __float128 to _Float128 anyways.

This fixes building for ARM64 with GCC. I've tested under Ubuntu 25.x / gcc-14.x and main branch for prpll.

In case there are some reasons to have __float128 here, I can change this patch to add conditional alias __float128 -> _Float128 only if aarch64 macro defined.

From https://gcc.gnu.org/onlinedocs/gcc/Floating-Types.html:

> __float128 is available on i386, x86_64, IA-64, LoongArch and hppa HP-UX, as well as on PowerPC GNU/Linux targets that enable the vector scalar (VSX) instruction set. __float128 supports the 128-bit floating type. On i386, x86_64, PowerPC, LoongArch and IA-64, other than HP-UX, __float128 is an alias for _Float128. On hppa and IA-64 HP-UX, __float128 is an alias for long double.

I.e. __float128 aren't portable, as it's not available on every platform. ARM64 aka aarch64 are the example platform without __float128. While _Float128 are standard and main platforms just alias __float128 to _Float128 anyways.
This fixes building for ARM64 with GCC at least (tested under Ubuntu 25.x / gcc-14.x)
@tdulcet
Copy link
Contributor

tdulcet commented Apr 30, 2025

Maybe update the CI to test on ARM as well. For example, update this line for Linux:

os: [ubuntu-22.04, ubuntu-24.04]
to something like:

        os: [ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm]

and this line for macOS:

runs-on: macos-13
to something like:

    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [macos-13, macos-latest]
      fail-fast: false

You may need to remove the hardcoded GCC 14 as well.

@Artoria2e5
Copy link

Artoria2e5 commented Nov 9, 2025

I don't think f128 is used anywhere currently. Perhaps it can be deleted?

~/gpuowl$ grep -r f128 .
./src/common.h:using f128 = __float128;

Use of f128 was supposedly introduced in 817a983, but I think it's been reverted somewhere down the line.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants