fp_mul_comba_3.i 827 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifdef TFM_MUL3
  2. void fp_mul_comba3(fp_int *A, fp_int *B, fp_int *C)
  3. {
  4. fp_digit c0, c1, c2, at[6];
  5. memcpy(at, A->dp, 3 * sizeof(fp_digit));
  6. memcpy(at+3, B->dp, 3 * sizeof(fp_digit));
  7. COMBA_START;
  8. COMBA_CLEAR;
  9. /* 0 */
  10. MULADD(at[0], at[3]);
  11. COMBA_STORE(C->dp[0]);
  12. /* 1 */
  13. COMBA_FORWARD;
  14. MULADD(at[0], at[4]); MULADD(at[1], at[3]);
  15. COMBA_STORE(C->dp[1]);
  16. /* 2 */
  17. COMBA_FORWARD;
  18. MULADD(at[0], at[5]); MULADD(at[1], at[4]); MULADD(at[2], at[3]);
  19. COMBA_STORE(C->dp[2]);
  20. /* 3 */
  21. COMBA_FORWARD;
  22. MULADD(at[1], at[5]); MULADD(at[2], at[4]);
  23. COMBA_STORE(C->dp[3]);
  24. /* 4 */
  25. COMBA_FORWARD;
  26. MULADD(at[2], at[5]);
  27. COMBA_STORE(C->dp[4]);
  28. COMBA_STORE2(C->dp[5]);
  29. C->used = 6;
  30. C->sign = A->sign ^ B->sign;
  31. fp_clamp(C);
  32. COMBA_FINI;
  33. }
  34. #endif