FK20 CUDA
fr_add.cuh
Go to the documentation of this file.
1 // bls12_381: Arithmetic for BLS12-381
2 // Copyright 2022-2023 Dag Arne Osvik
3 // Copyright 2022-2023 Luan Cardoso dos Santos
4 
14 #define FR_ADD(Z, X, Y) \
15  /* z = x + y */ \
16  \
17  "\n\tadd.u64.cc "#Z"0, "#X"0, "#Y"0;" \
18  "\n\taddc.u64.cc "#Z"1, "#X"1, "#Y"1;" \
19  "\n\taddc.u64.cc "#Z"2, "#X"2, "#Y"2;" \
20  "\n\taddc.u64.cc "#Z"3, "#X"3, "#Y"3;" \
21  "\n\taddc.u32 t4, 0, 0;" \
22  \
23  /* if z >= 2^256 then z -= rmmu0 */ \
24  \
25  "\n\tsetp.ne.u32 nz, t4, 0;" \
26  "\n@nz\tsub.u64.cc "#Z"0, "#Z"0, 0xFFFFFFFE00000002U;" \
27  "\n@nz\tsubc.u64.cc "#Z"1, "#Z"1, 0xA77B4805FFFCB7FDU;" \
28  "\n@nz\tsubc.u64.cc "#Z"2, "#Z"2, 0x6673B0101343B00AU;" \
29  "\n@nz\tsubc.u64.cc "#Z"3, "#Z"3, 0xE7DB4EA6533AFA90U;" \
30  "\n@nz\tsubc.u32 t4, t4, 0;" \
31  \
32  /* if z >= 2^256 then z -= rmmu0 */ \
33  \
34  "\n\tsetp.ne.u32 nz, t4, 0;" \
35  "\n@nz\tsub.u64.cc "#Z"0, "#Z"0, 0xFFFFFFFE00000002U;" \
36  "\n@nz\tsubc.u64.cc "#Z"1, "#Z"1, 0xA77B4805FFFCB7FDU;" \
37  "\n@nz\tsubc.u64.cc "#Z"2, "#Z"2, 0x6673B0101343B00AU;" \
38  "\n@nz\tsubc.u64.cc "#Z"3, "#Z"3, 0xE7DB4EA6533AFA90U;"
39