OpenASIP  2.0
BaseType.hh
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2009 Tampere University.
3 
4  This file is part of TTA-Based Codesign Environment (TCE).
5 
6  Permission is hereby granted, free of charge, to any person obtaining a
7  copy of this software and associated documentation files (the "Software"),
8  to deal in the Software without restriction, including without limitation
9  the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  and/or sell copies of the Software, and to permit persons to whom the
11  Software is furnished to do so, subject to the following conditions:
12 
13  The above copyright notice and this permission notice shall be included in
14  all copies or substantial portions of the Software.
15 
16  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  DEALINGS IN THE SOFTWARE.
23  */
24 /**
25  * @file BaseType.hh
26  * @author Pekka Jääskeläinen (pjaaskel-no.spam-cs.tut.fi) 2003
27  * @note This file is used in compiled simulation. Keep dependencies *clean*
28  *
29  * This file contains definitions of base data types such as Word, HalfWord,
30  * Byte. These types have fixed, machine-independent bit width. If no
31  * base type of the host machine that matches the required bit width
32  * is found, compilation fails. In this case, it is necessary to add
33  * new cases to the type definitions for the host machine at hand.
34  *
35  * If the host machine does not support IEC 559 (formerly, IEEE-754)
36  * floating point types as native built-in types, then the floating point
37  * type definitions should be replaced by abstract data types with all the
38  * operators applicable to floating-point types appropriately overloaded.
39  */
40 
41 #ifndef TTA_BASETYPE_HH
42 #define TTA_BASETYPE_HH
43 
44 #include "tce_config_public.h"
45 
46 #define SIZEOF_LONG 8
47 
48 #if SIZEOF_LONG == 8
49 typedef unsigned long LongWord;
50 typedef long SignedLongWord;
51 typedef unsigned long ULongWord;
52 typedef long SLongWord;
53 #else
54 typedef unsigned long long LongWord;
55 typedef long long SignedLongWord;
56 typedef unsigned long long ULongWord;
57 typedef long long SLongWord;
58 #endif
59 
60 
61 #if SIZEOF_FLOAT == 4
62 
63 /**
64  * Machine-independent definition of 4-byte single precision IEC 559
65  * floating point type.
66  */
67 typedef float Float;
68 
69 #else
70 #error Host machine size of float not 4 bytes as expected.
71 #endif
72 
73 #if SIZEOF_DOUBLE == 8
74 
75 /**
76  * Machine-independent definition of 8-byte double precision IEC 559
77  * floating point type.
78  */
79 typedef double Double;
80 
81 #else
82 #error Host machine size of double not 8 bytes as expected.
83 #endif
84 
85 #if SIZEOF_INT == 4
86 
87 /**
88  * Machine-independent definition of 4-byte unsigned word type.
89  */
90 typedef unsigned int Word;
91 
92 /**
93  * Machine-independent definition of 4-byte signed word type.
94  */
95 typedef int SignedWord;
96 
97 
98 #else
99 #error Host machine size of int not 4 bytes as expected.
100 #endif
101 
102 #if SIZEOF_SHORT == 2
103 
104 /**
105  * Machine-independent definition of 2-byte half-word type.
106  */
107 typedef unsigned short int HalfWord;
108 
109 #else
110 #error Host machine size of short int not 2 bytes as expected.
111 #endif
112 
113 /**
114  * Machine-independent definition of byte type.
115  */
116 typedef unsigned char Byte;
117 
118 /**
119  * HOST_WORDS_BIGENDIAN is 1 when the host machine lays out the most
120  * significant byte of the word at the lowest memory address.
121  */
122 #ifndef WORDS_BIGENDIAN
123 #define HOST_BIGENDIAN 0
124 #define WORDS_BIGENDIAN 0
125 #else
126 #ifndef HOST_BIGENDIAN
127 #define HOST_BIGENDIAN 1
128 #endif
129 #endif
130 
131 /**
132  * 32bit unsigned integer (alias for Word).
133  */
134 typedef Word UInt32;
135 
136 const Byte BYTE_BITWIDTH = 8*sizeof(Byte);
137 const Byte HALFWORD_BITWIDTH = 8*sizeof(HalfWord);
138 const Byte WORD_BITWIDTH = 8*sizeof(Word);
139 const Byte LONGWORD_BITWIDTH = 8*sizeof(LongWord);
140 
141 /**
142  * Maximum sized unsigned integer used in simulation in 32-bit mode.
143  */
144 typedef Word UIntWord;
145 
146 /**
147  * Maximum sized signed integer used in simulation in 32-bit mode.
148  */
149 typedef SignedWord SIntWord;
150 
151 /**
152  * Maximum size of integer in simulator.
153  */
154 const Byte INT_WORD_SIZE = 8 * sizeof(UIntWord);
155 
156 /**
157  * A single-precision, IEC 559 floating-point number used in
158  * simulation.
159  */
160 typedef float FloatWord;
161 
162 /**
163  * A double-precision, IEC 559 floating-point number used in
164  * simulation.
165  */
166 typedef double DoubleWord;
167 
168 const Byte FLT_WORD_SIZE = 8 * sizeof(FloatWord);
169 const Byte DBL_WORD_SIZE = 8 * sizeof(DoubleWord);
170 
171 /*
172  * Instruction and data addresses are represented as regular unsigned 32 bit
173  * integers.
174  */
177 
178 /// Type for storing addresses to memory image.
180 
181 /// Type for storing a MAU (must be unsigned type!). This limits
182 /// the maximum size of the simulated minimum addressable unit in
183 /// the target's data memory.
185 
186 /// Type for storing simulation cycle counts.
187 typedef long long CycleCount;
188 
189 #endif
190 
UIntWord
Word UIntWord
Definition: BaseType.hh:144
InstructionAddress
UInt32 InstructionAddress
Definition: BaseType.hh:175
LONGWORD_BITWIDTH
const Byte LONGWORD_BITWIDTH
Definition: BaseType.hh:139
FLT_WORD_SIZE
const Byte FLT_WORD_SIZE
Definition: BaseType.hh:168
DataAddress
UInt32 DataAddress
Definition: BaseType.hh:176
Byte
unsigned char Byte
Definition: BaseType.hh:116
LongWord
unsigned long LongWord
Definition: BaseType.hh:49
MinimumAddressableUnit
Word MinimumAddressableUnit
Type for storing a MAU (must be unsigned type!). This limits the maximum size of the simulated minimu...
Definition: BaseType.hh:184
FloatWord
float FloatWord
Definition: BaseType.hh:160
SIntWord
SignedWord SIntWord
Definition: BaseType.hh:149
DoubleWord
double DoubleWord
Definition: BaseType.hh:166
INT_WORD_SIZE
const Byte INT_WORD_SIZE
Definition: BaseType.hh:154
AddressImage
UInt32 AddressImage
Type for storing addresses to memory image.
Definition: BaseType.hh:179
UInt32
Word UInt32
Definition: BaseType.hh:134
DBL_WORD_SIZE
const Byte DBL_WORD_SIZE
Definition: BaseType.hh:169
BYTE_BITWIDTH
const Byte BYTE_BITWIDTH
Definition: BaseType.hh:136
CycleCount
long long CycleCount
Type for storing simulation cycle counts.
Definition: BaseType.hh:187
ULongWord
unsigned long ULongWord
Definition: BaseType.hh:51
HALFWORD_BITWIDTH
const Byte HALFWORD_BITWIDTH
Definition: BaseType.hh:137
SignedLongWord
long SignedLongWord
Definition: BaseType.hh:50
SLongWord
long SLongWord
Definition: BaseType.hh:52
WORD_BITWIDTH
const Byte WORD_BITWIDTH
Definition: BaseType.hh:138