1 /****************************************************************************
3 * GNAT COMPILER COMPONENTS *
9 * Copyright (C) 1992-2018, Free Software Foundation, Inc. *
11 * GNAT is free software; you can redistribute it and/or modify it under *
12 * terms of the GNU General Public License as published by the Free Soft- *
13 * ware Foundation; either version 3, or (at your option) any later ver- *
14 * sion. GNAT is distributed in the hope that it will be useful, but WITH- *
15 * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
16 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License *
17 * for more details. You should have received a copy of the GNU General *
18 * Public License distributed with GNAT; see file COPYING3. If not, go to *
19 * http://www.gnu.org/licenses for a complete copy of the license. *
21 * GNAT was originally developed by the GNAT team at New York University. *
22 * Extensive contributions were provided by Ada Core Technologies Inc. *
24 ****************************************************************************/
26 /* This file corresponds to the Ada package specification Uintp. It was
27 created manually from the files uintp.ads and uintp.adb. */
33 /* Support for universal integer arithmetic */
41 /* See if a Uint is within the range of an integer. */
42 #define UI_Is_In_Int_Range uintp__ui_is_in_int_range
43 extern Boolean
UI_Is_In_Int_Range (Uint
);
45 /* Obtain Char_Code value from Uint input. Value must be in range. */
46 #define UI_To_CC uintp__ui_to_cc
47 extern Char_Code
UI_To_CC (Uint
);
49 /* Convert a Char_Code into a Uint. */
50 #define UI_From_CC uintp__ui_from_cc
51 extern Uint
UI_From_CC (Char_Code
);
53 /* Obtain Int value from Uint input. Abort if the result is out of range. */
54 #define UI_To_Int uintp__ui_to_int
55 extern Int
UI_To_Int (Uint
);
57 /* Similarly, but return a GCC INTEGER_CST. */
58 extern tree
UI_To_gnu (Uint
, tree
);
60 /* Convert an Int into a Uint. */
61 #define UI_From_Int uintp__ui_from_int
62 extern Uint
UI_From_Int (int);
64 /* Similarly, but take a GCC INTEGER_CST. */
65 extern Uint
UI_From_gnu (tree
);
67 /* A constant value indicating a missing or unset Uint value. */
68 #define UI_No_Uint uintp__no_uint
69 extern const Uint UI_No_Uint
;
71 /* Uint values are represented as multiple precision integers stored in a
72 multi-digit format using UI_Base as the base. This value is chosen so
73 that the product UI_Base*UI_Base is within the range of Int values. */
74 #define UI_Base uintp__base
75 extern const int UI_Base
;
77 /* Types for the fat pointer of Int vectors and the template it points to. */
78 typedef struct {int Low_Bound
, High_Bound
; } Vector_Template
;
79 typedef struct {const int *Array
; Vector_Template
*Bounds
; }
80 __attribute ((aligned (sizeof (char *) * 2))) Int_Vector
;
82 /* Create and return the Uint value from the Int vector. */
83 #define Vector_To_Uint uintp__vector_to_uint
84 extern Uint
Vector_To_Uint (Int_Vector
, Boolean
);
86 /* Compare integer values for equality. */
87 #define UI_Eq uintp__ui_eq
88 extern Boolean
UI_Eq (Uint
, Uint
);
90 /* Compare integer values for less than. */
91 #define UI_Lt uintp__ui_lt
92 extern Boolean
UI_Lt (Uint
, Uint
);
94 /* Universal integers are represented by the Uint type which is an index into
95 the Uints_Ptr table containing Uint_Entry values. A Uint_Entry contains an
96 index and length for getting the "digits" of the universal integer from the
99 For efficiency, this method is used only for integer values larger than the
100 constant Uint_Bias. If a Uint is less than this constant, then it contains
101 the integer value itself. The origin of the Uints_Ptr table is adjusted so
102 that a Uint value of Uint_Bias indexes the first element. */
104 #define Uints_Ptr (uintp__uints__table - Uint_Table_Start)
105 extern struct Uint_Entry
*uintp__uints__table
;
107 #define Udigits_Ptr uintp__udigits__table
108 extern int *uintp__udigits__table
;