| 1491 | } |
| 1492 | |
| 1493 | txBigInt *fxBigInt_usub(txMachine* the, txBigInt *rr, txBigInt *aa, txBigInt *bb) |
| 1494 | { |
| 1495 | int i, n; |
| 1496 | txU4 a, b, r, t; |
| 1497 | txU4 *ap, *bp, *rp; |
| 1498 | txU4 c = 0; |
| 1499 | |
| 1500 | if (rr == NULL) |
| 1501 | rr = fxBigInt_alloc(the, MAX(aa->size, bb->size)); |
| 1502 | rr->sign = (aa->size < bb->size || |
| 1503 | (aa->size == bb->size && fxBigInt_ucomp(aa, bb) < 0)); |
| 1504 | if (rr->sign) { |
| 1505 | txBigInt *tt = aa; |
| 1506 | aa = bb; |
| 1507 | bb = tt; |
| 1508 | } |
| 1509 | ap = aa->data; |
| 1510 | bp = bb->data; |
| 1511 | rp = rr->data; |
| 1512 | n = MIN(aa->size, bb->size); |
| 1513 | for (i = 0; i < n; i++) { |
| 1514 | a = ap[i]; |
| 1515 | b = bp[i]; |
| 1516 | t = a - b; |
| 1517 | r = t - c; |
| 1518 | rp[i] = r; |
| 1519 | c = a < b || r > t; |
| 1520 | } |
| 1521 | if (aa->size >= bb->size) { |
| 1522 | n = aa->size; |
| 1523 | for (; i < n; i++) { |
| 1524 | t = ap[i]; |
| 1525 | r = t - c; |
| 1526 | rp[i] = r; |
| 1527 | c = r > t; |
| 1528 | } |
| 1529 | } |
| 1530 | else { |
| 1531 | n = bb->size; |
| 1532 | for (; i < n; i++) { |
| 1533 | t = 0 - bp[i]; |
| 1534 | r = t - c; |
| 1535 | rp[i] = r; |
| 1536 | c = r > t; |
| 1537 | } |
| 1538 | } |
| 1539 | /* remove leading 0s */ |
| 1540 | while (--i > 0 && rp[i] == 0) |
| 1541 | ; |
| 1542 | rr->size = i + 1; |
| 1543 | return(rr); |
| 1544 | } |
| 1545 | |
| 1546 | txBigInt *fxBigInt_mul(txMachine* the, txBigInt *rr, txBigInt *aa, txBigInt *bb) |
| 1547 | { |
no test coverage detected