fp_sqr_comba_3.i 745 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #ifdef TFM_SQR3
  2. void fp_sqr_comba3(fp_int *A, fp_int *B)
  3. {
  4. fp_digit *a, b[6], c0, c1, c2, sc0, sc1, sc2;
  5. a = A->dp;
  6. COMBA_START;
  7. /* clear carries */
  8. CLEAR_CARRY;
  9. /* output 0 */
  10. SQRADD(a[0],a[0]);
  11. COMBA_STORE(b[0]);
  12. /* output 1 */
  13. CARRY_FORWARD;
  14. SQRADD2(a[0], a[1]);
  15. COMBA_STORE(b[1]);
  16. /* output 2 */
  17. CARRY_FORWARD;
  18. SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]);
  19. COMBA_STORE(b[2]);
  20. /* output 3 */
  21. CARRY_FORWARD;
  22. SQRADD2(a[1], a[2]);
  23. COMBA_STORE(b[3]);
  24. /* output 4 */
  25. CARRY_FORWARD;
  26. SQRADD(a[2], a[2]);
  27. COMBA_STORE(b[4]);
  28. COMBA_STORE2(b[5]);
  29. COMBA_FINI;
  30. B->used = 6;
  31. B->sign = FP_ZPOS;
  32. memcpy(B->dp, b, 6 * sizeof(fp_digit));
  33. fp_clamp(B);
  34. }
  35. #endif