#include "cairo-wideint-private.h"
Go to the source code of this file.
Macros | |
#define | _cairo_msbset64(q) (q & ((uint64_t) 1 << 63)) |
#define | _cairo_uint32s_to_uint64(h, l) ((uint64_t) (h) << 32 | (l)) |
#define | uint64_carry32 (((uint64_t) 1) << 32) |
#define | uint64_hi(i) ((i) >> 32) |
#define | uint64_hi32(i) ((i) >> 32) |
#define | uint64_lo(i) ((i) & 0xffffffff) |
#define | uint64_lo32(i) ((i) & 0xffffffff) |
#define | uint64_shift32(i) ((i) << 32) |
#define _cairo_msbset64 | ( | q | ) | (q & ((uint64_t) 1 << 63)) |
Definition at line 575 of file cairo-wideint.c.
Referenced by _cairo_uint128_divrem().
#define _cairo_uint32s_to_uint64 | ( | h, | |
l | |||
) | ((uint64_t) (h) << 32 | (l)) |
Definition at line 35 of file cairo-wideint.c.
Referenced by _cairo_int_96by64_32x64_divrem(), and _cairo_uint_96by64_32x64_divrem().
#define uint64_carry32 (((uint64_t) 1) << 32) |
Definition at line 398 of file cairo-wideint.c.
#define uint64_hi | ( | i | ) | ((i) >> 32) |
Definition at line 396 of file cairo-wideint.c.
Referenced by _cairo_uint64x64_128_mul().
#define uint64_hi32 | ( | i | ) | ((i) >> 32) |
Definition at line 394 of file cairo-wideint.c.
Referenced by _cairo_uint64x64_128_mul(), and _cairo_uint_96by64_32x64_divrem().
#define uint64_lo | ( | i | ) | ((i) & 0xffffffff) |
Definition at line 395 of file cairo-wideint.c.
Referenced by _cairo_uint64x64_128_mul().
#define uint64_lo32 | ( | i | ) | ((i) & 0xffffffff) |
Definition at line 393 of file cairo-wideint.c.
Referenced by _cairo_uint64x64_128_mul().
#define uint64_shift32 | ( | i | ) | ((i) << 32) |
Definition at line 397 of file cairo-wideint.c.
Referenced by _cairo_uint64x64_128_mul().
cairo_quorem128_t _cairo_int128_divrem | ( | cairo_int128_t | num, |
cairo_int128_t | den | ||
) |
Definition at line 632 of file cairo-wideint.c.
References _cairo_int128_negate(), _cairo_int128_negative, _cairo_uint128_divrem(), cairo_uquorem128_t::quo, cairo_quorem128_t::quo, cairo_uquorem128_t::rem, and cairo_quorem128_t::rem.
int _cairo_int128_lt | ( | cairo_int128_t | a, |
cairo_int128_t | b | ||
) |
Definition at line 558 of file cairo-wideint.c.
References _cairo_int128_negative, and _cairo_uint128_lt().
cairo_int128_t _cairo_int128_negate | ( | cairo_int128_t | a | ) |
Definition at line 614 of file cairo-wideint.c.
References _cairo_uint128_add(), _cairo_uint32_to_uint128(), _cairo_uint64_not, cairo_int128_t::hi, and cairo_int128_t::lo.
Referenced by _cairo_int128_divrem(), and _cairo_int_96by64_32x64_divrem().
cairo_int128_t _cairo_int128_not | ( | cairo_int128_t | a | ) |
Definition at line 622 of file cairo-wideint.c.
References _cairo_uint64_not, cairo_int128_t::hi, and cairo_int128_t::lo.
cairo_int128_t _cairo_int32_to_int128 | ( | int32_t | i | ) |
Definition at line 338 of file cairo-wideint.c.
References _cairo_int32_to_int64, cairo_int128_t::hi, and cairo_int128_t::lo.
cairo_quorem64_t _cairo_int64_divrem | ( | cairo_int64_t | num, |
cairo_int64_t | den | ||
) |
Definition at line 290 of file cairo-wideint.c.
References _cairo_int64_negate, _cairo_int64_negative, _cairo_uint64_divrem(), cairo_uquorem64_t::quo, cairo_quorem64_t::quo, cairo_uquorem64_t::rem, and cairo_quorem64_t::rem.
cairo_int128_t _cairo_int64_to_int128 | ( | cairo_int64_t | i | ) |
Definition at line 358 of file cairo-wideint.c.
References _cairo_int32_to_int64, _cairo_int64_negative, cairo_int128_t::hi, and cairo_int128_t::lo.
cairo_int128_t _cairo_int64x64_128_mul | ( | cairo_int64_t | a, |
cairo_int64_t | b | ||
) |
Definition at line 468 of file cairo-wideint.c.
References _cairo_int64_negative, _cairo_int64_to_uint64, _cairo_uint64_sub, _cairo_uint64x64_128_mul(), cairo_int128_t::hi, and s.
cairo_quorem64_t _cairo_int_96by64_32x64_divrem | ( | cairo_int128_t | num, |
cairo_int64_t | den | ||
) |
Definition at line 775 of file cairo-wideint.c.
References _cairo_int128_negate(), _cairo_int128_negative, _cairo_int64_negate, _cairo_int64_negative, _cairo_int64_to_uint64, _cairo_uint32s_to_uint64, _cairo_uint64_eq, _cairo_uint_96by64_32x64_divrem(), cairo_uquorem64_t::quo, cairo_quorem64_t::quo, cairo_uquorem64_t::rem, and cairo_quorem64_t::rem.
cairo_uint128_t _cairo_uint128_add | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 368 of file cairo-wideint.c.
References _cairo_uint32_to_uint64, _cairo_uint64_add, _cairo_uint64_lt, and s.
Referenced by _cairo_int128_negate(), and _cairo_uint128_divrem().
cairo_uquorem128_t _cairo_uint128_divrem | ( | cairo_uint128_t | num, |
cairo_uint128_t | den | ||
) |
Definition at line 581 of file cairo-wideint.c.
References _cairo_msbset64, _cairo_uint128_add(), _cairo_uint128_le, _cairo_uint128_lsl(), _cairo_uint128_lt(), _cairo_uint128_ne, _cairo_uint128_rsl(), _cairo_uint128_sub(), _cairo_uint32_to_uint128(), cairo_uquorem128_t::quo, and cairo_uquorem128_t::rem.
Referenced by _cairo_int128_divrem().
int _cairo_uint128_eq | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 568 of file cairo-wideint.c.
References _cairo_uint64_eq.
cairo_uint128_t _cairo_uint128_lsl | ( | cairo_uint128_t | a, |
int | shift | ||
) |
Definition at line 496 of file cairo-wideint.c.
References _cairo_uint32_to_uint64, _cairo_uint64_add, _cairo_uint64_lsl, and _cairo_uint64_rsl.
Referenced by _cairo_uint128_divrem().
int _cairo_uint128_lt | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 550 of file cairo-wideint.c.
References _cairo_uint64_eq, and _cairo_uint64_lt.
Referenced by _cairo_int128_lt(), and _cairo_uint128_divrem().
cairo_uint128_t _cairo_uint128_mul | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 483 of file cairo-wideint.c.
References _cairo_uint64_add, _cairo_uint64_mul, _cairo_uint64x64_128_mul(), and s.
cairo_uint128_t _cairo_uint128_rsa | ( | cairo_int128_t | a, |
int | shift | ||
) |
Definition at line 532 of file cairo-wideint.c.
References _cairo_uint64_add, _cairo_uint64_lsl, _cairo_uint64_rsa, _cairo_uint64_rsl, cairo_int128_t::hi, and cairo_int128_t::lo.
cairo_uint128_t _cairo_uint128_rsl | ( | cairo_uint128_t | a, |
int | shift | ||
) |
Definition at line 514 of file cairo-wideint.c.
References _cairo_uint32_to_uint64, _cairo_uint64_add, _cairo_uint64_lsl, and _cairo_uint64_rsl.
Referenced by _cairo_uint128_divrem(), and _cairo_uint_96by64_32x64_divrem().
cairo_uint128_t _cairo_uint128_sub | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 380 of file cairo-wideint.c.
References _cairo_uint32_to_uint64, _cairo_uint64_gt, _cairo_uint64_sub, and s.
Referenced by _cairo_uint128_divrem().
cairo_uint128_t _cairo_uint32_to_uint128 | ( | uint32_t | i | ) |
Definition at line 328 of file cairo-wideint.c.
References _cairo_uint32_to_uint64.
Referenced by _cairo_int128_negate(), and _cairo_uint128_divrem().
cairo_uquorem64_t _cairo_uint64_divrem | ( | cairo_uint64_t | num, |
cairo_uint64_t | den | ||
) |
Definition at line 38 of file cairo-wideint.c.
References cairo_uquorem64_t::quo, and cairo_uquorem64_t::rem.
Referenced by _cairo_int64_divrem(), and _cairo_uint_96by64_32x64_divrem().
cairo_uint128_t _cairo_uint64_to_uint128 | ( | cairo_uint64_t | i | ) |
Definition at line 348 of file cairo-wideint.c.
References _cairo_uint32_to_uint64.
cairo_uint128_t _cairo_uint64x64_128_mul | ( | cairo_uint64_t | a, |
cairo_uint64_t | b | ||
) |
Definition at line 440 of file cairo-wideint.c.
References _cairo_uint32x32_64_mul, _cairo_uint64_add, _cairo_uint64_lt, s, uint64_hi, uint64_hi32, uint64_lo, uint64_lo32, and uint64_shift32.
Referenced by _cairo_int64x64_128_mul(), and _cairo_uint128_mul().
cairo_uquorem64_t _cairo_uint_96by64_32x64_divrem | ( | cairo_uint128_t | num, |
cairo_uint64_t | den | ||
) |
_cairo_uint_96by64_32x64_divrem:
Compute a 32 bit quotient and 64 bit remainder of a 96 bit unsigned dividend and 64 bit divisor. If the quotient doesn't fit into 32 bits then the returned remainder is equal to the divisor, and the quotient is the largest representable 64 bit integer. It is an error to call this function with the high 32 bits of being non-zero.
Definition at line 665 of file cairo-wideint.c.
References _cairo_uint128_rsl(), _cairo_uint128_to_uint32, _cairo_uint128_to_uint64, _cairo_uint32_to_uint64, _cairo_uint32s_to_uint64, _cairo_uint32x32_64_mul, _cairo_uint64_add, _cairo_uint64_divrem(), _cairo_uint64_ge, _cairo_uint64_lt, _cairo_uint64_sub, _cairo_uint64_to_uint32, cairo_uquorem64_t::quo, cairo_uquorem64_t::rem, uint64_hi32, and sample-rng-plot::x.
Referenced by _cairo_int_96by64_32x64_divrem().