| 1073 | number. Source and destination may be the same. */ |
| 1074 | |
| 1075 | void xsum_small_add_accumulator (xsum_small_accumulator *dst_sacc, |
| 1076 | xsum_small_accumulator *src_sacc) |
| 1077 | { |
| 1078 | int i; |
| 1079 | |
| 1080 | if (xsum_debug) c_printf("\nADDING ACCUMULATOR TO A SMALL ACCUMULATOR\n"); |
| 1081 | |
| 1082 | xsum_carry_propagate (dst_sacc); |
| 1083 | |
| 1084 | if (dst_sacc == src_sacc) |
| 1085 | { for (i = 0; i < XSUM_SCHUNKS; i++) |
| 1086 | { dst_sacc->chunk[i] += dst_sacc->chunk[i]; |
| 1087 | } |
| 1088 | } |
| 1089 | else |
| 1090 | { |
| 1091 | xsum_carry_propagate (src_sacc); |
| 1092 | |
| 1093 | if (src_sacc->Inf) xsum_small_add_inf_nan (dst_sacc, src_sacc->Inf); |
| 1094 | if (src_sacc->NaN) xsum_small_add_inf_nan (dst_sacc, src_sacc->NaN); |
| 1095 | |
| 1096 | for (i = 0; i < XSUM_SCHUNKS; i++) |
| 1097 | { dst_sacc->chunk[i] += src_sacc->chunk[i]; |
| 1098 | } |
| 1099 | } |
| 1100 | |
| 1101 | dst_sacc->adds_until_propagate = XSUM_SMALL_CARRY_TERMS-2; |
| 1102 | } |
| 1103 | |
| 1104 | |
| 1105 | /* NEGATE THE VALUE IN A SMALL ACCUMULATOR. */ |
no test coverage detected