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.

add

The function add adds two field elements in the Montgomery domain.

Preconditions: 0 ≤ eval arg1 < m 0 ≤ eval arg2 < m Postconditions: eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m 0 ≤ eval out1 < m

p384_scalar_64.add
pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void

File

lib/std/crypto/pcurves/p384/p384_scalar_64.zig:1557

Code

pub fn add(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement, arg2: MontgomeryDomainFieldElement) void {
    @setRuntimeSafety(mode == .debug);

    var x1: u64 = undefined;
    var x2: u1 = undefined;
    addcarryxU64(&x1, &x2, 0x0, (arg1[0]), (arg2[0]));
    var x3: u64 = undefined;
    var x4: u1 = undefined;
    addcarryxU64(&x3, &x4, x2, (arg1[1]), (arg2[1]));
    var x5: u64 = undefined;
    var x6: u1 = undefined;
    addcarryxU64(&x5, &x6, x4, (arg1[2]), (arg2[2]));
    var x7: u64 = undefined;
    var x8: u1 = undefined;
    addcarryxU64(&x7, &x8, x6, (arg1[3]), (arg2[3]));
    var x9: u64 = undefined;
    var x10: u1 = undefined;
    addcarryxU64(&x9, &x10, x8, (arg1[4]), (arg2[4]));
    var x11: u64 = undefined;
    var x12: u1 = undefined;
    addcarryxU64(&x11, &x12, x10, (arg1[5]), (arg2[5]));
    var x13: u64 = undefined;
    var x14: u1 = undefined;
    subborrowxU64(&x13, &x14, 0x0, x1, 0xecec196accc52973);
    var x15: u64 = undefined;
    var x16: u1 = undefined;
    subborrowxU64(&x15, &x16, x14, x3, 0x581a0db248b0a77a);
    var x17: u64 = undefined;
    var x18: u1 = undefined;
    subborrowxU64(&x17, &x18, x16, x5, 0xc7634d81f4372ddf);
    var x19: u64 = undefined;
    var x20: u1 = undefined;
    subborrowxU64(&x19, &x20, x18, x7, 0xffffffffffffffff);
    var x21: u64 = undefined;
    var x22: u1 = undefined;
    subborrowxU64(&x21, &x22, x20, x9, 0xffffffffffffffff);
    var x23: u64 = undefined;
    var x24: u1 = undefined;
    subborrowxU64(&x23, &x24, x22, x11, 0xffffffffffffffff);
    var x25: u64 = undefined;
    var x26: u1 = undefined;
    subborrowxU64(&x25, &x26, x24, @as(u64, x12), 0x0);
    var x27: u64 = undefined;
    cmovznzU64(&x27, x26, x13, x1);
    var x28: u64 = undefined;
    cmovznzU64(&x28, x26, x15, x3);
    var x29: u64 = undefined;
    cmovznzU64(&x29, x26, x17, x5);
    var x30: u64 = undefined;
    cmovznzU64(&x30, x26, x19, x7);
    var x31: u64 = undefined;
    cmovznzU64(&x31, x26, x21, x9);
    var x32: u64 = undefined;
    cmovznzU64(&x32, x26, x23, x11);
    out1[0] = x27;
    out1[1] = x28;
    out1[2] = x29;
    out1[3] = x30;
    out1[4] = x31;
    out1[5] = x32;
}