zig/std/special/compiler_rt
Wink Saville 634d11ab28 Add add compiler_rt routines for float to signed integer conversion
And add std.math.f128_* constants.

The routines are:

  __fixdfdi, __fixdfsi, __fixdfti,
  __fixsfdi, __fixsfsi, __fixsfti,
  __fixtfdi, __fixtfsi, __fixtfti.

These all call fixint which is a generic zig function that does the
conversion:

  pub fn fixint(comptime fp_t: type, comptime fixint_t: type, a: fp_t) fixint_t

There are also a set tests:

  __fixdfdi_test, __fixdfsi_test, __fixdfti_test,
  __fixsfdi_test, __fixsfsi_test, __fixsfti_test,
  __fixtfdi_test, __fixtfsi_test, __fixtfti_test.
2018-12-12 00:21:42 -05:00
..
aulldiv.zig
aullrem.zig
comparetf2.zig
divti3_test.zig
divti3.zig
extendXfYf2_test.zig
extendXfYf2.zig
fixdfdi_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixdfdi.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixdfsi_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixdfsi.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixdfti_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixdfti.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixint_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixint.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixsfdi_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixsfdi.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixsfsi_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixsfsi.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixsfti_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixsfti.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixtfdi_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixtfdi.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixtfsi_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixtfsi.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixtfti_test.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixtfti.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
fixuint.zig
fixunsdfdi_test.zig
fixunsdfdi.zig
fixunsdfsi_test.zig
fixunsdfsi.zig
fixunsdfti_test.zig
fixunsdfti.zig
fixunssfdi_test.zig
fixunssfdi.zig
fixunssfsi_test.zig
fixunssfsi.zig
fixunssfti_test.zig
fixunssfti.zig
fixunstfdi_test.zig
fixunstfdi.zig
fixunstfsi_test.zig
fixunstfsi.zig
fixunstfti_test.zig
fixunstfti.zig
floattidf_test.zig
floattidf.zig
floattisf_test.zig
floattisf.zig
floattitf_test.zig
floattitf.zig
floatunditf_test.zig
floatunditf.zig
floatunsitf_test.zig
floatunsitf.zig
floatuntidf_test.zig
floatuntidf.zig
floatuntisf_test.zig
floatuntisf.zig
floatuntitf_test.zig
floatuntitf.zig
index.zig Add add compiler_rt routines for float to signed integer conversion 2018-12-12 00:21:42 -05:00
muloti4_test.zig
muloti4.zig
multi3_test.zig
multi3.zig
README.md
truncXfYf2_test.zig
truncXfYf2.zig
udivmod.zig
udivmoddi4_test.zig
udivmoddi4.zig
udivmodti4_test.zig
udivmodti4.zig
udivti3.zig
umodti3.zig

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.