Zig 0.17.0-dev (Split by item)

This is an example of documentation generated by ZigDoc, an alternative to Zig's built-in Auto Doc feature. See also examples in other modes/formats. The project being documented here (as the example) is the Zig library itself.

__abs_limb64

limb64.__abs_limb64
fn __abs_limb64(out_ptr: [*]u64, a_ptr: [*]const u64, bits: u16) callconv(.c) void

File

lib/compiler_rt/limb64.zig:1086

Code

fn __abs_limb64(out_ptr: [*]u64, a_ptr: [*]const u64, bits: u16) callconv(.c) void {
    const limb_cnt = limbCount(bits);
    const out = out_ptr[0..limb_cnt];
    const a = a_ptr[0..limb_cnt];

    const ms = limbGet(a, limb_cnt - 1);
    if ((ms >> 63) == 0) {
        @memcpy(out, a);
        return;
    }

    var carry: u1 = 1;
    var i: usize = 0;
    while (i < limb_cnt) : (i += 1) {
        const s = @addWithOverflow(~limbGet(a, i), carry);
        limbSet(out, i, s[0]);
        carry = s[1];
    }
}