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.

square

The function square squares a field element in the Montgomery domain.

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

secp256k1_scalar_64.square
pub fn square(out1: *MontgomeryDomainFieldElement, arg1: MontgomeryDomainFieldElement) void

File

lib/std/crypto/pcurves/secp256k1/secp256k1_scalar_64.zig:456

Code

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

    const x1 = (arg1[1]);
    const x2 = (arg1[2]);
    const x3 = (arg1[3]);
    const x4 = (arg1[0]);
    var x5: u64 = undefined;
    var x6: u64 = undefined;
    mulxU64(&x5, &x6, x4, (arg1[3]));
    var x7: u64 = undefined;
    var x8: u64 = undefined;
    mulxU64(&x7, &x8, x4, (arg1[2]));
    var x9: u64 = undefined;
    var x10: u64 = undefined;
    mulxU64(&x9, &x10, x4, (arg1[1]));
    var x11: u64 = undefined;
    var x12: u64 = undefined;
    mulxU64(&x11, &x12, x4, (arg1[0]));
    var x13: u64 = undefined;
    var x14: u1 = undefined;
    addcarryxU64(&x13, &x14, 0x0, x12, x9);
    var x15: u64 = undefined;
    var x16: u1 = undefined;
    addcarryxU64(&x15, &x16, x14, x10, x7);
    var x17: u64 = undefined;
    var x18: u1 = undefined;
    addcarryxU64(&x17, &x18, x16, x8, x5);
    const x19 = (@as(u64, x18) + x6);
    var x20: u64 = undefined;
    var x21: u64 = undefined;
    mulxU64(&x20, &x21, x11, 0x4b0dff665588b13f);
    var x22: u64 = undefined;
    var x23: u64 = undefined;
    mulxU64(&x22, &x23, x20, 0xffffffffffffffff);
    var x24: u64 = undefined;
    var x25: u64 = undefined;
    mulxU64(&x24, &x25, x20, 0xfffffffffffffffe);
    var x26: u64 = undefined;
    var x27: u64 = undefined;
    mulxU64(&x26, &x27, x20, 0xbaaedce6af48a03b);
    var x28: u64 = undefined;
    var x29: u64 = undefined;
    mulxU64(&x28, &x29, x20, 0xbfd25e8cd0364141);
    var x30: u64 = undefined;
    var x31: u1 = undefined;
    addcarryxU64(&x30, &x31, 0x0, x29, x26);
    var x32: u64 = undefined;
    var x33: u1 = undefined;
    addcarryxU64(&x32, &x33, x31, x27, x24);
    var x34: u64 = undefined;
    var x35: u1 = undefined;
    addcarryxU64(&x34, &x35, x33, x25, x22);
    const x36 = (@as(u64, x35) + x23);
    var x37: u64 = undefined;
    var x38: u1 = undefined;
    addcarryxU64(&x37, &x38, 0x0, x11, x28);
    var x39: u64 = undefined;
    var x40: u1 = undefined;
    addcarryxU64(&x39, &x40, x38, x13, x30);
    var x41: u64 = undefined;
    var x42: u1 = undefined;
    addcarryxU64(&x41, &x42, x40, x15, x32);
    var x43: u64 = undefined;
    var x44: u1 = undefined;
    addcarryxU64(&x43, &x44, x42, x17, x34);
    var x45: u64 = undefined;
    var x46: u1 = undefined;
    addcarryxU64(&x45, &x46, x44, x19, x36);
    var x47: u64 = undefined;
    var x48: u64 = undefined;
    mulxU64(&x47, &x48, x1, (arg1[3]));
    var x49: u64 = undefined;
    var x50: u64 = undefined;
    mulxU64(&x49, &x50, x1, (arg1[2]));
    var x51: u64 = undefined;
    var x52: u64 = undefined;
    mulxU64(&x51, &x52, x1, (arg1[1]));
    var x53: u64 = undefined;
    var x54: u64 = undefined;
    mulxU64(&x53, &x54, x1, (arg1[0]));
    var x55: u64 = undefined;
    var x56: u1 = undefined;
    addcarryxU64(&x55, &x56, 0x0, x54, x51);
    var x57: u64 = undefined;
    var x58: u1 = undefined;
    addcarryxU64(&x57, &x58, x56, x52, x49);
    var x59: u64 = undefined;
    var x60: u1 = undefined;
    addcarryxU64(&x59, &x60, x58, x50, x47);
    const x61 = (@as(u64, x60) + x48);
    var x62: u64 = undefined;
    var x63: u1 = undefined;
    addcarryxU64(&x62, &x63, 0x0, x39, x53);
    var x64: u64 = undefined;
    var x65: u1 = undefined;
    addcarryxU64(&x64, &x65, x63, x41, x55);
    var x66: u64 = undefined;
    var x67: u1 = undefined;
    addcarryxU64(&x66, &x67, x65, x43, x57);
    var x68: u64 = undefined;
    var x69: u1 = undefined;
    addcarryxU64(&x68, &x69, x67, x45, x59);
    var x70: u64 = undefined;
    var x71: u1 = undefined;
    addcarryxU64(&x70, &x71, x69, @as(u64, x46), x61);
    var x72: u64 = undefined;
    var x73: u64 = undefined;
    mulxU64(&x72, &x73, x62, 0x4b0dff665588b13f);
    var x74: u64 = undefined;
    var x75: u64 = undefined;
    mulxU64(&x74, &x75, x72, 0xffffffffffffffff);
    var x76: u64 = undefined;
    var x77: u64 = undefined;
    mulxU64(&x76, &x77, x72, 0xfffffffffffffffe);
    var x78: u64 = undefined;
    var x79: u64 = undefined;
    mulxU64(&x78, &x79, x72, 0xbaaedce6af48a03b);
    var x80: u64 = undefined;
    var x81: u64 = undefined;
    mulxU64(&x80, &x81, x72, 0xbfd25e8cd0364141);
    var x82: u64 = undefined;
    var x83: u1 = undefined;
    addcarryxU64(&x82, &x83, 0x0, x81, x78);
    var x84: u64 = undefined;
    var x85: u1 = undefined;
    addcarryxU64(&x84, &x85, x83, x79, x76);
    var x86: u64 = undefined;
    var x87: u1 = undefined;
    addcarryxU64(&x86, &x87, x85, x77, x74);
    const x88 = (@as(u64, x87) + x75);
    var x89: u64 = undefined;
    var x90: u1 = undefined;
    addcarryxU64(&x89, &x90, 0x0, x62, x80);
    var x91: u64 = undefined;
    var x92: u1 = undefined;
    addcarryxU64(&x91, &x92, x90, x64, x82);
    var x93: u64 = undefined;
    var x94: u1 = undefined;
    addcarryxU64(&x93, &x94, x92, x66, x84);
    var x95: u64 = undefined;
    var x96: u1 = undefined;
    addcarryxU64(&x95, &x96, x94, x68, x86);
    var x97: u64 = undefined;
    var x98: u1 = undefined;
    addcarryxU64(&x97, &x98, x96, x70, x88);
    const x99 = (@as(u64, x98) + @as(u64, x71));
    var x100: u64 = undefined;
    var x101: u64 = undefined;
    mulxU64(&x100, &x101, x2, (arg1[3]));
    var x102: u64 = undefined;
    var x103: u64 = undefined;
    mulxU64(&x102, &x103, x2, (arg1[2]));
    var x104: u64 = undefined;
    var x105: u64 = undefined;
    mulxU64(&x104, &x105, x2, (arg1[1]));
    var x106: u64 = undefined;
    var x107: u64 = undefined;
    mulxU64(&x106, &x107, x2, (arg1[0]));
    var x108: u64 = undefined;
    var x109: u1 = undefined;
    addcarryxU64(&x108, &x109, 0x0, x107, x104);
    var x110: u64 = undefined;
    var x111: u1 = undefined;
    addcarryxU64(&x110, &x111, x109, x105, x102);
    var x112: u64 = undefined;
    var x113: u1 = undefined;
    addcarryxU64(&x112, &x113, x111, x103, x100);
    const x114 = (@as(u64, x113) + x101);
    var x115: u64 = undefined;
    var x116: u1 = undefined;
    addcarryxU64(&x115, &x116, 0x0, x91, x106);
    var x117: u64 = undefined;
    var x118: u1 = undefined;
    addcarryxU64(&x117, &x118, x116, x93, x108);
    var x119: u64 = undefined;
    var x120: u1 = undefined;
    addcarryxU64(&x119, &x120, x118, x95, x110);
    var x121: u64 = undefined;
    var x122: u1 = undefined;
    addcarryxU64(&x121, &x122, x120, x97, x112);
    var x123: u64 = undefined;
    var x124: u1 = undefined;
    addcarryxU64(&x123, &x124, x122, x99, x114);
    var x125: u64 = undefined;
    var x126: u64 = undefined;
    mulxU64(&x125, &x126, x115, 0x4b0dff665588b13f);
    var x127: u64 = undefined;
    var x128: u64 = undefined;
    mulxU64(&x127, &x128, x125, 0xffffffffffffffff);
    var x129: u64 = undefined;
    var x130: u64 = undefined;
    mulxU64(&x129, &x130, x125, 0xfffffffffffffffe);
    var x131: u64 = undefined;
    var x132: u64 = undefined;
    mulxU64(&x131, &x132, x125, 0xbaaedce6af48a03b);
    var x133: u64 = undefined;
    var x134: u64 = undefined;
    mulxU64(&x133, &x134, x125, 0xbfd25e8cd0364141);
    var x135: u64 = undefined;
    var x136: u1 = undefined;
    addcarryxU64(&x135, &x136, 0x0, x134, x131);
    var x137: u64 = undefined;
    var x138: u1 = undefined;
    addcarryxU64(&x137, &x138, x136, x132, x129);
    var x139: u64 = undefined;
    var x140: u1 = undefined;
    addcarryxU64(&x139, &x140, x138, x130, x127);
    const x141 = (@as(u64, x140) + x128);
    var x142: u64 = undefined;
    var x143: u1 = undefined;
    addcarryxU64(&x142, &x143, 0x0, x115, x133);
    var x144: u64 = undefined;
    var x145: u1 = undefined;
    addcarryxU64(&x144, &x145, x143, x117, x135);
    var x146: u64 = undefined;
    var x147: u1 = undefined;
    addcarryxU64(&x146, &x147, x145, x119, x137);
    var x148: u64 = undefined;
    var x149: u1 = undefined;
    addcarryxU64(&x148, &x149, x147, x121, x139);
    var x150: u64 = undefined;
    var x151: u1 = undefined;
    addcarryxU64(&x150, &x151, x149, x123, x141);
    const x152 = (@as(u64, x151) + @as(u64, x124));
    var x153: u64 = undefined;
    var x154: u64 = undefined;
    mulxU64(&x153, &x154, x3, (arg1[3]));
    var x155: u64 = undefined;
    var x156: u64 = undefined;
    mulxU64(&x155, &x156, x3, (arg1[2]));
    var x157: u64 = undefined;
    var x158: u64 = undefined;
    mulxU64(&x157, &x158, x3, (arg1[1]));
    var x159: u64 = undefined;
    var x160: u64 = undefined;
    mulxU64(&x159, &x160, x3, (arg1[0]));
    var x161: u64 = undefined;
    var x162: u1 = undefined;
    addcarryxU64(&x161, &x162, 0x0, x160, x157);
    var x163: u64 = undefined;
    var x164: u1 = undefined;
    addcarryxU64(&x163, &x164, x162, x158, x155);
    var x165: u64 = undefined;
    var x166: u1 = undefined;
    addcarryxU64(&x165, &x166, x164, x156, x153);
    const x167 = (@as(u64, x166) + x154);
    var x168: u64 = undefined;
    var x169: u1 = undefined;
    addcarryxU64(&x168, &x169, 0x0, x144, x159);
    var x170: u64 = undefined;
    var x171: u1 = undefined;
    addcarryxU64(&x170, &x171, x169, x146, x161);
    var x172: u64 = undefined;
    var x173: u1 = undefined;
    addcarryxU64(&x172, &x173, x171, x148, x163);
    var x174: u64 = undefined;
    var x175: u1 = undefined;
    addcarryxU64(&x174, &x175, x173, x150, x165);
    var x176: u64 = undefined;
    var x177: u1 = undefined;
    addcarryxU64(&x176, &x177, x175, x152, x167);
    var x178: u64 = undefined;
    var x179: u64 = undefined;
    mulxU64(&x178, &x179, x168, 0x4b0dff665588b13f);
    var x180: u64 = undefined;
    var x181: u64 = undefined;
    mulxU64(&x180, &x181, x178, 0xffffffffffffffff);
    var x182: u64 = undefined;
    var x183: u64 = undefined;
    mulxU64(&x182, &x183, x178, 0xfffffffffffffffe);
    var x184: u64 = undefined;
    var x185: u64 = undefined;
    mulxU64(&x184, &x185, x178, 0xbaaedce6af48a03b);
    var x186: u64 = undefined;
    var x187: u64 = undefined;
    mulxU64(&x186, &x187, x178, 0xbfd25e8cd0364141);
    var x188: u64 = undefined;
    var x189: u1 = undefined;
    addcarryxU64(&x188, &x189, 0x0, x187, x184);
    var x190: u64 = undefined;
    var x191: u1 = undefined;
    addcarryxU64(&x190, &x191, x189, x185, x182);
    var x192: u64 = undefined;
    var x193: u1 = undefined;
    addcarryxU64(&x192, &x193, x191, x183, x180);
    const x194 = (@as(u64, x193) + x181);
    var x195: u64 = undefined;
    var x196: u1 = undefined;
    addcarryxU64(&x195, &x196, 0x0, x168, x186);
    var x197: u64 = undefined;
    var x198: u1 = undefined;
    addcarryxU64(&x197, &x198, x196, x170, x188);
    var x199: u64 = undefined;
    var x200: u1 = undefined;
    addcarryxU64(&x199, &x200, x198, x172, x190);
    var x201: u64 = undefined;
    var x202: u1 = undefined;
    addcarryxU64(&x201, &x202, x200, x174, x192);
    var x203: u64 = undefined;
    var x204: u1 = undefined;
    addcarryxU64(&x203, &x204, x202, x176, x194);
    const x205 = (@as(u64, x204) + @as(u64, x177));
    var x206: u64 = undefined;
    var x207: u1 = undefined;
    subborrowxU64(&x206, &x207, 0x0, x197, 0xbfd25e8cd0364141);
    var x208: u64 = undefined;
    var x209: u1 = undefined;
    subborrowxU64(&x208, &x209, x207, x199, 0xbaaedce6af48a03b);
    var x210: u64 = undefined;
    var x211: u1 = undefined;
    subborrowxU64(&x210, &x211, x209, x201, 0xfffffffffffffffe);
    var x212: u64 = undefined;
    var x213: u1 = undefined;
    subborrowxU64(&x212, &x213, x211, x203, 0xffffffffffffffff);
    var x214: u64 = undefined;
    var x215: u1 = undefined;
    subborrowxU64(&x214, &x215, x213, x205, 0x0);
    var x216: u64 = undefined;
    cmovznzU64(&x216, x215, x206, x197);
    var x217: u64 = undefined;
    cmovznzU64(&x217, x215, x208, x199);
    var x218: u64 = undefined;
    cmovznzU64(&x218, x215, x210, x201);
    var x219: u64 = undefined;
    cmovznzU64(&x219, x215, x212, x203);
    out1[0] = x216;
    out1[1] = x217;
    out1[2] = x218;
    out1[3] = x219;
}