src/simulator/cairo-wideint-private.h
author Raj Bhattacharjea <raj.b@gatech.edu>
Thu, 26 Apr 2007 11:36:05 -0400
changeset 439 fed13fb45eef
parent 169 bc06726969af
child 5386 e989563ab376
permissions -rw-r--r--
Incorporated defaults and command-line arguments
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
164
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* cairo - a vector graphics library with display and print output
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright © 2004 Keith Packard
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License version 2 as
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * published by the Free Software Foundation;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * GNU General Public License for more details.
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 * The original code as contributed to the cairo library under
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * the dual license MPL+LGPL. We used the LGPL relicensing clause to
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 * get a GPL version of this code which now lives here. This header is
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
 * unmodified other than the licensing clause.
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
 * The Original Code is the cairo graphics library.
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
 * The Initial Developer of the Original Code is Keith Packard
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
 * Contributor(s):
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
 *	Keith R. Packard <keithp@keithp.com>
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
 *
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
 */
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
#ifndef CAIRO_WIDEINT_H
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
#define CAIRO_WIDEINT_H
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
165
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
    35
#include "ns3/simulator-config.h"
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
    36
#define cairo_private 
169
bc06726969af fix typo and make sure we use uint64 native type by default.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 165
diff changeset
    37
#define HAVE_UINT64_T 1
165
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
    38
164
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
#if   HAVE_STDINT_H
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
# include <stdint.h>
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
#elif HAVE_INTTYPES_H
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
# include <inttypes.h>
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
#elif HAVE_SYS_INT_TYPES_H
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
# include <sys/int_types.h>
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
#elif defined(_MSC_VER)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
  typedef __int8 int8_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
  typedef unsigned __int8 uint8_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
  typedef __int16 int16_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
  typedef unsigned __int16 uint16_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
  typedef __int32 int32_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
  typedef unsigned __int32 uint32_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
  typedef __int64 int64_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
  typedef unsigned __int64 uint64_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
# ifndef HAVE_UINT64_T
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
#  define HAVE_UINT64_T 1
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
# endif
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
# ifndef INT16_MIN
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
#  define INT16_MIN	(-32767-1)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    59
# endif
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    60
# ifndef INT16_MAX
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    61
#  define INT16_MAX	(32767)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
# endif
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
# ifndef UINT16_MAX
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
#  define UINT16_MAX	(65535)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
# endif
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
#else
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
#error Cannot find definitions for fixed-width integral types (uint8_t, uint32_t, etc.)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
#endif
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
165
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
    70
#ifdef __cplusplus
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
    71
extern "C" {
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
    72
#endif
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
    73
164
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
/*
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
 * 64-bit datatypes.  Two separate implementations, one using
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
 * built-in 64-bit signed/unsigned types another implemented
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
 * as a pair of 32-bit ints
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    78
 */
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    79
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
#define I cairo_private
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
#if !HAVE_UINT64_T
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
typedef struct _cairo_uint64 {
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
    uint32_t	lo, hi;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
} cairo_uint64_t, cairo_int64_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
cairo_uint64_t I	_cairo_uint32_to_uint64 (uint32_t i);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
#define			_cairo_uint64_to_uint32(a)  ((a).lo)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
cairo_uint64_t I	_cairo_uint64_add (cairo_uint64_t a, cairo_uint64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
cairo_uint64_t I	_cairo_uint64_sub (cairo_uint64_t a, cairo_uint64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
cairo_uint64_t I	_cairo_uint64_mul (cairo_uint64_t a, cairo_uint64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
cairo_uint64_t I	_cairo_uint32x32_64_mul (uint32_t a, uint32_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
cairo_uint64_t I	_cairo_uint64_lsl (cairo_uint64_t a, int shift);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
cairo_uint64_t I	_cairo_uint64_rsl (cairo_uint64_t a, int shift);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    96
cairo_uint64_t I	_cairo_uint64_rsa (cairo_uint64_t a, int shift);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    97
int	       I	_cairo_uint64_lt (cairo_uint64_t a, cairo_uint64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    98
int	       I	_cairo_uint64_eq (cairo_uint64_t a, cairo_uint64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    99
cairo_uint64_t I	_cairo_uint64_negate (cairo_uint64_t a);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   100
#define			_cairo_uint64_negative(a)   (((int32_t) ((a).hi)) < 0)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   101
cairo_uint64_t I	_cairo_uint64_not (cairo_uint64_t a);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   102
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   103
#define			_cairo_uint64_to_int64(i)   (i)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   104
#define			_cairo_int64_to_uint64(i)   (i)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   105
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   106
cairo_int64_t  I	_cairo_int32_to_int64(int32_t i);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   107
#define			_cairo_int64_to_int32(a)    ((int32_t) _cairo_uint64_to_uint32(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   108
#define			_cairo_int64_add(a,b)	    _cairo_uint64_add (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   109
#define			_cairo_int64_sub(a,b)	    _cairo_uint64_sub (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   110
#define			_cairo_int64_mul(a,b)	    _cairo_uint64_mul (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   111
cairo_int64_t  I	_cairo_int32x32_64_mul (int32_t a, int32_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   112
int	       I	_cairo_int64_lt (cairo_uint64_t a, cairo_uint64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   113
#define			_cairo_int64_eq(a,b)	    _cairo_uint64_eq (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   114
#define			_cairo_int64_lsl(a,b)	    _cairo_uint64_lsl (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   115
#define			_cairo_int64_rsl(a,b)	    _cairo_uint64_rsl (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   116
#define			_cairo_int64_rsa(a,b)	    _cairo_uint64_rsa (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   117
#define			_cairo_int64_negate(a)	    _cairo_uint64_negate(a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   118
#define			_cairo_int64_negative(a)    (((int32_t) ((a).hi)) < 0)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   119
#define			_cairo_int64_not(a)	    _cairo_uint64_not(a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   120
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   121
#else
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   122
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   123
typedef uint64_t    cairo_uint64_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   124
typedef int64_t	    cairo_int64_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   125
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   126
#define			_cairo_uint32_to_uint64(i)  ((uint64_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   127
#define			_cairo_uint64_to_uint32(i)  ((uint32_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   128
#define			_cairo_uint64_add(a,b)	    ((a) + (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   129
#define			_cairo_uint64_sub(a,b)	    ((a) - (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   130
#define			_cairo_uint64_mul(a,b)	    ((a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   131
#define			_cairo_uint32x32_64_mul(a,b)	((uint64_t) (a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   132
#define			_cairo_uint64_lsl(a,b)	    ((a) << (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   133
#define			_cairo_uint64_rsl(a,b)	    ((uint64_t) (a) >> (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   134
#define			_cairo_uint64_rsa(a,b)	    ((uint64_t) ((int64_t) (a) >> (b)))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   135
#define			_cairo_uint64_lt(a,b)	    ((a) < (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   136
#define			_cairo_uint64_eq(a,b)	    ((a) == (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   137
#define			_cairo_uint64_negate(a)	    ((uint64_t) -((int64_t) (a)))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   138
#define			_cairo_uint64_negative(a)   ((int64_t) (a) < 0)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   139
#define			_cairo_uint64_not(a)	    (~(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   140
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   141
#define			_cairo_uint64_to_int64(i)   ((int64_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   142
#define			_cairo_int64_to_uint64(i)   ((uint64_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   143
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   144
#define			_cairo_int32_to_int64(i)    ((int64_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   145
#define			_cairo_int64_to_int32(i)    ((int32_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   146
#define			_cairo_int64_add(a,b)	    ((a) + (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   147
#define			_cairo_int64_sub(a,b)	    ((a) - (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   148
#define			_cairo_int64_mul(a,b)	    ((a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   149
#define			_cairo_int32x32_64_mul(a,b) ((int64_t) (a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   150
#define			_cairo_int64_lt(a,b)	    ((a) < (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   151
#define			_cairo_int64_eq(a,b)	    ((a) == (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   152
#define			_cairo_int64_lsl(a,b)	    ((a) << (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   153
#define			_cairo_int64_rsl(a,b)	    ((int64_t) ((uint64_t) (a) >> (b)))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   154
#define			_cairo_int64_rsa(a,b)	    ((int64_t) (a) >> (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   155
#define			_cairo_int64_negate(a)	    (-(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   156
#define			_cairo_int64_negative(a)    ((a) < 0)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   157
#define			_cairo_int64_not(a)	    (~(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   158
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   159
#endif
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   160
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   161
/*
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   162
 * 64-bit comparisions derived from lt or eq
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   163
 */
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   164
#define			_cairo_uint64_le(a,b)	    (!_cairo_uint64_gt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   165
#define			_cairo_uint64_ne(a,b)	    (!_cairo_uint64_eq(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   166
#define			_cairo_uint64_ge(a,b)	    (!_cairo_uint64_lt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   167
#define			_cairo_uint64_gt(a,b)	    _cairo_uint64_lt(b,a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   168
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   169
#define			_cairo_int64_le(a,b)	    (!_cairo_int64_gt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   170
#define			_cairo_int64_ne(a,b)	    (!_cairo_int64_eq(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   171
#define			_cairo_int64_ge(a,b)	    (!_cairo_int64_lt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   172
#define			_cairo_int64_gt(a,b)	    _cairo_int64_lt(b,a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   173
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   174
/*
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   175
 * As the C implementation always computes both, create
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   176
 * a function which returns both for the 'native' type as well
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   177
 */
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   178
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   179
typedef struct _cairo_uquorem64 {
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   180
    cairo_uint64_t	quo;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   181
    cairo_uint64_t	rem;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   182
} cairo_uquorem64_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   183
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   184
typedef struct _cairo_quorem64 {
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   185
    cairo_int64_t	quo;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   186
    cairo_int64_t	rem;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   187
} cairo_quorem64_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   188
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   189
cairo_uquorem64_t I
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   190
_cairo_uint64_divrem (cairo_uint64_t num, cairo_uint64_t den);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   191
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   192
cairo_quorem64_t I
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   193
_cairo_int64_divrem (cairo_int64_t num, cairo_int64_t den);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   194
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   195
/*
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   196
 * 128-bit datatypes.  Again, provide two implementations in
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   197
 * case the machine has a native 128-bit datatype.  GCC supports int128_t
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   198
 * on ia64
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   199
 */
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   200
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   201
#if !HAVE_UINT128_T
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   202
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   203
typedef struct cairo_uint128 {
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   204
    cairo_uint64_t	lo, hi;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   205
} cairo_uint128_t, cairo_int128_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   206
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   207
cairo_uint128_t I	_cairo_uint32_to_uint128 (uint32_t i);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   208
cairo_uint128_t I	_cairo_uint64_to_uint128 (cairo_uint64_t i);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   209
#define			_cairo_uint128_to_uint64(a)	((a).lo)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   210
#define			_cairo_uint128_to_uint32(a)	_cairo_uint64_to_uint32(_cairo_uint128_to_uint64(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   211
cairo_uint128_t I	_cairo_uint128_add (cairo_uint128_t a, cairo_uint128_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   212
cairo_uint128_t I	_cairo_uint128_sub (cairo_uint128_t a, cairo_uint128_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   213
cairo_uint128_t I	_cairo_uint128_mul (cairo_uint128_t a, cairo_uint128_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   214
cairo_uint128_t I	_cairo_uint64x64_128_mul (cairo_uint64_t a, cairo_uint64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   215
cairo_uint128_t I	_cairo_uint128_lsl (cairo_uint128_t a, int shift);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   216
cairo_uint128_t I	_cairo_uint128_rsl (cairo_uint128_t a, int shift);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   217
cairo_uint128_t I	_cairo_uint128_rsa (cairo_uint128_t a, int shift);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   218
int	        I	_cairo_uint128_lt (cairo_uint128_t a, cairo_uint128_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   219
int	        I	_cairo_uint128_eq (cairo_uint128_t a, cairo_uint128_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   220
cairo_uint128_t I	_cairo_uint128_negate (cairo_uint128_t a);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   221
#define			_cairo_uint128_negative(a)  (_cairo_uint64_negative(a.hi))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   222
cairo_uint128_t I	_cairo_uint128_not (cairo_uint128_t a);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   223
169
bc06726969af fix typo and make sure we use uint64 native type by default.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 165
diff changeset
   224
#define			_cairo_uint128_to_int128(i)	(i)
164
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   225
#define			_cairo_int128_to_uint128(i)	(i)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   226
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   227
cairo_int128_t  I	_cairo_int32_to_int128 (int32_t i);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   228
cairo_int128_t  I	_cairo_int64_to_int128 (cairo_int64_t i);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   229
#define			_cairo_int128_to_int64(a)   ((cairo_int64_t) (a).lo)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   230
#define			_cairo_int128_to_int32(a)   _cairo_int64_to_int32(_cairo_int128_to_int64(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   231
#define			_cairo_int128_add(a,b)	    _cairo_uint128_add(a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   232
#define			_cairo_int128_sub(a,b)	    _cairo_uint128_sub(a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   233
#define			_cairo_int128_mul(a,b)	    _cairo_uint128_mul(a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   234
cairo_int128_t I _cairo_int64x64_128_mul (cairo_int64_t a, cairo_int64_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   235
#define			_cairo_int128_lsl(a,b)	    _cairo_uint128_lsl(a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   236
#define			_cairo_int128_rsl(a,b)	    _cairo_uint128_rsl(a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   237
#define			_cairo_int128_rsa(a,b)	    _cairo_uint128_rsa(a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   238
int 	        I	_cairo_int128_lt (cairo_int128_t a, cairo_int128_t b);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   239
#define			_cairo_int128_eq(a,b)	    _cairo_uint128_eq (a,b)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   240
#define			_cairo_int128_negate(a)	    _cairo_uint128_negate(a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   241
#define			_cairo_int128_negative(a)   (_cairo_uint128_negative(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   242
#define			_cairo_int128_not(a)	    _cairo_uint128_not(a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   243
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   244
#else	/* !HAVE_UINT128_T */
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   245
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   246
typedef uint128_t	cairo_uint128_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   247
typedef int128_t	cairo_int128_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   248
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   249
#define			_cairo_uint32_to_uint128(i) ((uint128_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   250
#define			_cairo_uint64_to_uint128(i) ((uint128_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   251
#define			_cairo_uint128_to_uint64(i) ((uint64_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   252
#define			_cairo_uint128_to_uint32(i) ((uint32_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   253
#define			_cairo_uint128_add(a,b)	    ((a) + (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   254
#define			_cairo_uint128_sub(a,b)	    ((a) - (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   255
#define			_cairo_uint128_mul(a,b)	    ((a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   256
#define			_cairo_uint64x64_128_mul(a,b)	((uint128_t) (a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   257
#define			_cairo_uint128_lsl(a,b)	    ((a) << (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   258
#define			_cairo_uint128_rsl(a,b)	    ((uint128_t) (a) >> (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   259
#define			_cairo_uint128_rsa(a,b)	    ((uint128_t) ((int128_t) (a) >> (b)))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   260
#define			_cairo_uint128_lt(a,b)	    ((a) < (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   261
#define			_cairo_uint128_eq(a,b)	    ((a) == (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   262
#define			_cairo_uint128_negate(a)    ((uint128_t) -((int128_t) (a)))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   263
#define			_cairo_uint128_negative(a)  ((int128_t) (a) < 0)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   264
#define			_cairo_uint128_not(a)	    (~(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   265
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   266
#define			_cairo_uint128_to_int128(i) ((int128_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   267
#define			_cairo_int128_to_uint128(i) ((uint128_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   268
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   269
#define			_cairo_int32_to_int128(i)   ((int128_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   270
#define			_cairo_int64_to_int128(i)   ((int128_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   271
#define			_cairo_int128_to_int64(i)   ((int64_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   272
#define			_cairo_int128_to_int32(i)   ((int32_t) (i))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   273
#define			_cairo_int128_add(a,b)	    ((a) + (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   274
#define			_cairo_int128_sub(a,b)	    ((a) - (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   275
#define			_cairo_int128_mul(a,b)	    ((a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   276
#define			_cairo_int64x64_128_mul(a,b) ((int128_t) (a) * (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   277
#define			_cairo_int128_lt(a,b)	    ((a) < (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   278
#define			_cairo_int128_eq(a,b)	    ((a) == (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   279
#define			_cairo_int128_lsl(a,b)	    ((a) << (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   280
#define			_cairo_int128_rsl(a,b)	    ((int128_t) ((uint128_t) (a) >> (b)))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   281
#define			_cairo_int128_rsa(a,b)	    ((int128_t) (a) >> (b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   282
#define			_cairo_int128_negate(a)	    (-(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   283
#define			_cairo_int128_negative(a)   ((a) < 0)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   284
#define			_cairo_int128_not(a)	    (~(a))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   285
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   286
#endif	/* HAVE_UINT128_T */
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   287
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   288
typedef struct _cairo_uquorem128 {
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   289
    cairo_uint128_t	quo;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   290
    cairo_uint128_t	rem;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   291
} cairo_uquorem128_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   292
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   293
typedef struct _cairo_quorem128 {
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   294
    cairo_int128_t	quo;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   295
    cairo_int128_t	rem;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   296
} cairo_quorem128_t;
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   297
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   298
cairo_uquorem128_t I
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   299
_cairo_uint128_divrem (cairo_uint128_t num, cairo_uint128_t den);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   300
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   301
cairo_quorem128_t I
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   302
_cairo_int128_divrem (cairo_int128_t num, cairo_int128_t den);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   303
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   304
cairo_uquorem64_t I
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   305
_cairo_uint_96by64_32x64_divrem (cairo_uint128_t num,
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   306
				 cairo_uint64_t  den);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   307
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   308
cairo_quorem64_t I
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   309
_cairo_int_96by64_32x64_divrem (cairo_int128_t num,
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   310
				cairo_int64_t  den);
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   311
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   312
#define			_cairo_uint128_le(a,b)	    (!_cairo_uint128_gt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   313
#define			_cairo_uint128_ne(a,b)	    (!_cairo_uint128_eq(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   314
#define			_cairo_uint128_ge(a,b)	    (!_cairo_uint128_lt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   315
#define			_cairo_uint128_gt(a,b)	    _cairo_uint128_lt(b,a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   316
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   317
#define			_cairo_int128_le(a,b)	    (!_cairo_int128_gt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   318
#define			_cairo_int128_ne(a,b)	    (!_cairo_int128_eq(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   319
#define			_cairo_int128_ge(a,b)	    (!_cairo_int128_lt(a,b))
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   320
#define			_cairo_int128_gt(a,b)	    _cairo_int128_lt(b,a)
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   321
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   322
#undef I
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   323
165
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
   324
#ifdef __cplusplus
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
   325
};
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
   326
#endif
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
   327
33a2c446e6dc add needed configure magic and header includes
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 164
diff changeset
   328
164
ec0f3aa7f047 import cairo code
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
   329
#endif /* CAIRO_WIDEINT_H */