MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / xsum_large_addv

Function xsum_large_addv

xs/sources/xsum.c:1485–1632  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1483/* ADD A VECTOR OF FLOATING-POINT NUMBERS TO A LARGE ACCUMULATOR. */
1484
1485void xsum_large_addv (xsum_large_accumulator *restrict lacc,
1486 const xsum_flt *restrict vec,
1487 xsum_length n)
1488{
1489 if (xsum_debug) c_printf("\nLARGE ADDV OF %ld VALUES\n",(long)n);
1490
1491# if OPT_LARGE_SUM
1492 {
1493 xsum_lcount count;
1494 xsum_expint ix;
1495 xsum_uint uintv;
1496
1497 while (n > 3)
1498 {
1499 COPY64 (uintv, *vec);
1500 vec += 1;
1501
1502 ix = uintv >> XSUM_MANTISSA_BITS;
1503
1504 count = lacc->count[ix] - 1;
1505
1506 if (count < 0)
1507 { xsum_large_add_value_inf_nan (lacc, ix, uintv);
1508 }
1509 else
1510 { lacc->count[ix] = count;
1511 lacc->chunk[ix] += uintv;
1512 }
1513
1514 COPY64 (uintv, *vec);
1515 vec += 1;
1516
1517 ix = uintv >> XSUM_MANTISSA_BITS;
1518
1519 count = lacc->count[ix] - 1;
1520
1521 if (count < 0)
1522 { xsum_large_add_value_inf_nan (lacc, ix, uintv);
1523 }
1524 else
1525 { lacc->count[ix] = count;
1526 lacc->chunk[ix] += uintv;
1527 }
1528
1529 COPY64 (uintv, *vec);
1530 vec += 1;
1531
1532 ix = uintv >> XSUM_MANTISSA_BITS;
1533
1534 count = lacc->count[ix] - 1;
1535
1536 if (count < 0)
1537 { xsum_large_add_value_inf_nan (lacc, ix, uintv);
1538 }
1539 else
1540 { lacc->count[ix] = count;
1541 lacc->chunk[ix] += uintv;
1542 }

Callers 1

xsum_large_add1Function · 0.85

Calls 1

Tested by

no test coverage detected