Ri
BIGNUM *Ri, *R;
if ((Ri = BN_CTX_get(ctx)) == NULL)
BN_zero(Ri);
else if ((BN_mod_inverse(Ri, R, &tmod, ctx)) == NULL)
if (!BN_lshift(Ri, Ri, 2 * BN_BITS2))
if (!BN_is_zero(Ri)) {
if (!BN_sub_word(Ri, 1))
if (bn_expand(Ri, (int)sizeof(BN_ULONG) * 2) == NULL)
Ri->neg = 0;
Ri->d[0] = BN_MASK2;
Ri->d[1] = BN_MASK2;
Ri->top = 2;
if (!BN_div(Ri, NULL, Ri, &tmod, ctx))
mont->n0[0] = (Ri->top > 0) ? Ri->d[0] : 0;
mont->n0[1] = (Ri->top > 1) ? Ri->d[1] : 0;
BN_zero(Ri);
else if ((BN_mod_inverse(Ri, R, &tmod, ctx)) == NULL)
if (!BN_lshift(Ri, Ri, BN_BITS2))
if (!BN_is_zero(Ri)) {
if (!BN_sub_word(Ri, 1))
if (!BN_set_word(Ri, BN_MASK2))
if (!BN_div(Ri, NULL, Ri, &tmod, ctx))
mont->n0[0] = (Ri->top > 0) ? Ri->d[0] : 0;
if ((BN_mod_inverse(Ri, R, &mont->N, ctx)) == NULL)
if (!BN_lshift(Ri, Ri, mont->ri))
if (!BN_sub_word(Ri, 1))
if (!BN_div(&(mont->Ni), NULL, Ri, &mont->N, ctx))
case Ri:
/*50*/ { "push", false, LONG, op1(Ri), 0 },
/*51*/ { "push", false, LONG, op1(Ri), 0 },
/*52*/ { "push", false, LONG, op1(Ri), 0 },
/*53*/ { "push", false, LONG, op1(Ri), 0 },
/*54*/ { "push", false, LONG, op1(Ri), 0 },
/*55*/ { "push", false, LONG, op1(Ri), 0 },
/*56*/ { "push", false, LONG, op1(Ri), 0 },
/*57*/ { "push", false, LONG, op1(Ri), 0 },
/*58*/ { "pop", false, LONG, op1(Ri), 0 },
/*59*/ { "pop", false, LONG, op1(Ri), 0 },
/*5a*/ { "pop", false, LONG, op1(Ri), 0 },
/*5b*/ { "pop", false, LONG, op1(Ri), 0 },
/*5c*/ { "pop", false, LONG, op1(Ri), 0 },
/*5d*/ { "pop", false, LONG, op1(Ri), 0 },
/*5e*/ { "pop", false, LONG, op1(Ri), 0 },
/*5f*/ { "pop", false, LONG, op1(Ri), 0 },
/*91*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*92*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*93*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*94*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*95*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*96*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*97*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*b0*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b1*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b2*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b3*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b4*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b5*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b6*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b7*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b8*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
/*b9*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
/*ba*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
/*bb*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
/*bc*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
/*bd*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
/*be*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
/*bf*/ { "mov", false, LONG, op2(Ilq, Ri), 0 },
case Ri:
/*40*/ { "inc", false, LONG, op1(Ri), 0 },
/*41*/ { "inc", false, LONG, op1(Ri), 0 },
/*42*/ { "inc", false, LONG, op1(Ri), 0 },
/*43*/ { "inc", false, LONG, op1(Ri), 0 },
/*44*/ { "inc", false, LONG, op1(Ri), 0 },
/*45*/ { "inc", false, LONG, op1(Ri), 0 },
/*46*/ { "inc", false, LONG, op1(Ri), 0 },
/*47*/ { "inc", false, LONG, op1(Ri), 0 },
/*48*/ { "dec", false, LONG, op1(Ri), 0 },
/*49*/ { "dec", false, LONG, op1(Ri), 0 },
/*4a*/ { "dec", false, LONG, op1(Ri), 0 },
/*4b*/ { "dec", false, LONG, op1(Ri), 0 },
/*4c*/ { "dec", false, LONG, op1(Ri), 0 },
/*4d*/ { "dec", false, LONG, op1(Ri), 0 },
/*4e*/ { "dec", false, LONG, op1(Ri), 0 },
/*4f*/ { "dec", false, LONG, op1(Ri), 0 },
/*50*/ { "push", false, LONG, op1(Ri), 0 },
/*51*/ { "push", false, LONG, op1(Ri), 0 },
/*52*/ { "push", false, LONG, op1(Ri), 0 },
/*53*/ { "push", false, LONG, op1(Ri), 0 },
/*54*/ { "push", false, LONG, op1(Ri), 0 },
/*55*/ { "push", false, LONG, op1(Ri), 0 },
/*56*/ { "push", false, LONG, op1(Ri), 0 },
/*57*/ { "push", false, LONG, op1(Ri), 0 },
/*58*/ { "pop", false, LONG, op1(Ri), 0 },
/*59*/ { "pop", false, LONG, op1(Ri), 0 },
/*5a*/ { "pop", false, LONG, op1(Ri), 0 },
/*5b*/ { "pop", false, LONG, op1(Ri), 0 },
/*5c*/ { "pop", false, LONG, op1(Ri), 0 },
/*5d*/ { "pop", false, LONG, op1(Ri), 0 },
/*5e*/ { "pop", false, LONG, op1(Ri), 0 },
/*5f*/ { "pop", false, LONG, op1(Ri), 0 },
/*91*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*92*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*93*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*94*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*95*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*96*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*97*/ { "xchg", false, LONG, op2(A, Ri), 0 },
/*b0*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b1*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b2*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b3*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b4*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b5*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b6*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b7*/ { "mov", false, BYTE, op2(I, Ri), 0 },
/*b8*/ { "mov", false, LONG, op2(I, Ri), 0 },
/*b9*/ { "mov", false, LONG, op2(I, Ri), 0 },
/*ba*/ { "mov", false, LONG, op2(I, Ri), 0 },
/*bb*/ { "mov", false, LONG, op2(I, Ri), 0 },
/*bc*/ { "mov", false, LONG, op2(I, Ri), 0 },
/*bd*/ { "mov", false, LONG, op2(I, Ri), 0 },
/*be*/ { "mov", false, LONG, op2(I, Ri), 0 },
/*bf*/ { "mov", false, LONG, op2(I, Ri), 0 },