cairo_x
function declarations, which provide the fallback high precision arithmetic implementation.
More...
#include "ns3/core-config.h"
#include <stdint.h>
Go to the source code of this file.
Classes | |
struct | cairo_int128_t |
struct | cairo_quorem128_t |
struct | cairo_quorem64_t |
struct | cairo_uquorem128_t |
struct | cairo_uquorem64_t |
Typedefs | |
typedef int64_t | cairo_int64_t |
typedef uint64_t | cairo_uint64_t |
Variables | |
const char * | cairo_impl128 |
const char * | cairo_impl64 |
cairo_x
function declarations, which provide the fallback high precision arithmetic implementation.
Definition in file cairo-wideint-private.h.
#define _cairo_int128_add | ( | a, | |
b | |||
) | _cairo_uint128_add (a,b) |
Definition at line 259 of file cairo-wideint-private.h.
#define _cairo_int128_eq | ( | a, | |
b | |||
) | _cairo_uint128_eq (a,b) |
Definition at line 267 of file cairo-wideint-private.h.
#define _cairo_int128_ge | ( | a, | |
b | |||
) | (!_cairo_int128_lt (a,b)) |
Definition at line 349 of file cairo-wideint-private.h.
#define _cairo_int128_gt | ( | a, | |
b | |||
) | _cairo_int128_lt (b,a) |
Definition at line 350 of file cairo-wideint-private.h.
#define _cairo_int128_le | ( | a, | |
b | |||
) | (!_cairo_int128_gt (a,b)) |
Definition at line 347 of file cairo-wideint-private.h.
#define _cairo_int128_lsl | ( | a, | |
b | |||
) | _cairo_uint128_lsl (a,b) |
Definition at line 263 of file cairo-wideint-private.h.
Referenced by ns3::int64x64_t::Udiv().
#define _cairo_int128_mul | ( | a, | |
b | |||
) | _cairo_uint128_mul (a,b) |
Definition at line 261 of file cairo-wideint-private.h.
#define _cairo_int128_ne | ( | a, | |
b | |||
) | (!_cairo_int128_eq (a,b)) |
Definition at line 348 of file cairo-wideint-private.h.
#define _cairo_int128_negate | ( | a | ) | _cairo_uint128_negate (a) |
Definition at line 268 of file cairo-wideint-private.h.
Referenced by _cairo_int128_divrem(), _cairo_int_96by64_32x64_divrem(), ns3::int64x64_t::GetDouble(), and ns3::int64x64_t::int64x64_t().
#define _cairo_int128_negative | ( | a | ) | (_cairo_uint128_negative (a)) |
Definition at line 269 of file cairo-wideint-private.h.
Referenced by _cairo_int128_divrem(), _cairo_int128_lt(), _cairo_int_96by64_32x64_divrem(), ns3::int64x64_t::GetDouble(), and ns3::output_sign().
#define _cairo_int128_not | ( | a | ) | _cairo_uint128_not (a) |
Definition at line 270 of file cairo-wideint-private.h.
#define _cairo_int128_rsa | ( | a, | |
b | |||
) | _cairo_uint128_rsa (a,b) |
Definition at line 265 of file cairo-wideint-private.h.
#define _cairo_int128_rsl | ( | a, | |
b | |||
) | _cairo_uint128_rsl (a,b) |
Definition at line 264 of file cairo-wideint-private.h.
#define _cairo_int128_sub | ( | a, | |
b | |||
) | _cairo_uint128_sub (a,b) |
Definition at line 260 of file cairo-wideint-private.h.
#define _cairo_int128_to_int32 | ( | a | ) | _cairo_int64_to_int32 (_cairo_int128_to_int64 (a)) |
Definition at line 258 of file cairo-wideint-private.h.
#define _cairo_int128_to_int64 | ( | a | ) | ((cairo_int64_t)(a).lo) |
Definition at line 257 of file cairo-wideint-private.h.
#define _cairo_int128_to_uint128 | ( | i | ) | (i) |
Definition at line 253 of file cairo-wideint-private.h.
Referenced by ns3::output_sign().
#define _cairo_int32_to_int64 | ( | i | ) | ((int64_t)(i)) |
Definition at line 170 of file cairo-wideint-private.h.
Referenced by _cairo_int32_to_int128(), and _cairo_int64_to_int128().
#define _cairo_int32x32_64_mul | ( | a, | |
b | |||
) | ((int64_t)(a) * (b)) |
Definition at line 175 of file cairo-wideint-private.h.
#define _cairo_int64_add | ( | a, | |
b | |||
) | ((a) + (b)) |
Definition at line 172 of file cairo-wideint-private.h.
#define _cairo_int64_eq | ( | a, | |
b | |||
) | ((a) == (b)) |
Definition at line 177 of file cairo-wideint-private.h.
#define _cairo_int64_ge | ( | a, | |
b | |||
) | (!_cairo_int64_lt (a,b)) |
Definition at line 197 of file cairo-wideint-private.h.
#define _cairo_int64_gt | ( | a, | |
b | |||
) | _cairo_int64_lt (b,a) |
Definition at line 198 of file cairo-wideint-private.h.
#define _cairo_int64_le | ( | a, | |
b | |||
) | (!_cairo_int64_gt (a,b)) |
Definition at line 195 of file cairo-wideint-private.h.
#define _cairo_int64_lsl | ( | a, | |
b | |||
) | ((a) << (b)) |
Definition at line 178 of file cairo-wideint-private.h.
#define _cairo_int64_lt | ( | a, | |
b | |||
) | ((a) < (b)) |
Definition at line 176 of file cairo-wideint-private.h.
#define _cairo_int64_mul | ( | a, | |
b | |||
) | ((a) * (b)) |
Definition at line 174 of file cairo-wideint-private.h.
#define _cairo_int64_ne | ( | a, | |
b | |||
) | (!_cairo_int64_eq (a,b)) |
Definition at line 196 of file cairo-wideint-private.h.
#define _cairo_int64_negate | ( | a | ) | (-(a)) |
Definition at line 181 of file cairo-wideint-private.h.
Referenced by _cairo_int64_divrem(), and _cairo_int_96by64_32x64_divrem().
#define _cairo_int64_negative | ( | a | ) | ((a) < 0) |
Definition at line 182 of file cairo-wideint-private.h.
Referenced by _cairo_int64_divrem(), _cairo_int64_to_int128(), _cairo_int64x64_128_mul(), and _cairo_int_96by64_32x64_divrem().
#define _cairo_int64_not | ( | a | ) | (~(a)) |
Definition at line 183 of file cairo-wideint-private.h.
#define _cairo_int64_rsa | ( | a, | |
b | |||
) | ((int64_t)(a) >> (b)) |
Definition at line 180 of file cairo-wideint-private.h.
#define _cairo_int64_rsl | ( | a, | |
b | |||
) | ((int64_t)((uint64_t)(a) >> (b))) |
Definition at line 179 of file cairo-wideint-private.h.
#define _cairo_int64_sub | ( | a, | |
b | |||
) | ((a) - (b)) |
Definition at line 173 of file cairo-wideint-private.h.
#define _cairo_int64_to_int32 | ( | i | ) | ((int32_t)(i)) |
Definition at line 171 of file cairo-wideint-private.h.
#define _cairo_int64_to_uint64 | ( | i | ) | ((uint64_t)(i)) |
Definition at line 168 of file cairo-wideint-private.h.
Referenced by _cairo_int64x64_128_mul(), and _cairo_int_96by64_32x64_divrem().
#define _cairo_uint128_ge | ( | a, | |
b | |||
) | (!_cairo_uint128_lt (a,b)) |
Definition at line 344 of file cairo-wideint-private.h.
#define _cairo_uint128_gt | ( | a, | |
b | |||
) | _cairo_uint128_lt (b,a) |
Definition at line 345 of file cairo-wideint-private.h.
#define _cairo_uint128_le | ( | a, | |
b | |||
) | (!_cairo_uint128_gt (a,b)) |
Definition at line 342 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_divrem().
#define _cairo_uint128_ne | ( | a, | |
b | |||
) | (!_cairo_uint128_eq (a,b)) |
Definition at line 343 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_divrem().
#define _cairo_uint128_negative | ( | a | ) | (_cairo_uint64_negative (a.hi)) |
Definition at line 249 of file cairo-wideint-private.h.
#define _cairo_uint128_to_int128 | ( | i | ) | (i) |
Definition at line 252 of file cairo-wideint-private.h.
#define _cairo_uint128_to_uint32 | ( | a | ) | _cairo_uint64_to_uint32 (_cairo_uint128_to_uint64 (a)) |
Definition at line 238 of file cairo-wideint-private.h.
Referenced by _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint128_to_uint64 | ( | a | ) | ((a).lo) |
Definition at line 237 of file cairo-wideint-private.h.
Referenced by _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint32_to_uint64 | ( | i | ) | ((uint64_t)(i)) |
Definition at line 152 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_add(), _cairo_uint128_lsl(), _cairo_uint128_rsl(), _cairo_uint128_sub(), _cairo_uint32_to_uint128(), _cairo_uint64_to_uint128(), and _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint32x32_64_mul | ( | a, | |
b | |||
) | ((uint64_t)(a) * (b)) |
Definition at line 157 of file cairo-wideint-private.h.
Referenced by _cairo_uint64x64_128_mul(), and _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint64_add | ( | a, | |
b | |||
) | ((a) + (b)) |
Definition at line 154 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_add(), _cairo_uint128_lsl(), _cairo_uint128_mul(), _cairo_uint128_rsa(), _cairo_uint128_rsl(), _cairo_uint64x64_128_mul(), and _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint64_eq | ( | a, | |
b | |||
) | ((a) == (b)) |
Definition at line 162 of file cairo-wideint-private.h.
Referenced by _cairo_int_96by64_32x64_divrem(), _cairo_uint128_eq(), and _cairo_uint128_lt().
#define _cairo_uint64_ge | ( | a, | |
b | |||
) | (!_cairo_uint64_lt (a,b)) |
Definition at line 192 of file cairo-wideint-private.h.
Referenced by _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint64_gt | ( | a, | |
b | |||
) | _cairo_uint64_lt (b,a) |
Definition at line 193 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_sub().
#define _cairo_uint64_le | ( | a, | |
b | |||
) | (!_cairo_uint64_gt (a,b)) |
Definition at line 190 of file cairo-wideint-private.h.
#define _cairo_uint64_lsl | ( | a, | |
b | |||
) | ((a) << (b)) |
Definition at line 158 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_lsl(), _cairo_uint128_rsa(), and _cairo_uint128_rsl().
#define _cairo_uint64_lt | ( | a, | |
b | |||
) | ((a) < (b)) |
Definition at line 161 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_add(), _cairo_uint128_lt(), _cairo_uint64x64_128_mul(), and _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint64_mul | ( | a, | |
b | |||
) | ((a) * (b)) |
Definition at line 156 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_mul().
#define _cairo_uint64_ne | ( | a, | |
b | |||
) | (!_cairo_uint64_eq (a,b)) |
Definition at line 191 of file cairo-wideint-private.h.
#define _cairo_uint64_negate | ( | a | ) | ((uint64_t) -((int64_t)(a))) |
Definition at line 163 of file cairo-wideint-private.h.
#define _cairo_uint64_negative | ( | a | ) | ((int64_t)(a) < 0) |
Definition at line 164 of file cairo-wideint-private.h.
#define _cairo_uint64_not | ( | a | ) | (~(a)) |
Definition at line 165 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_negate(), and _cairo_uint128_not().
#define _cairo_uint64_rsa | ( | a, | |
b | |||
) | ((uint64_t)((int64_t)(a) >> (b))) |
Definition at line 160 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_rsa().
#define _cairo_uint64_rsl | ( | a, | |
b | |||
) | ((uint64_t)(a) >> (b)) |
Definition at line 159 of file cairo-wideint-private.h.
Referenced by _cairo_uint128_lsl(), _cairo_uint128_rsa(), and _cairo_uint128_rsl().
#define _cairo_uint64_sub | ( | a, | |
b | |||
) | ((a) - (b)) |
Definition at line 155 of file cairo-wideint-private.h.
Referenced by _cairo_int64x64_128_mul(), _cairo_uint128_sub(), and _cairo_uint_96by64_32x64_divrem().
#define _cairo_uint64_to_int64 | ( | i | ) | ((int64_t)(i)) |
Definition at line 167 of file cairo-wideint-private.h.
#define _cairo_uint64_to_uint32 | ( | i | ) | ((uint32_t)(i)) |
Definition at line 153 of file cairo-wideint-private.h.
Referenced by _cairo_uint_96by64_32x64_divrem().
#define cairo_private |
Definition at line 45 of file cairo-wideint-private.h.
#define HAVE_UINT64_T 1 |
Definition at line 46 of file cairo-wideint-private.h.
#define I cairo_private |
Definition at line 102 of file cairo-wideint-private.h.
typedef int64_t cairo_int64_t |
Definition at line 150 of file cairo-wideint-private.h.
typedef uint64_t cairo_uint64_t |
Definition at line 149 of file cairo-wideint-private.h.
cairo_quorem128_t I _cairo_int128_divrem | ( | cairo_int128_t | num, |
cairo_int128_t | den | ||
) |
Definition at line 649 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 I _cairo_int128_lt | ( | cairo_int128_t | a, |
cairo_int128_t | b | ||
) |
Definition at line 575 of file cairo-wideint.c.
References _cairo_int128_negative, and _cairo_uint128_lt().
cairo_int128_t I _cairo_int32_to_int128 | ( | int32_t | i | ) |
Definition at line 355 of file cairo-wideint.c.
References _cairo_int32_to_int64, cairo_int128_t::hi, and cairo_int128_t::lo.
cairo_quorem64_t I _cairo_int64_divrem | ( | cairo_int64_t | num, |
cairo_int64_t | den | ||
) |
Definition at line 303 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 I _cairo_int64_to_int128 | ( | cairo_int64_t | i | ) |
Definition at line 375 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 I _cairo_int64x64_128_mul | ( | cairo_int64_t | a, |
cairo_int64_t | b | ||
) |
Definition at line 485 of file cairo-wideint.c.
References _cairo_int64_negative, _cairo_int64_to_uint64, _cairo_uint64_sub, _cairo_uint64x64_128_mul(), and cairo_int128_t::hi.
cairo_quorem64_t I _cairo_int_96by64_32x64_divrem | ( | cairo_int128_t | num, |
cairo_int64_t | den | ||
) |
Definition at line 792 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 I _cairo_uint128_add | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 385 of file cairo-wideint.c.
References _cairo_uint32_to_uint64, _cairo_uint64_add, and _cairo_uint64_lt.
Referenced by _cairo_uint128_divrem(), _cairo_uint128_negate(), ns3::int64x64_t::Udiv(), ns3::int64x64_t::Umul(), and ns3::int64x64_t::UmulByInvert().
cairo_uquorem128_t I _cairo_uint128_divrem | ( | cairo_uint128_t | num, |
cairo_uint128_t | den | ||
) |
Definition at line 598 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(), and ns3::int64x64_t::Udiv().
int I _cairo_uint128_eq | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 585 of file cairo-wideint.c.
References _cairo_uint64_eq.
Referenced by ns3::int64x64_t::Udiv().
cairo_uint128_t I _cairo_uint128_lsl | ( | cairo_uint128_t | a, |
int | shift | ||
) |
Definition at line 513 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(), ns3::int64x64_t::Udiv(), and ns3::int64x64_t::Umul().
int I _cairo_uint128_lt | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 567 of file cairo-wideint.c.
References _cairo_uint64_eq, and _cairo_uint64_lt.
Referenced by _cairo_int128_lt(), _cairo_uint128_divrem(), and ns3::int64x64_t::Udiv().
cairo_uint128_t I _cairo_uint128_mul | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 500 of file cairo-wideint.c.
References _cairo_uint64_add, _cairo_uint64_mul, and _cairo_uint64x64_128_mul().
cairo_uint128_t I _cairo_uint128_negate | ( | cairo_uint128_t | a | ) |
Definition at line 631 of file cairo-wideint.c.
References _cairo_uint128_add(), _cairo_uint32_to_uint128(), and _cairo_uint64_not.
Referenced by ns3::output_sign().
cairo_uint128_t I _cairo_uint128_not | ( | cairo_uint128_t | a | ) |
Definition at line 639 of file cairo-wideint.c.
References _cairo_uint64_not.
cairo_uint128_t I _cairo_uint128_rsa | ( | cairo_uint128_t | a, |
int | shift | ||
) |
cairo_uint128_t I _cairo_uint128_rsl | ( | cairo_uint128_t | a, |
int | shift | ||
) |
Definition at line 531 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(), _cairo_uint_96by64_32x64_divrem(), and ns3::int64x64_t::Udiv().
cairo_uint128_t I _cairo_uint128_sub | ( | cairo_uint128_t | a, |
cairo_uint128_t | b | ||
) |
Definition at line 397 of file cairo-wideint.c.
References _cairo_uint32_to_uint64, _cairo_uint64_gt, and _cairo_uint64_sub.
Referenced by _cairo_uint128_divrem().
cairo_uint128_t I _cairo_uint32_to_uint128 | ( | uint32_t | i | ) |
Definition at line 345 of file cairo-wideint.c.
References _cairo_uint32_to_uint64.
Referenced by _cairo_uint128_divrem(), _cairo_uint128_negate(), and ns3::int64x64_t::Udiv().
cairo_uquorem64_t I _cairo_uint64_divrem | ( | cairo_uint64_t | num, |
cairo_uint64_t | den | ||
) |
Definition at line 49 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 I _cairo_uint64_to_uint128 | ( | cairo_uint64_t | i | ) |
Definition at line 365 of file cairo-wideint.c.
References _cairo_uint32_to_uint64.
Referenced by ns3::int64x64_t::Umul().
cairo_uint128_t I _cairo_uint64x64_128_mul | ( | cairo_uint64_t | a, |
cairo_uint64_t | b | ||
) |
Definition at line 457 of file cairo-wideint.c.
References _cairo_uint32x32_64_mul, _cairo_uint64_add, _cairo_uint64_lt, uint64_carry32, uint64_hi, uint64_hi32, uint64_lo, uint64_lo32, and uint64_shift32.
Referenced by _cairo_int64x64_128_mul(), _cairo_uint128_mul(), ns3::int64x64_t::Umul(), and ns3::int64x64_t::UmulByInvert().
cairo_uquorem64_t I _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 ‘num’ being non-zero.
Definition at line 682 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().
const char* cairo_impl128 |
Definition at line 342 of file cairo-wideint.c.
Referenced by ns3::int64x64::test::Int64x64ImplTestCase::DoRun().
const char* cairo_impl64 |
Definition at line 44 of file cairo-wideint.c.
Referenced by ns3::int64x64::test::Int64x64ImplTestCase::DoRun().