Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
macro_scrapbook.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7// #define SQR(a) \
8// "movq 0(" a "), %%rdx \n\t" /* load a[0] into %rdx */ \
9// \
10// "xorq %%r8, %%r8 \n\t" /* clear flags */ \
11// /* compute a[0] *a[1], a[0]*a[2], a[0]*a[3], a[1]*a[2], a[1]*a[3], a[2]*a[3] */ \
12// "mulxq %%rdx, %%r8, %%r12 \n\t" \
13// "mulxq 8(" a "), %%r9, %%r13 \n\t" /* (r[1], r[2]) <- a[0] * a[1] */ \
14// "mulxq 16(" a "), %%r10, %%r14 \n\t" /* (t[1], t[2]) <- a[0] * a[2] */ \
15// "mulxq 24(" a "), %%r11, %%r15 \n\t" /* (r[3], r[4]) <- a[0] * a[3] */ \
16// "adcxq %%r9, %%r9 \n\t" \
17// "adoxq %%r12, %%r9 \n\t" \
18// "adcxq %%r13, %%r10 \n\t" \
19// "adoxq %%r10, %%r10 \n\t" \
20// "adcxq %%r14, %%r11 \n\t" \
21// "adoxq %%r11, %%r11 \n\t" \
22// "adcxq %[zero_reference], %%r15 \n\t" \
23// "adoxq %%r15, %%r15 \n\t" \
24// /* perform modular reduction: r[0] */ \
25// "movq %%r8, %%rdx \n\t" /* move r8 into %rdx */ \
26// "mulxq %[r_inv], %%rdx, %%rdi \n\t" /* (%rdx, _) <- k = r[9] * r_inv */ \
27// "mulxq %[modulus_0], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[0] * k) */ \
28// "adcxq %%rdi, %%r8 \n\t" /* r[0] += t[0] (%r8 now free) */ \
29// "adoxq %%rcx, %%r9 \n\t" /* r[1] += t[1] + flag_c */ \
30// "mulxq %[modulus_1], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[1] * k) */ \
31// "adcxq %%rdi, %%r9 \n\t" /* r[1] += t[2] */ \
32// "adoxq %%rcx, %%r10 \n\t" /* r[2] += t[3] + flag_o */ \
33// "mulxq %[modulus_2], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[3] * k) */ \
34// "adcxq %%rdi, %%r10 \n\t" /* r[2] += t[0] + flag_c */ \
35// "adoxq %%rcx, %%r11 \n\t" /* r[3] += t[1] + flag_o */ \
36// "mulxq %[modulus_3], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[2] * k) */ \
37// "adcxq %%rdi, %%r11 \n\t" /* r[3] += t[2] + flag_c */ \
38// "adoxq %%rcx, %%r15 \n\t" /* t[4] += t[3] + flag_o */ \
39// "adcxq %[zero_reference], %%r15 \n\t" /* t[4] += flag_c */ \
40// \
41// "movq %%r15, %%r12 \n\t" \
42// "movq 8(" a "), %%rdx \n\t" /* load a[0] into %rdx */ \
43// "mulxq %%rdx, %%r8, %%r15 \n\t" \
44// "mulxq 16(" a "), %%r13, %%r14 \n\t" /* (t[1], t[2]) <- a[0] * a[2] */ \
45// "mulxq 24(" a "), %%rdi, %%rdx \n\t" /* (r[3], r[4]) <- a[0] * a[3] */ \
46// "adcxq %%r13, %%r13 \n\t" \
47// "adoxq %%r15, %%r13 \n\t" \
48// "adcxq %%r14, %%rdi \n\t" \
49// "adoxq %%rdi, %%rdi \n\t" \
50// "adcxq %[zero_reference], %%rdx \n\t" \
51// "adoxq %%rdx, %%rdx \n\t" \
52// \
53// "adcxq %%r8, %%r10 \n\t" \
54// "adcxq %%r13, %%r11 \n\t" \
55// "adcxq %%rdi, %%r12 \n\t" \
56// "adcxq %[zero_reference], %%rdx \n\t" \
57// "movq %%rdx, %%r15 \n\t" \
58// \
59// "movq %%r9, %%rdx \n\t" /* move r8 into %rdx */ \
60// "mulxq %[r_inv], %%rdx, %%rdi \n\t" /* (%rdx, _) <- k = r[9] * r_inv */ \
61// "mulxq %[modulus_0], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[0] * k) */ \
62// "adcxq %%rdi, %%r9 \n\t" /* r[0] += t[0] (%r8 now free) */ \
63// "adoxq %%rcx, %%r10 \n\t" /* r[1] += t[1] + flag_c */ \
64// "mulxq %[modulus_1], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[1] * k) */ \
65// "adcxq %%rdi, %%r10 \n\t" /* r[1] += t[2] */ \
66// "adoxq %%rcx, %%r11 \n\t" /* r[2] += t[3] + flag_o */ \
67// "mulxq %[modulus_2], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[3] * k) */ \
68// "adcxq %%rdi, %%r11 \n\t" /* r[2] += t[0] + flag_c */ \
69// "adoxq %%rcx, %%r12 \n\t" /* r[3] += t[1] + flag_o */ \
70// "mulxq %[modulus_3], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[2] * k) */ \
71// "adcxq %%rdi, %%r12 \n\t" /* r[3] += t[2] + flag_c */ \
72// "adoxq %%rcx, %%r15 \n\t" /* t[4] += t[3] + flag_o */ \
73// "adcxq %[zero_reference], %%r15 \n\t" /* t[4] += flag_c */ \
74// "movq %%r15, %%r13 \n\t" \
75// \
76// "movq 16(" a "), %%rdx \n\t" \
77// "mulxq %%rdx, %%r8, %%r9 \n\t" \
78// "mulxq 24(" a "), %%r14, %%r15 \n\t" \
79// "adcxq %%r14, %%r14 \n\t" \
80// "adoxq %%r9, %%r14 \n\t" \
81// "adcxq %%r15, %%r15 \n\t" \
82// "adoxq %[zero_reference], %%r15 \n\t" \
83// "adcxq %%r8, %%r12 \n\t" \
84// "adcxq %%r14, %%r13 \n\t" \
85// "adcxq %[zero_reference], %%r15 \n\t" \
86// "movq %%r10, %%rdx \n\t" /* move r8 into %rdx */ \
87// "mulxq %[r_inv], %%rdx, %%rdi \n\t" /* (%rdx, _) <- k = r[9] * r_inv */ \
88// "mulxq %[modulus_0], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[0] * k) */ \
89// "adcxq %%rdi, %%r10 \n\t" /* r[0] += t[0] (%r8 now free) */ \
90// "adoxq %%rcx, %%r11 \n\t" /* r[1] += t[1] + flag_c */ \
91// "mulxq %[modulus_1], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[1] * k) */ \
92// "adcxq %%rdi, %%r11 \n\t" /* r[1] += t[2] */ \
93// "adoxq %%rcx, %%r12 \n\t" /* r[2] += t[3] + flag_o */ \
94// "mulxq %[modulus_2], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[3] * k) */ \
95// "adcxq %%rdi, %%r12 \n\t" /* r[2] += t[0] + flag_c */ \
96// "adoxq %%rcx, %%r13 \n\t" /* r[3] += t[1] + flag_o */ \
97// "mulxq %[modulus_3], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[2] * k) */ \
98// "adcxq %%rdi, %%r13 \n\t" /* r[3] += t[2] + flag_c */ \
99// "adoxq %%rcx, %%r15 \n\t" /* t[4] += t[3] + flag_o */ \
100// "adcxq %[zero_reference], %%r15 \n\t" /* t[4] += flag_c */ \
101// "movq %%r15, %%r14 \n\t" \
102// \
103// "movq 24(" a "), %%rdx \n\t " \
104// "mulxq %%rdx, %%r8, %%r15 \n\t" \
105// "adcxq %%r8, %%r14 \n\t" \
106// "adcxq %[zero_reference], %%r15 \n\t" \
107// "movq %%r11, %%rdx \n\t" /* move r8 into %rdx */ \
108// "mulxq %[r_inv], %%rdx, %%rdi \n\t" /* (%rdx, _) <- k = r[9] * r_inv */ \
109// "mulxq %[modulus_0], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[0] * k) */ \
110// "adcxq %%rdi, %%r11 \n\t" /* r[0] += t[0] (%r8 now free) */ \
111// "adoxq %%rcx, %%r12 \n\t" /* r[1] += t[1] + flag_c */ \
112// "mulxq %[modulus_1], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[1] * k) */ \
113// "adcxq %%rdi, %%r12 \n\t" /* r[1] += t[2] */ \
114// "adoxq %%rcx, %%r13 \n\t" /* r[2] += t[3] + flag_o */ \
115// "mulxq %[modulus_2], %%rdi, %%rcx \n\t" /* (t[0], t[1]) <- (modulus[3] * k) */ \
116// "adcxq %%rdi, %%r13 \n\t" /* r[2] += t[0] + flag_c */ \
117// "adoxq %%rcx, %%r14 \n\t" /* r[3] += t[1] + flag_o */ \
118// "mulxq %[modulus_3], %%rdi, %%rcx \n\t" /* (t[2], t[3]) <- (modulus[2] * k) */ \
119// "adcxq %%rdi, %%r14 \n\t" /* r[3] += t[2] + flag_c */ \
120// "adoxq %%rcx, %%r15 \n\t" /* t[4] += t[3] + flag_o */ \
121// "adcxq %[zero_reference], %%r15 \n\t" /* t[4] += flag_c */