FK20 CUDA
fr_sub.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 
10 #define FR_SUB(Z, X, Y) \
11  /* z = x - y */ \
12  \
13  "\n\tsub.u64.cc "#Z"0, "#X"0, "#Y"0;" \
14  "\n\tsubc.u64.cc "#Z"1, "#X"1, "#Y"1;" \
15  "\n\tsubc.u64.cc "#Z"2, "#X"2, "#Y"2;" \
16  "\n\tsubc.u64.cc "#Z"3, "#X"3, "#Y"3;" \
17  "\n\tsubc.u32 t4, 0, 0;" \
18  \
19  /* if z < 0 then z += rmmu0 */ \
20  \
21  "\n\tsetp.ne.u32 nz, t4, 0;" \
22  "\n@nz\tadd.u64.cc "#Z"0, "#Z"0, 0xFFFFFFFE00000002U;" \
23  "\n@nz\taddc.u64.cc "#Z"1, "#Z"1, 0xA77B4805FFFCB7FDU;" \
24  "\n@nz\taddc.u64.cc "#Z"2, "#Z"2, 0x6673B0101343B00AU;" \
25  "\n@nz\taddc.u64.cc "#Z"3, "#Z"3, 0xE7DB4EA6533AFA90U;" \
26  "\n@nz\taddc.u32 t4, t4, 0;" \
27  \
28  /* if z < 0 then z += rmmu0 */ \
29  \
30  "\n\tsetp.ne.u32 nz, t4, 0;" \
31  "\n@nz\tadd.u64.cc "#Z"0, "#Z"0, 0xFFFFFFFE00000002U;" \
32  "\n@nz\taddc.u64.cc "#Z"1, "#Z"1, 0xA77B4805FFFCB7FDU;" \
33  "\n@nz\taddc.u64.cc "#Z"2, "#Z"2, 0x6673B0101343B00AU;" \
34  "\n@nz\taddc.u64.cc "#Z"3, "#Z"3, 0xE7DB4EA6533AFA90U;" \
35