zig/std/special/compiler_rt
Ben Noordhuis fd75e73ee9 add f16 type
Add support for half-precision floating point operations.

Introduce `__extendhfsf2` and `__truncsfhf2` in std/special/compiler_rt.

Add `__gnu_h2f_ieee` and `__gnu_f2h_ieee` as aliases that are used in
Windows builds.

The logic in std/special/compiler_rt/extendXfYf2.zig has been reworked
and can now operate on 16 bits floating point types.

`extendXfYf2()` and `truncXfYf2()` are marked `inline` to work around
a not entirely understood stack alignment issue on Windows when calling
the f16 versions of the builtins.

closes #1122
2018-06-27 16:20:04 +02:00
..
README.md add compiler-rt fns: udivmodti4, udivti3, umodti3 2017-08-18 16:26:09 -04:00
aulldiv.zig syntax: functions require return type. remove `->` 2018-01-25 04:10:11 -05:00
aullrem.zig syntax: functions require return type. remove `->` 2018-01-25 04:10:11 -05:00
comparetf2.zig remove bool to int syntax. add @boolToInt 2018-06-18 03:07:16 -04:00
divti3.zig remove integer and float casting syntax 2018-06-17 02:57:07 -04:00
divti3_test.zig Add i128 compiler-rt div/mul support 2018-06-13 22:25:04 +12:00
extendXfYf2.zig add f16 type 2018-06-27 16:20:04 +02:00
extendXfYf2_test.zig add f16 type 2018-06-27 16:20:04 +02:00
fixuint.zig remove integer and float casting syntax 2018-06-17 02:57:07 -04:00
fixunsdfdi.zig behavior tests passing with new pointer deref syntax 2018-05-01 01:53:04 -04:00
fixunsdfdi_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
fixunsdfsi.zig behavior tests passing with new pointer deref syntax 2018-05-01 01:53:04 -04:00
fixunsdfsi_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
fixunsdfti.zig syntax: functions require return type. remove `->` 2018-01-25 04:10:11 -05:00
fixunsdfti_test.zig run zig fmt on the codebase 2018-05-29 04:23:38 -04:00
fixunssfdi.zig syntax: functions require return type. remove `->` 2018-01-25 04:10:11 -05:00
fixunssfdi_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
fixunssfsi.zig syntax: functions require return type. remove `->` 2018-01-25 04:10:11 -05:00
fixunssfsi_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
fixunssfti.zig behavior tests passing with new pointer deref syntax 2018-05-01 01:53:04 -04:00
fixunssfti_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
fixunstfdi.zig syntax: functions require return type. remove `->` 2018-01-25 04:10:11 -05:00
fixunstfdi_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
fixunstfsi.zig syntax: functions require return type. remove `->` 2018-01-25 04:10:11 -05:00
fixunstfsi_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
fixunstfti.zig behavior tests passing with new pointer deref syntax 2018-05-01 01:53:04 -04:00
fixunstfti_test.zig fix compiler-rt tests accidentally running std tests 2018-05-02 21:34:34 -04:00
floatuntidf.zig `@floatToInt` now has safety-checked undefined behavior 2018-06-19 16:06:10 -04:00
floatuntidf_test.zig `@floatToInt` now has safety-checked undefined behavior 2018-06-19 16:06:10 -04:00
index.zig add f16 type 2018-06-27 16:20:04 +02:00
muloti4.zig Add windows x86_64 i128 abi workaround 2018-06-14 21:18:36 +12:00
muloti4_test.zig Add windows x86_64 i128 abi workaround 2018-06-14 21:18:36 +12:00
truncXfYf2.zig add f16 type 2018-06-27 16:20:04 +02:00
truncXfYf2_test.zig add f16 type 2018-06-27 16:20:04 +02:00
udivmod.zig remove integer and float casting syntax 2018-06-17 02:57:07 -04:00
udivmoddi4.zig use * for pointer type instead of & 2018-05-31 17:28:07 -04:00
udivmoddi4_test.zig support `zig fmt: off` and `zig fmt: on` between top level decls 2018-06-04 12:15:02 -04:00
udivmodti4.zig use * for pointer type instead of & 2018-05-31 17:28:07 -04:00
udivmodti4_test.zig support `zig fmt: off` and `zig fmt: on` between top level decls 2018-06-04 12:15:02 -04:00
udivti3.zig use * for pointer type instead of & 2018-05-31 17:28:07 -04:00
umodti3.zig use * for pointer type instead of & 2018-05-31 17:28:07 -04:00

README.md

This compiler-rt library is ported from LLVM.

It's needed because LLVM emits library calls to compiler-rt when hardware lacks functionality, for example, 64-bit integer multiplication on 32-bit x86.

This library is automatically built as-needed for the compilation target and then statically linked and therefore is a transparent dependency for the programmer.

Any bugs should be solved by trying to duplicate the bug upstream.

  • If the bug exists upstream, get it fixed with the LLVM team and then port the fix downstream to Zig.
  • If the bug only exists in Zig, something went wrong porting the code, and you can run the C code and Zig code side by side in a debugger to figure out what's happening differently.