return 0 or BF_ST_MEM_ERROR */
| 224 | |
| 225 | /* return 0 or BF_ST_MEM_ERROR */ |
| 226 | int bf_set_ui(bf_t *r, uint64_t a) |
| 227 | { |
| 228 | r->sign = 0; |
| 229 | if (a == 0) { |
| 230 | r->expn = BF_EXP_ZERO; |
| 231 | bf_resize(r, 0); /* cannot fail */ |
| 232 | } |
| 233 | #if LIMB_BITS == 32 |
| 234 | else if (a <= 0xffffffff) |
| 235 | #else |
| 236 | else |
| 237 | #endif |
| 238 | { |
| 239 | int shift; |
| 240 | if (bf_resize(r, 1)) |
| 241 | goto fail; |
| 242 | shift = clz(a); |
| 243 | r->tab[0] = a << shift; |
| 244 | r->expn = LIMB_BITS - shift; |
| 245 | } |
| 246 | #if LIMB_BITS == 32 |
| 247 | else { |
| 248 | uint32_t a1, a0; |
| 249 | int shift; |
| 250 | if (bf_resize(r, 2)) |
| 251 | goto fail; |
| 252 | a0 = a; |
| 253 | a1 = a >> 32; |
| 254 | shift = clz(a1); |
| 255 | r->tab[0] = a0 << shift; |
| 256 | r->tab[1] = shld(a1, a0, shift); |
| 257 | r->expn = 2 * LIMB_BITS - shift; |
| 258 | } |
| 259 | #endif |
| 260 | return 0; |
| 261 | fail: |
| 262 | bf_set_nan(r); |
| 263 | return BF_ST_MEM_ERROR; |
| 264 | } |
| 265 | |
| 266 | /* return 0 or BF_ST_MEM_ERROR */ |
| 267 | int bf_set_si(bf_t *r, int64_t a) |
no test coverage detected