00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef CAIRO_WIDEINT_H
00033 #define CAIRO_WIDEINT_H
00034
00035 #include "ns3/simulator-config.h"
00036 #define cairo_private
00037 #define HAVE_UINT64_T 1
00038
00039 #if HAVE_STDINT_H
00040 # include <stdint.h>
00041 #elif HAVE_INTTYPES_H
00042 # include <inttypes.h>
00043 #elif HAVE_SYS_INT_TYPES_H
00044 # include <sys/int_types.h>
00045 #elif defined(_MSC_VER)
00046 typedef __int8 int8_t;
00047 typedef unsigned __int8 uint8_t;
00048 typedef __int16 int16_t;
00049 typedef unsigned __int16 uint16_t;
00050 typedef __int32 int32_t;
00051 typedef unsigned __int32 uint32_t;
00052 typedef __int64 int64_t;
00053 typedef unsigned __int64 uint64_t;
00054 # ifndef HAVE_UINT64_T
00055 # define HAVE_UINT64_T 1
00056 # endif
00057 # ifndef INT16_MIN
00058 # define INT16_MIN (-32767-1)
00059 # endif
00060 # ifndef INT16_MAX
00061 # define INT16_MAX (32767)
00062 # endif
00063 # ifndef UINT16_MAX
00064 # define UINT16_MAX (65535)
00065 # endif
00066 #else
00067 #error Cannot find definitions for fixed-width integral types (uint8_t, uint32_t, etc.)
00068 #endif
00069
00070 #ifdef __cplusplus
00071 extern "C" {
00072 #endif
00073
00074
00075
00076
00077
00078
00079
00080 #define I cairo_private
00081
00082 #if !HAVE_UINT64_T
00083
00084 typedef struct _cairo_uint64 {
00085 uint32_t lo, hi;
00086 } cairo_uint64_t, cairo_int64_t;
00087
00088 cairo_uint64_t I _cairo_uint32_to_uint64 (uint32_t i);
00089 #define _cairo_uint64_to_uint32(a) ((a).lo)
00090 cairo_uint64_t I _cairo_uint64_add (cairo_uint64_t a, cairo_uint64_t b);
00091 cairo_uint64_t I _cairo_uint64_sub (cairo_uint64_t a, cairo_uint64_t b);
00092 cairo_uint64_t I _cairo_uint64_mul (cairo_uint64_t a, cairo_uint64_t b);
00093 cairo_uint64_t I _cairo_uint32x32_64_mul (uint32_t a, uint32_t b);
00094 cairo_uint64_t I _cairo_uint64_lsl (cairo_uint64_t a, int shift);
00095 cairo_uint64_t I _cairo_uint64_rsl (cairo_uint64_t a, int shift);
00096 cairo_uint64_t I _cairo_uint64_rsa (cairo_uint64_t a, int shift);
00097 int I _cairo_uint64_lt (cairo_uint64_t a, cairo_uint64_t b);
00098 int I _cairo_uint64_eq (cairo_uint64_t a, cairo_uint64_t b);
00099 cairo_uint64_t I _cairo_uint64_negate (cairo_uint64_t a);
00100 #define _cairo_uint64_negative(a) (((int32_t) ((a).hi)) < 0)
00101 cairo_uint64_t I _cairo_uint64_not (cairo_uint64_t a);
00102
00103 #define _cairo_uint64_to_int64(i) (i)
00104 #define _cairo_int64_to_uint64(i) (i)
00105
00106 cairo_int64_t I _cairo_int32_to_int64(int32_t i);
00107 #define _cairo_int64_to_int32(a) ((int32_t) _cairo_uint64_to_uint32(a))
00108 #define _cairo_int64_add(a,b) _cairo_uint64_add (a,b)
00109 #define _cairo_int64_sub(a,b) _cairo_uint64_sub (a,b)
00110 #define _cairo_int64_mul(a,b) _cairo_uint64_mul (a,b)
00111 cairo_int64_t I _cairo_int32x32_64_mul (int32_t a, int32_t b);
00112 int I _cairo_int64_lt (cairo_uint64_t a, cairo_uint64_t b);
00113 #define _cairo_int64_eq(a,b) _cairo_uint64_eq (a,b)
00114 #define _cairo_int64_lsl(a,b) _cairo_uint64_lsl (a,b)
00115 #define _cairo_int64_rsl(a,b) _cairo_uint64_rsl (a,b)
00116 #define _cairo_int64_rsa(a,b) _cairo_uint64_rsa (a,b)
00117 #define _cairo_int64_negate(a) _cairo_uint64_negate(a)
00118 #define _cairo_int64_negative(a) (((int32_t) ((a).hi)) < 0)
00119 #define _cairo_int64_not(a) _cairo_uint64_not(a)
00120
00121 #else
00122
00123 typedef uint64_t cairo_uint64_t;
00124 typedef int64_t cairo_int64_t;
00125
00126 #define _cairo_uint32_to_uint64(i) ((uint64_t) (i))
00127 #define _cairo_uint64_to_uint32(i) ((uint32_t) (i))
00128 #define _cairo_uint64_add(a,b) ((a) + (b))
00129 #define _cairo_uint64_sub(a,b) ((a) - (b))
00130 #define _cairo_uint64_mul(a,b) ((a) * (b))
00131 #define _cairo_uint32x32_64_mul(a,b) ((uint64_t) (a) * (b))
00132 #define _cairo_uint64_lsl(a,b) ((a) << (b))
00133 #define _cairo_uint64_rsl(a,b) ((uint64_t) (a) >> (b))
00134 #define _cairo_uint64_rsa(a,b) ((uint64_t) ((int64_t) (a) >> (b)))
00135 #define _cairo_uint64_lt(a,b) ((a) < (b))
00136 #define _cairo_uint64_eq(a,b) ((a) == (b))
00137 #define _cairo_uint64_negate(a) ((uint64_t) -((int64_t) (a)))
00138 #define _cairo_uint64_negative(a) ((int64_t) (a) < 0)
00139 #define _cairo_uint64_not(a) (~(a))
00140
00141 #define _cairo_uint64_to_int64(i) ((int64_t) (i))
00142 #define _cairo_int64_to_uint64(i) ((uint64_t) (i))
00143
00144 #define _cairo_int32_to_int64(i) ((int64_t) (i))
00145 #define _cairo_int64_to_int32(i) ((int32_t) (i))
00146 #define _cairo_int64_add(a,b) ((a) + (b))
00147 #define _cairo_int64_sub(a,b) ((a) - (b))
00148 #define _cairo_int64_mul(a,b) ((a) * (b))
00149 #define _cairo_int32x32_64_mul(a,b) ((int64_t) (a) * (b))
00150 #define _cairo_int64_lt(a,b) ((a) < (b))
00151 #define _cairo_int64_eq(a,b) ((a) == (b))
00152 #define _cairo_int64_lsl(a,b) ((a) << (b))
00153 #define _cairo_int64_rsl(a,b) ((int64_t) ((uint64_t) (a) >> (b)))
00154 #define _cairo_int64_rsa(a,b) ((int64_t) (a) >> (b))
00155 #define _cairo_int64_negate(a) (-(a))
00156 #define _cairo_int64_negative(a) ((a) < 0)
00157 #define _cairo_int64_not(a) (~(a))
00158
00159 #endif
00160
00161
00162
00163
00164 #define _cairo_uint64_le(a,b) (!_cairo_uint64_gt(a,b))
00165 #define _cairo_uint64_ne(a,b) (!_cairo_uint64_eq(a,b))
00166 #define _cairo_uint64_ge(a,b) (!_cairo_uint64_lt(a,b))
00167 #define _cairo_uint64_gt(a,b) _cairo_uint64_lt(b,a)
00168
00169 #define _cairo_int64_le(a,b) (!_cairo_int64_gt(a,b))
00170 #define _cairo_int64_ne(a,b) (!_cairo_int64_eq(a,b))
00171 #define _cairo_int64_ge(a,b) (!_cairo_int64_lt(a,b))
00172 #define _cairo_int64_gt(a,b) _cairo_int64_lt(b,a)
00173
00174
00175
00176
00177
00178
00179 typedef struct _cairo_uquorem64 {
00180 cairo_uint64_t quo;
00181 cairo_uint64_t rem;
00182 } cairo_uquorem64_t;
00183
00184 typedef struct _cairo_quorem64 {
00185 cairo_int64_t quo;
00186 cairo_int64_t rem;
00187 } cairo_quorem64_t;
00188
00189 cairo_uquorem64_t I
00190 _cairo_uint64_divrem (cairo_uint64_t num, cairo_uint64_t den);
00191
00192 cairo_quorem64_t I
00193 _cairo_int64_divrem (cairo_int64_t num, cairo_int64_t den);
00194
00195
00196
00197
00198
00199
00200
00201 #if !HAVE_UINT128_T
00202
00203 typedef struct cairo_uint128 {
00204 cairo_uint64_t lo, hi;
00205 } cairo_uint128_t, cairo_int128_t;
00206
00207 cairo_uint128_t I _cairo_uint32_to_uint128 (uint32_t i);
00208 cairo_uint128_t I _cairo_uint64_to_uint128 (cairo_uint64_t i);
00209 #define _cairo_uint128_to_uint64(a) ((a).lo)
00210 #define _cairo_uint128_to_uint32(a) _cairo_uint64_to_uint32(_cairo_uint128_to_uint64(a))
00211 cairo_uint128_t I _cairo_uint128_add (cairo_uint128_t a, cairo_uint128_t b);
00212 cairo_uint128_t I _cairo_uint128_sub (cairo_uint128_t a, cairo_uint128_t b);
00213 cairo_uint128_t I _cairo_uint128_mul (cairo_uint128_t a, cairo_uint128_t b);
00214 cairo_uint128_t I _cairo_uint64x64_128_mul (cairo_uint64_t a, cairo_uint64_t b);
00215 cairo_uint128_t I _cairo_uint128_lsl (cairo_uint128_t a, int shift);
00216 cairo_uint128_t I _cairo_uint128_rsl (cairo_uint128_t a, int shift);
00217 cairo_uint128_t I _cairo_uint128_rsa (cairo_uint128_t a, int shift);
00218 int I _cairo_uint128_lt (cairo_uint128_t a, cairo_uint128_t b);
00219 int I _cairo_uint128_eq (cairo_uint128_t a, cairo_uint128_t b);
00220 cairo_uint128_t I _cairo_uint128_negate (cairo_uint128_t a);
00221 #define _cairo_uint128_negative(a) (_cairo_uint64_negative(a.hi))
00222 cairo_uint128_t I _cairo_uint128_not (cairo_uint128_t a);
00223
00224 #define _cairo_uint128_to_int128(i) (i)
00225 #define _cairo_int128_to_uint128(i) (i)
00226
00227 cairo_int128_t I _cairo_int32_to_int128 (int32_t i);
00228 cairo_int128_t I _cairo_int64_to_int128 (cairo_int64_t i);
00229 #define _cairo_int128_to_int64(a) ((cairo_int64_t) (a).lo)
00230 #define _cairo_int128_to_int32(a) _cairo_int64_to_int32(_cairo_int128_to_int64(a))
00231 #define _cairo_int128_add(a,b) _cairo_uint128_add(a,b)
00232 #define _cairo_int128_sub(a,b) _cairo_uint128_sub(a,b)
00233 #define _cairo_int128_mul(a,b) _cairo_uint128_mul(a,b)
00234 cairo_int128_t I _cairo_int64x64_128_mul (cairo_int64_t a, cairo_int64_t b);
00235 #define _cairo_int128_lsl(a,b) _cairo_uint128_lsl(a,b)
00236 #define _cairo_int128_rsl(a,b) _cairo_uint128_rsl(a,b)
00237 #define _cairo_int128_rsa(a,b) _cairo_uint128_rsa(a,b)
00238 int I _cairo_int128_lt (cairo_int128_t a, cairo_int128_t b);
00239 #define _cairo_int128_eq(a,b) _cairo_uint128_eq (a,b)
00240 #define _cairo_int128_negate(a) _cairo_uint128_negate(a)
00241 #define _cairo_int128_negative(a) (_cairo_uint128_negative(a))
00242 #define _cairo_int128_not(a) _cairo_uint128_not(a)
00243
00244 #else
00245
00246 typedef uint128_t cairo_uint128_t;
00247 typedef int128_t cairo_int128_t;
00248
00249 #define _cairo_uint32_to_uint128(i) ((uint128_t) (i))
00250 #define _cairo_uint64_to_uint128(i) ((uint128_t) (i))
00251 #define _cairo_uint128_to_uint64(i) ((uint64_t) (i))
00252 #define _cairo_uint128_to_uint32(i) ((uint32_t) (i))
00253 #define _cairo_uint128_add(a,b) ((a) + (b))
00254 #define _cairo_uint128_sub(a,b) ((a) - (b))
00255 #define _cairo_uint128_mul(a,b) ((a) * (b))
00256 #define _cairo_uint64x64_128_mul(a,b) ((uint128_t) (a) * (b))
00257 #define _cairo_uint128_lsl(a,b) ((a) << (b))
00258 #define _cairo_uint128_rsl(a,b) ((uint128_t) (a) >> (b))
00259 #define _cairo_uint128_rsa(a,b) ((uint128_t) ((int128_t) (a) >> (b)))
00260 #define _cairo_uint128_lt(a,b) ((a) < (b))
00261 #define _cairo_uint128_eq(a,b) ((a) == (b))
00262 #define _cairo_uint128_negate(a) ((uint128_t) -((int128_t) (a)))
00263 #define _cairo_uint128_negative(a) ((int128_t) (a) < 0)
00264 #define _cairo_uint128_not(a) (~(a))
00265
00266 #define _cairo_uint128_to_int128(i) ((int128_t) (i))
00267 #define _cairo_int128_to_uint128(i) ((uint128_t) (i))
00268
00269 #define _cairo_int32_to_int128(i) ((int128_t) (i))
00270 #define _cairo_int64_to_int128(i) ((int128_t) (i))
00271 #define _cairo_int128_to_int64(i) ((int64_t) (i))
00272 #define _cairo_int128_to_int32(i) ((int32_t) (i))
00273 #define _cairo_int128_add(a,b) ((a) + (b))
00274 #define _cairo_int128_sub(a,b) ((a) - (b))
00275 #define _cairo_int128_mul(a,b) ((a) * (b))
00276 #define _cairo_int64x64_128_mul(a,b) ((int128_t) (a) * (b))
00277 #define _cairo_int128_lt(a,b) ((a) < (b))
00278 #define _cairo_int128_eq(a,b) ((a) == (b))
00279 #define _cairo_int128_lsl(a,b) ((a) << (b))
00280 #define _cairo_int128_rsl(a,b) ((int128_t) ((uint128_t) (a) >> (b)))
00281 #define _cairo_int128_rsa(a,b) ((int128_t) (a) >> (b))
00282 #define _cairo_int128_negate(a) (-(a))
00283 #define _cairo_int128_negative(a) ((a) < 0)
00284 #define _cairo_int128_not(a) (~(a))
00285
00286 #endif
00287
00288 typedef struct _cairo_uquorem128 {
00289 cairo_uint128_t quo;
00290 cairo_uint128_t rem;
00291 } cairo_uquorem128_t;
00292
00293 typedef struct _cairo_quorem128 {
00294 cairo_int128_t quo;
00295 cairo_int128_t rem;
00296 } cairo_quorem128_t;
00297
00298 cairo_uquorem128_t I
00299 _cairo_uint128_divrem (cairo_uint128_t num, cairo_uint128_t den);
00300
00301 cairo_quorem128_t I
00302 _cairo_int128_divrem (cairo_int128_t num, cairo_int128_t den);
00303
00304 cairo_uquorem64_t I
00305 _cairo_uint_96by64_32x64_divrem (cairo_uint128_t num,
00306 cairo_uint64_t den);
00307
00308 cairo_quorem64_t I
00309 _cairo_int_96by64_32x64_divrem (cairo_int128_t num,
00310 cairo_int64_t den);
00311
00312 #define _cairo_uint128_le(a,b) (!_cairo_uint128_gt(a,b))
00313 #define _cairo_uint128_ne(a,b) (!_cairo_uint128_eq(a,b))
00314 #define _cairo_uint128_ge(a,b) (!_cairo_uint128_lt(a,b))
00315 #define _cairo_uint128_gt(a,b) _cairo_uint128_lt(b,a)
00316
00317 #define _cairo_int128_le(a,b) (!_cairo_int128_gt(a,b))
00318 #define _cairo_int128_ne(a,b) (!_cairo_int128_eq(a,b))
00319 #define _cairo_int128_ge(a,b) (!_cairo_int128_lt(a,b))
00320 #define _cairo_int128_gt(a,b) _cairo_int128_lt(b,a)
00321
00322 #undef I
00323
00324 #ifdef __cplusplus
00325 };
00326 #endif
00327
00328
00329 #endif