INNER CODE UNIT · C
inf
StrobeLabs/eth.zig · src/crypto/blst/src/bulk_addition.c:92
limb_t inf = vec_is_zero(B->Z, sizeof(B->Z)); \
\
mul_##field(lambda, lambda, B->Y); /* λ = (Y2-Y1)/(X2-X1) */ \
/* alt. 3*X1^2/2*Y1 */ \
sqr_##field(llambda, lambda); \
sub_##field(D->X, llambda, B->X); /* X3 = λ^2-X1-X2 */ \
\
sub_##field(D->Y, A->X, D->X); \
mul_##field(D->Y, D->Y, lambda); \
sub_##field(D->Y, D->Y, A->Y); /* Y3 = λ*(X1-X3)-Y1 */ \
\
vec_select(D->X, A->X, D->X, 2*sizeof(D->X), inf); \
vec_select(B->Z, one, B->Z, sizeof(B->Z), inf); \
}
/*
* |points[]| is volatile buffer with |X|s and |Y|s initially holding
* input affine coordinates, and with |Z|s being used as additional