ziglang/zig

compiler_rt: Tracking Issue Integer Routines

matu3ba opened this issue · 6 comments

Done Name a b Out Comment
Integer Bit Operations
__clzsi2 u32 i32 count leading zeros
__clzdi2 u64 i32 count leading zeros
__clzti2 u128 i32 count leading zeros
__ctzsi2 u32 i32 count trailing zeros
__ctzdi2 u64 i32 count trailing zeros
__ctzti2 u128 i32 count trailing zeros
__ffssi2 u32 i32 find least significant 1 bit
__ffsdi2 u64 i32 find least significant 1 bit
__ffsti2 u128 i32 find least significant 1 bit
__paritysi2 u32 i32 bit parity
__paritydi2 u64 i32 bit parity
__parityti2 u128 i32 bit parity
__popcountsi2 u32 i32 bit population
__popcountdi2 u64 i32 bit population
__popcountti2 u128 i32 bit population
__bswapsi2 u32 i32 byte swap
__bswapdi2 u64 i32 byte swap
__bswapti2 u128 i32 byte swap
Integer Comparison
__cmpsi2 i32 i32 i32 (a<b) -> 0, (a==b) -> 1, (a>b) -> 2
__cmpdi2 i64 i64 i32 ..
__aeabi_lcmp i64 i64 i32 .. ARM
__cmpti2 i128 i128 i32 ..
__ucmpsi2 u32 u32 i32 (a<b) -> 0, (a==b) -> 1, (a>b) -> 2
__ucmpdi2 u64 u64 i32 ..
__aeabi_ulcmp u64 u64 i32 .. ARM
__ucmpti2 u128 u128 i32 ..
Integer Arithmetic
__ashlsi3 i32 i32 i32 a << b [^unused_rl78]
__ashldi3 i64 i32 i64 ..
__ashlti3 i128 i32 i128 ..
__aeabi_llsl i32 i32 i32 .. ARM
__ashrsi3 i32 i32 i32 a >> b arithmetic (sign fill) [^unused_rl78]
__ashrdi3 i64 i32 i64 ..
__ashrti3 i128 i32 i128 ..
__aeabi_lasr i64 i32 i64 .. ARM
__lshrsi3 i32 i32 i32 a >> b logical (zero fill) [^unused_rl78]
__lshrdi3 i64 i32 i64 ..
__lshrti3 i128 i32 i128 ..
__aeabi_llsr i64 i32 i64 .. ARM
__negsi2 i32 i32 i32 -a [^libgcc_compat]
__negdi2 i64 i64 i64 ..
__negti2 i128 i128 i128 ..
__mulsi3 i32 i32 i32 a * b
__muldi3 i64 i64 i64 ..
__aeabi_lmul i64 i64 i64 .. ARM
__multi3 i128 i128 i128 ..
__divsi3 i32 i32 i32 a / b
__divdi3 i64 i64 i64 ..
__divti3 i128 i128 i128 ..
__aeabi_idiv i32 i32 i32 .. ARM
__udivsi3 u32 u32 u32 a / b
__udivdi3 u64 u64 u64 ..
__udivti3 u128 u128 u128 ..
__aeabi_uidiv i32 i32 i32 .. ARM
__modsi3 i32 i32 i32 a % b
__moddi3 i64 i64 i64 ..
__modti3 i128 i128 i128 ..
__umodsi3 u32 u32 u32 a % b
__umoddi3 u64 u64 u64 ..
__umodti3 u128 u128 u128 ..
__udivmodsi4 u32 u32 u32 a / b, rem.* = a % b
__aeabi_uidivmod u32 u32 u32 .. ARM
__udivmoddi4 u64 u64 u64 ..
__aeabi_uldivmod u64 u64 u64 .. ARM
__udivmodti4 u128 u128 u128 ..
__divmodsi4 i32 i32 i32 a / b, rem.* = a % b
__aeabi_idivmod i32 i32 i32 .. ARM
__divmoddi4 i64 i64 i64 ..
__aeabi_ldivmod i64 i64 i64 .. ARM
__divmodti4 i128 i128 i128 .. [^libgcc_compat]
Integer Arithmetic with Trapping Overflow
__absvsi2 i32 i32 i32 abs(a)
__absvdi2 i64 i64 i64 ..
__absvti2 i128 i128 i128 ..
__negvsi2 i32 i32 i32 -a [^libgcc_compat]
__negvdi2 i64 i64 i64 ..
__negvti2 i128 i128 i128 ..
__addvsi3 i32 i32 i32 a + b
__addvdi3 i64 i64 i64 ..
__addvti3 i128 i128 i128 ..
__subvsi3 i32 i32 i32 a - b
__subvdi3 i64 i64 i64 ..
__subvti3 i128 i128 i128 ..
__mulvsi3 i32 i32 i32 a * b
__mulvdi3 i64 i64 i64 ..
__mulvti3 i128 i128 i128 ..
Integer Arithmetic which Return on Overflow [^noptr_faster]
__addosi4 i32 i32 i32 a + b, overflow->ov.*=1 else 0 [^perf_addition]
__addodi4 i64 i64 i64 ..
__addoti4 i128 i128 i128 ..
__subosi4 i32 i32 i32 a - b, overflow->ov.*=1 else 0 [^perf_addition]
__subodi4 i64 i64 i64 ..
__suboti4 i128 i128 i128 ..
__mulosi4 i32 i32 i32 a * b, overflow->ov.*=1 else 0
__mulodi4 i64 i64 i64 ..
__muloti4 i128 i128 i128 ..

Missing piece:

  • __addvsi3
  • __addvdi3
  • __addvti3
  • __subvsi3
  • __subvdi3
  • __subvti3
  • __mulvsi3
  • __mulvdi3
  • __mulvti3
  • __aeabi_lcmp
  • __aeabi_ulcmp

TODO:

  • check PPC
  • check SPARC

Documentation is maintained in https://github.com/matu3ba/matu3ba.github.io/tree/master/crt until review or I have a better place for it to reduce maintenance churn.

Exposing pdep and pext is another idea, but YAGNI.

__multi3 is missing on MSVC and it is referenced by zig_mul_i128, so while clang-cl can compile but we can't do so on MSVC

instead we have: _mul128 | Microsoft Learn

__multi3 is missing on MSVC and it is referenced by zig_mul_i128, so while clang-cl can compile but we can't do so on MSVC

See lib/compiler_rt/mulXi3.zig:17:

comptime {
    @export(__mulsi3, .{ .name = "__mulsi3", .linkage = common.linkage, .visibility = common.visibility });
    if (common.want_aeabi) {
        @export(__aeabi_lmul, .{ .name = "__aeabi_lmul", .linkage = common.linkage, .visibility = common.visibility });
    } else {
        @export(__muldi3, .{ .name = "__muldi3", .linkage = common.linkage, .visibility = common.visibility });
    }
    if (common.want_windows_v2u64_abi) {
        @export(__multi3_windows_x86_64, .{ .name = "__multi3", .linkage = common.linkage, .visibility = common.visibility });
    } else {
        @export(__multi3, .{ .name = "__multi3", .linkage = common.linkage, .visibility = common.visibility });
    }
}

We want to keep bootstrapping code as simple as reasonable, but we need the compiler_rt things for LLVM, so it makes no sense to conditionally use the Windows stuff. Or can you show significant performance differences for bootstrapping justifying additional complexity?

__multi3 does not exist for PowerPC, or at least when compiling for the Wii using the devkitPro toolchain (patched GCC)
Looks like LLVM had to handle this: https://reviews.llvm.org/D119624

For context, I was experimenting with compiling to C with .ofmt = .c and feeding that file + zig.h into the GCC compile to make it build it.

Not sure what you mean by __multi3 not existing for PowerPC. All compiler rt functions are provided by zig. Zig creates a compiler rt with weak symbols so that any functions needed are available but also overridable.

Ah, in my testing I used .ofmt = c as the target with b.addObject to create the .c file. Since I was feeding this output file directly to devkitPPC\bin\powerpc-eabi-gcc.exe it wasn't including the compiler_rt.

Setting obj.bundle_compiler_rt = true; got it to compile, albeit with warnings. Also it crashed when I tried to run it on Dolphin but it did compile 😁 (For clarity, it runs fine on Dolphin if I just get Zig+LLVM to output the .o file and pass that into gcc)

Not sure if its helpful at all to post the warnings but here they are, also a screenshot:
image

D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:9144:16: warning: conflicting types for built-in function 'printf'; expected 'int(const char *, ...)' [-Wbuiltin-declaration-mismatch]
 9144 | zig_extern int printf(uint8_t const *, ...);
      |                ^~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:3:1: note: 'printf' is declared in header '<stdio.h>'
    2 | #include "zig.h"
  +++ |+#include <stdio.h>
    3 | struct anon__lazy_66 {
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'ceill':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:50092:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
50092 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:50087:37: note: source object 'a0' of size 8
50087 | long double ceill(long double const a0) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'expl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:51172:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
51172 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:51167:36: note: source object 'a0' of size 8
51167 | long double expl(long double const a0) {
      |                  ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'exp2l':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:51756:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
51756 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:51751:37: note: source object 'a0' of size 8
51751 | long double exp2l(long double const a0) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'fabsl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:51894:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
51894 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:51889:37: note: source object 'a0' of size 8
51889 | long double fabsl(long double const a0) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'cosl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:50505:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
50505 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:50500:36: note: source object 'a0' of size 8
50500 | long double cosl(long double const a0) {
      |                  ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'floorl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:52412:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
52412 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:52407:38: note: source object 'a0' of size 8
52407 | long double floorl(long double const a0) {
      |                    ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'fmal':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53028:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
53028 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53021:36: note: source object 'a0' of size 8
53021 | long double fmal(long double const a0, long double const a1, long double const a2) {
      |                  ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53029:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
53029 |  memcpy(&t1, &a1, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53021:58: note: source object 'a1' of size 8
53021 | long double fmal(long double const a0, long double const a1, long double const a2) {
      |                                        ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53030:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
53030 |  memcpy(&t2, &a2, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53021:80: note: source object 'a2' of size 8
53021 | long double fmal(long double const a0, long double const a1, long double const a2) {
      |                                                              ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'fmaxl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53289:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
53289 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53283:37: note: source object 'a0' of size 8
53283 | long double fmaxl(long double const a0, long double const a1) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53290:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
53290 |  memcpy(&t1, &a1, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53283:59: note: source object 'a1' of size 8
53283 | long double fmaxl(long double const a0, long double const a1) {
      |                                         ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'fminl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53549:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
53549 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53543:37: note: source object 'a0' of size 8
53543 | long double fminl(long double const a0, long double const a1) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53550:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
53550 |  memcpy(&t1, &a1, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:53543:59: note: source object 'a1' of size 8
53543 | long double fminl(long double const a0, long double const a1) {
      |                                         ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'fmodl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:55273:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
55273 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:55267:37: note: source object 'a0' of size 8
55267 | long double fmodl(long double const a0, long double const a1) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:55274:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
55274 |  memcpy(&t1, &a1, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:55267:59: note: source object 'a1' of size 8
55267 | long double fmodl(long double const a0, long double const a1) {
      |                                         ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'logl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:55927:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
55927 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:55922:36: note: source object 'a0' of size 8
55922 | long double logl(long double const a0) {
      |                  ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'log10l':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:56701:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
56701 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:56696:38: note: source object 'a0' of size 8
56696 | long double log10l(long double const a0) {
      |                    ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'log2l':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:57453:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
57453 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:57448:37: note: source object 'a0' of size 8
57448 | long double log2l(long double const a0) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'roundl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:58002:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
58002 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:57997:38: note: source object 'a0' of size 8
57997 | long double roundl(long double const a0) {
      |                    ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'sinl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:58450:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
58450 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:58445:36: note: source object 'a0' of size 8
58445 | long double sinl(long double const a0) {
      |                  ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'sincosl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:59024:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
59024 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:59018:32: note: source object 'a0' of size 8
59018 | void sincosl(long double const a0, long double *const a1, long double *const a2) {
      |              ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'sqrtl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:60022:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
60022 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:60017:37: note: source object 'a0' of size 8
60017 | long double sqrtl(long double const a0) {
      |                   ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'tanl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:60374:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
60374 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:60369:36: note: source object 'a0' of size 8
60369 | long double tanl(long double const a0) {
      |                  ~~~~~~~~~~~~~~~~~~^~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c: In function 'truncl':
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:60644:2: warning: 'memcpy' reading 16 bytes from a region of size 8 [-Wstringop-overread]
60644 |  memcpy(&t0, &a0, sizeof(zig_f128));
      |  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
D:\ZigProjects\map-editor\.zig-cache\o\a0f12b3c5235c27b177fadbc3243019b\map-editor.c:60639:38: note: source object 'a0' of size 8
60639 | long double truncl(long double const a0) {