FK20 CUDA
fp_sub.cu
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 
5 #include "fp.cuh"
6 #include "fp_sub.cuh"
7 
16 __device__ void fp_sub(fp_t &z, const fp_t &x, const fp_t &y) {
17  uint64_t
18  x0 = x[0], y0 = y[0], z0,
19  x1 = x[1], y1 = y[1], z1,
20  x2 = x[2], y2 = y[2], z2,
21  x3 = x[3], y3 = y[3], z3,
22  x4 = x[4], y4 = y[4], z4,
23  x5 = x[5], y5 = y[5], z5;
24 
25  asm volatile (
26  "\n\t{"
27  "\n\t.reg .u64 z<6>, x<6>, y<6>;"
28  "\n\t.reg .u32 z6;"
29  "\n\t.reg .pred gt, nz;"
30 
31  "\n\tmov.u64 x0, %6;"
32  "\n\tmov.u64 x1, %7;"
33  "\n\tmov.u64 x2, %8;"
34  "\n\tmov.u64 x3, %9;"
35  "\n\tmov.u64 x4, %10;"
36  "\n\tmov.u64 x5, %11;"
37 
38  "\n\tmov.u64 y0, %12;"
39  "\n\tmov.u64 y1, %13;"
40  "\n\tmov.u64 y2, %14;"
41  "\n\tmov.u64 y3, %15;"
42  "\n\tmov.u64 y4, %16;"
43  "\n\tmov.u64 y5, %17;"
44 
45 FP_SUB(z, x, y)
46 
47  "\n\tmov.u64 %0, z0;"
48  "\n\tmov.u64 %1, z1;"
49  "\n\tmov.u64 %2, z2;"
50  "\n\tmov.u64 %3, z3;"
51  "\n\tmov.u64 %4, z4;"
52  "\n\tmov.u64 %5, z5;"
53 
54  "\n\t}"
55  :
56  "=l"(z0), "=l"(z1), "=l"(z2), "=l"(z3), "=l"(z4), "=l"(z5)
57  :
58  "l"(x0), "l"(x1), "l"(x2), "l"(x3), "l"(x4), "l"(x5),
59  "l"(y0), "l"(y1), "l"(y2), "l"(y3), "l"(y4), "l"(y5)
60  );
61 
62  z[0] = z0, z[1] = z1, z[2] = z2, z[3] = z3, z[4] = z4, z[5] = z5;
63 }
64 
65 // vim: ts=4 et sw=4 si
uint64_t fp_t[6]
Residue modulo p. Any 384-bit representative of each residue is allowed, and stored as a 6-element li...
Definition: fp.cuh:14
__device__ void fp_sub(fp_t &z, const fp_t &x, const fp_t &y)
Calculates the difference of two residues modulo p and stores it into z.
Definition: fp_sub.cu:16
#define FP_SUB(Z, X, Y)
PTX macro for calculating de difference of two residues modulo p, Z = X-Y.
Definition: fp_sub.cuh:12