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:
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) {