w = (DIGIT(b, ix) * DIGIT(a, jx)) + k + DIGIT(&tmp, ix+jx);
w = ((mp_word)DIGIT(b, ix) * DIGIT(a, jx)) + k + DIGIT(&tmp, ix+jx);
mp_err   s_mp_mul(mp_int *a, mp_int *b){  mp_word w, k = 0;  mp_int  tmp;  mp_err  res;  mp_size ix, jx;  if((res = mp_init_size(&tmp, USED(a) + USED(b))) != MP_OKAY)    return res;  /* This has the effect of left-padding with zeroes... */  USED(&tmp) = USED(a) + USED(b);  /* Outer loop:  Digits of b */  for(ix = 0; ix < USED(b); ix++) {    if(DIGIT(b, ix) == 0)      continue;    /* Inner product:  Digits of a */    for(jx = 0; jx < USED(a); jx++) {      w = (DIGIT(b, ix) * DIGIT(a, jx)) + k + DIGIT(&tmp, ix+jx);      DIGIT(&tmp, ix+jx) = ACCUM(w);      k = CARRYOUT(w);    }    DIGIT(&tmp, ix+jx) = k;    k = 0;  }  s_mp_clamp(&tmp);  s_mp_exch(&tmp, a);  mp_clear(&tmp);  return MP_OKAY;} /* end s_mp_mul() */