╭ fabs.zig ─────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
.. aarch64_outline_atomics.zig absv.zig absvdi2.zig absvdi2_test.zig absvsi2.zig absvsi2_test.zig absvti2.zig absvti2_test.zig addf3.zig addf3_test.zig addvdi3.zig addvsi3.zig arm.zig atomics.zig aulldiv.zig aullrem.zig bitreverse.zig bitreversedi2_test.zig bitreversesi2_test.zig bitreverseti2_test.zig bswap.zig bswapdi2_test.zig bswapsi2_test.zig bswapti2_test.zig clear_cache.zig clzdi2_test.zig clzsi2_test.zig clzti2_test.zig cmp.zig cmpdi2_test.zig cmpsi2_test.zig cmpti2_test.zig comparedf2_test.zig comparef.zig comparesf2_test.zig cos.zig count0bits.zig ctzdi2_test.zig ctzsi2_test.zig ctzti2_test.zig divc3.zig divc3_test.zig divdf3.zig divdf3_test.zig divmodei4.zig divsf3.zig divsf3_test.zig divtf3.zig divtf3_test.zig divti3_test.zig divxf3.zig divxf3_test.zig emutls.zig exp.zig exp2.zig exp_f128.zig extendf.zig extendf_test.zig ╭─────────────────────────────────╮ │fabs.zig │ ╰─────────────────────────────────╯ ffsdi2_test.zig ffssi2_test.zig ffsti2_test.zig float_from_int.zig float_from_int_test.zig floor_ceil.zig fma.zig fmax.zig fmin.zig fmod.zig fmodq_test.zig fmodx_test.zig hexagon.zig int.zig int_from_float.zig int_from_float_test.zig limb64.zig log.zig log10.zig log2.zig log_f128.zig memcpy.zig memmove.zig modti3_test.zig mulXi3.zig mulXi3_test.zig mulc3.zig mulc3_test.zig mulf3.zig mulf3_test.zig mulo.zig mulodi4_test.zig mulosi4_test.zig muloti4_test.zig mulvsi3.zig negdi2_test.zig negsi2_test.zig negti2_test.zig negv.zig negvdi2_test.zig negvsi2_test.zig negvti2_test.zig os_version_check.zig parity.zig paritydi2_test.zig paritysi2_test.zig parityti2_test.zig popcount.zig popcountdi2_test.zig popcountsi2_test.zig popcountti2_test.zig powiXf2.zig powiXf2_test.zig rem_pio2.zig rem_pio2_large.zig rem_pio2f.zig rem_pio2l.zig round.zig shift.zig shift_test.zig sin.zig sincos.zig sqrt.zig ssp.zig stack_probe.zig subvdi3.zig subvsi3.zig tan.zig trig.zig trunc.zig truncf.zig truncf_test.zig ucmpdi2_test.zig ucmpsi2_test.zig ucmpti2_test.zig udivmod.zig udivmoddi4_test.zig udivmodei4.zig udivmodsi4_test.zig udivmodti4_test.zig
1 const std = @import("std"); 2 const builtin = @import("builtin"); 3 const arch = builtin.cpu.arch; 4 const compiler_rt = @import("../compiler_rt.zig"); 5 const symbol = compiler_rt.symbol; 6 7 comptime { 8 symbol(&__fabsh, "__fabsh"); 9 symbol(&fabsf, "fabsf"); 10 symbol(&fabs, "fabs"); 11 symbol(&__fabsx, "__fabsx"); 12 symbol(&fabsq, "fabsf128"); 13 symbol(&fabsl, "fabsl"); 14 } 15 16 fn __fabsh(a: compiler_rt.f16.Abi) callconv(.c) compiler_rt.f16.Abi { 17 return compiler_rt.f16.toAbi(fabs_f16(compiler_rt.f16.fromAbi(a))); 18 } 19 pub fn fabs_f16(a: f16) f16 { 20 return generic_fabs(a); 21 } 22 23 fn fabsf(a: compiler_rt.f32.Abi) callconv(.c) compiler_rt.f32.Abi { 24 return compiler_rt.f32.toAbi(fabs_f32(compiler_rt.f32.fromAbi(a))); 25 } 26 pub fn fabs_f32(a: f32) f32 { 27 return generic_fabs(a); 28 } 29 30 fn fabs(a: compiler_rt.f64.Abi) callconv(.c) compiler_rt.f64.Abi { 31 return compiler_rt.f64.toAbi(fabs_f64(compiler_rt.f64.fromAbi(a))); 32 } 33 pub fn fabs_f64(a: f64) f64 { 34 return generic_fabs(a); 35 } 36 37 fn __fabsx(a: compiler_rt.f80.Abi) callconv(.c) compiler_rt.f80.Abi { 38 return compiler_rt.f80.toAbi(fabs_f80(compiler_rt.f80.fromAbi(a))); 39 } 40 pub fn fabs_f80(a: f80) f80 { 41 return generic_fabs(a); 42 } 43 44 fn fabsq(a: compiler_rt.f128.Abi) callconv(.c) compiler_rt.f128.Abi { 45 return compiler_rt.f128.toAbi(fabs_f128(compiler_rt.f128.fromAbi(a))); 46 } 47 pub fn fabs_f128(a: f128) f128 { 48 return generic_fabs(a); 49 } 50 51 pub fn fabsl(x: c_longdouble) callconv(.c) c_longdouble { 52 switch (@typeInfo(c_longdouble).float.bits) { 53 64 => return fabs_f64(x), 54 80 => return fabs_f80(x), 55 128 => return fabs_f128(x), 56 else => comptime unreachable, 57 } 58 } 59 60 inline fn generic_fabs(x: anytype) @TypeOf(x) { 61 const T = @TypeOf(x); 62 const TBits = @Int(.unsigned, @typeInfo(T).float.bits); 63 const float_bits: TBits = @bitCast(x); 64 const remove_sign = ~@as(TBits, 0) >> 1; 65 return @bitCast(float_bits & remove_sign); 66 } 67