INOS
inostype.h
Go to the documentation of this file.
1 //******************************************************************************
26 //******************************************************************************
27 
28 #if !defined( INC_INOSTYPE_H )
29 #define INC_INOSTYPE_H
30 
31 //------------------------------------------------------------------------------
32 // includes
33 //------------------------------------------------------------------------------
34 
35 #include <inosdefine.h>
36 
37 #if defined(INOS_WINDOWS)
38 #include <inttypes.h>
39 #endif
40 
41 //------------------------------------------------------------------------------
42 // type definitions
43 //------------------------------------------------------------------------------
44 
45 #if !defined( LONG_LONG_MAX )
46 #define LONG_LONG_MAX __LONG_LONG_MAX__
47 #endif
48 #if !defined( LONG_LONG_MIN )
49 #define LONG_LONG_MIN (-__LONG_LONG_MAX__-1LL)
50 #endif
51 #if !defined( ULONG_LONG_MAX )
52 #define ULONG_LONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL)
53 #endif
54 
55 // --- signed integers ---------------------------------------------------------
56 
57 typedef signed char int8;
58 typedef signed short int16;
59 #if defined(INOS_64)
60 /* 64-bit */
61 #if defined(INOS_WINDOWS)
62 typedef signed long int32;
63 typedef signed long long int64;
64 typedef signed long long intid;
65 #else
66 typedef signed int int32;
67 typedef signed long int64;
68 typedef signed long intid;
69 #endif
70 #else // end of 64 bit
71 /* 32-bit */
72 typedef signed long int32;
73 typedef signed long long int64;
74 typedef signed long intid;
75 #endif
76 
77 #define INT8MIN ((int8)0x80)
78 #define INT8MAX ((int8)0x7F)
79 #define INT16MIN ((int16)0x8000)
80 #define INT16MAX ((int16)0x7FFF)
81 #define INT32MIN ((int32)0x80000000L)
82 #define INT32MAX ((int32)0x7FFFFFFFL)
83 #define INT64MIN ((int64)0x8000000000000000LL)
84 #define INT64MAX ((int64)0x7FFFFFFFFFFFFFFFLL)
85 #if defined(INOS_64)
86 #define INTNBRMIN INT64MIN
87 #define INTNBRMAX INT64MAX
88 #else
89 #define INTNBRMIN INT32MIN
90 #define INTNBRMAX INT32MAX
91 #endif
92 
93 // --- unsigned integers -------------------------------------------------------
94 
95 typedef unsigned char uint8;
96 typedef unsigned short uint16;
97 #if defined(INOS_64)
98 /* 64-bit */
99 #if defined(INOS_WINDOWS)
100 typedef unsigned long uint32;
101 typedef unsigned long long uint64;
102 typedef unsigned long long uintid;
103 #else
104 typedef unsigned int uint32;
105 typedef unsigned long uint64;
106 typedef unsigned long uintid;
107 #endif
108 #else // end of 64 bit
109 /* 32-bit */
110 typedef unsigned long uint32;
111 typedef unsigned long long uint64;
112 typedef unsigned long uintid;
113 #endif
114 /* intnbr can be used if a signed integer is required which has for sure the
115  * size of the system (32 bit on a 32 bit system and 64 bit on a 64 bit system)
116  */
117 typedef intptr intnbr;
118 /* uintnbr can be used if an unsigned integer is required which has for sure the
119  * size of the system (32 bit on a 32 bit system and 64 bit on a 64 bit system)
120  */
121 typedef uintptr uintnbr;
122 
123 #define UINT8MIN ((uint8)0x00)
124 #define UINT8MAX ((uint8)0xFF)
125 #define UINT16MIN ((uint16)0x0000)
126 #define UINT16MAX ((uint16)0xFFFF)
127 #define UINT32MIN ((uint32)0x00000000UL)
128 #define UINT32MAX ((uint32)0xFFFFFFFFUL)
129 #define UINT64MIN ((uint64)0x0000000000000000ULL)
130 #define UINT64MAX ((uint64)0xFFFFFFFFFFFFFFFFULL)
131 #if defined(INOS_64)
132 #define UINTNBRMIN UINT64MIN
133 #define UINTNBRMAX UINT64MAX
134 #else
135 #define UINTNBRMIN UINT32MIN
136 #define UINTNBRMAX UINT32MAX
137 #endif
138 
139 #if defined(INOS_WINDOWS)
140 typedef unsigned short ushort; /* System V compatibility */
141 typedef unsigned int uint; /* System V compatibility */
142 typedef unsigned long ulong; /* System V compatibility */
143 #endif
144 
145 // --- pseudo floating point types real32 / real64 -----------------------------
146 
147 #include <float.h>
148 #define real64 double
149 #define REAL64(arValue) double(arValue)
150 #define REAL64MIN (-DBL_MAX)
151 #define REAL64MAX DBL_MAX
152 #define real32 float
153 #define REAL32(arValue) float(arValue)
154 #define REAL32MIN (-FLT_MAX)
155 #define REAL32MAX FLT_MAX
156 
157 // --- fixed comma numbers -----------------------------------------------------
158 
159 #include <inosfixed32.h>
160 #include <inosfixed64.h>
161 
162 // --- miscelanselous ----------------------------------------------------------
163 
164 typedef struct _INOSTime {
165  uint16 mYear;
166  uint16 mMonth;
167  uint16 mDayOfWeek;
168  uint16 mDayOfMonth;
169  uint16 mDayOfYear;
170  uint16 mHour;
171  uint16 mMinute;
172  uint16 mSecond;
173  uint16 mMillisecond;
174 } INOSTime;
175 
176 typedef char inosName[16];
177 typedef char inosName32[32];
178 typedef char inosName64[64];
179 typedef char inosName128[128];
180 
183 #if defined(INOS_KERNEL_MSGID_64)
184 typedef int64 tMsgId;
185 #else
186 typedef int32 tMsgId;
187 #endif
188 
190 typedef uint32 tUid;
191 
192 struct tTaskId {
193 
195  uintid m_uId;
196 
197  tTaskId()
198  {
199  m_uId = 0;
200  }
201  explicit tTaskId(uintid auId)
202  {
203  m_uId = auId;
204  }
205  tTaskId(class CINOSTask* apTask, uint32 auCoreId)
206  {
207  m_uId = (uintid) apTask + auCoreId;
208  }
209 
210  operator uintid()
211  { return m_uId; };
212  operator class CINOSTask*()
213  { return (CINOSTask*) (m_uId&-DF_INOS_MAX_CORES); };
214 
215  friend int operator!=(tTaskId aId1, tTaskId aId2)
216  { return aId1.m_uId != aId2.m_uId; };
217  friend int operator==(tTaskId aId1, tTaskId aId2)
218  { return aId1.m_uId == aId2.m_uId; };
219 
221  inline void SetId(uintid auId)
222  {
223  m_uId = auId;
224  }
225 
227  inline class CINOSTask* GetTask()
228  {
229  return (CINOSTask*) (m_uId&-DF_INOS_MAX_CORES);
230  }
231 
233  inline uint32 GetCoreId()
234  {
235  return (m_uId&(DF_INOS_MAX_CORES-1));
236  }
237 
238 };
239 
240 #ifdef INOS_MULTICORE
241 struct SINOSCoreLock
242 { // ensure the lock size is at least a cache line (64 bytes on P50xx)
243  // otherwise the lwarx/stwcx. wouldn't work correctly
244  uint32 m_uLock[16] = {0};
245  // reset lock
246  void Reset() { m_uLock[0] = 0;};
247  // get lock value
248  uint32 GetValue() { return m_uLock[0];};
249  // get lock address
250  uint32* GetAddr() { return &m_uLock[0];};
251 #ifdef INOS_TIMINIG_CHECKS_CORELOCK
252  uint32 m_uTimestamp;
253  uint32& GetTimeStamp() { return m_uTimestamp; }
254 #endif
255 };
256 #else
258 {
259  uint32 m_uLock = 0;
260  // reset lock
261  void Reset() { m_uLock = 0;};
262  // get lock value
263  uint32 GetValue() { return m_uLock;};
264  // get lock address
265  uint32* GetAddr() { return &m_uLock;};
266 };
267 #endif
268 
269 // --- global nano seconds -----------------------------------------------------
270 //
272 {
273  // IMPORTANT: do NOT change the order or anything else unless you really know
274  // what you are doing!
275 
277  uint64 Base;
279  int64 Correction;
280  int64 Adjust;
282  #if defined(INOS_DESKTOP) || defined(INOS_CPU_AGILEX5)
283  // there are systems, where one tick is e.g. 41.6666666 ns (e.g. Apple M1 on Mac Studio)
284  double PerTick;
285  #else
286  uint32 PerTick;
287  #endif
288 };
291 //
292 // --- format macros -----------------------------------------------------
293 //
294 // --- 8 bit -------------------------------------------------------------
295 
296 #define PF08 ""
297 #define PFI08 "%i" // -128 ... 127
298 #define PFU08 "%u" // 0 ... 255
299 #define PF02U08 "%02u" // 00 ... 255
300 #define PF03U08 "%03u" // 000 ... 255
301 #define PF2U08 "%2u" // ' 0' ... 255
302 #define PF3U08 "%3u" // ' 0' ... 255
303 #define PFx08 "%02x" // 00 ... ff
304 #define PFX08 "%02X" // 00 ... FF
305 #define PF0x08 "0x%02x" // 0x00 ... 0xff
306 #define PF0X08 "0x%02X" // 0x00 ... 0xFF
307 
308 // --- 16 bit ------------------------------------------------------------
309 
310 #define PF16 ""
311 #define PFI16 "%i" // -32768 ... 32767
312 #define PFU16 "%u" // 0 ... 65535
313 #define PF02U16 "%02u" // 00 ... 65535
314 #define PF03U16 "%03u" // 000 ... 65535
315 #define PF04U16 "%04u" // 0000 ... 65535
316 #define PF05U16 "%05u" // 00000 ... 65535
317 #define PF2U16 "%2u" // ' 0' ... 65535
318 #define PF3U16 "%3u" // ' 0' ... 65535
319 #define PF4U16 "%4u" // ' 0' ... 65535
320 #define PF5U16 "%5u" // ' 0' ... 65535
321 #define PFx16 "%04x" // 0000 ... ffff
322 #define PFX16 "%04X" // 0000 ... FFFF
323 #define PF0x16 "0x%04x" // 0x0000 ... 0xffff
324 #define PF0X16 "0x%04X" // 0x0000 ... 0xFFFF
325 
326 // --- 32 bit ------------------------------------------------------------
327 
328 #if defined(INOS_64)
329 #if defined(INOS_WINDOWS)
330 #define PF32 "l"
331 #define PFI32 "%li" // -2147483648 ... 2147483647
332 #define PFU32 "%lu" // 0 ... 4294967295
333 #define PF02U32 "%02lu" // 00 ... 4294967295
334 #define PF03U32 "%03lu" // 000 ... 4294967295
335 #define PF04U32 "%04lu" // 0000 ... 4294967295
336 #define PF05U32 "%05lu" // 00000 ... 4294967295
337 #define PF06U32 "%06lu" // 000000 ... 4294967295
338 #define PF07U32 "%07lu" // 0000000 ... 4294967295
339 #define PF08U32 "%08lu" // 00000000 ... 4294967295
340 #define PF09U32 "%09lu" // 000000000 ... 4294967295
341 #define PF010U32 "%010lu" // 0000000000 ... 4294967295
342 #define PF2U32 "%2lu" // ' 0' ... 4294967295
343 #define PF3U32 "%3lu" // ' 0' ... 4294967295
344 #define PF4U32 "%4lu" // ' 0' ... 4294967295
345 #define PF5U32 "%5lu" // ' 0' ... 4294967295
346 #define PF6U32 "%6lu" // ' 0' ... 4294967295
347 #define PF7U32 "%7lu" // ' 0' ... 4294967295
348 #define PF8U32 "%8lu" // ' 0' ... 4294967295
349 #define PF9U32 "%9lu" // ' 0' ... 4294967295
350 #define PF10U32 "%10lu" // ' 0' ... 4294967295
351 #define PFx32 "%08lx" // 00000000 ... ffffffff
352 #define PFX32 "%08lX" // 00000000 ... FFFFFFFF
353 #define PF0x32 "0x%08lx" // 0x00000000 ... 0xffffffff
354 #define PF0X32 "0x%08lX" // 0x00000000 ... 0xFFFFFFFF
355 #define PFPTR "%016" PRIXPTR
356 #define PF0xPTR "0x%016" PRIXPTR
357 #define SFI32 PFI32
358 #define SFU32 PFU32
359 #define SFx32 "%lx"
360 #define SFX32 "%lX"
361 #define SFPTR "%016llX"
362 #define SF0xPTR "0x%016llX"
363 #else
364 #define PF32 "l"
365 #define PFI32 "%i" // -2147483648 ... 2147483647
366 #define PFU32 "%u" // 0 ... 4294967295
367 #define PF02U32 "%02u" // 00 ... 4294967295
368 #define PF03U32 "%03u" // 000 ... 4294967295
369 #define PF04U32 "%04u" // 0000 ... 4294967295
370 #define PF05U32 "%05u" // 00000 ... 4294967295
371 #define PF06U32 "%06u" // 000000 ... 4294967295
372 #define PF07U32 "%07u" // 0000000 ... 4294967295
373 #define PF08U32 "%08u" // 00000000 ... 4294967295
374 #define PF09U32 "%09u" // 000000000 ... 4294967295
375 #define PF010U32 "%010u" // 0000000000 ... 4294967295
376 #define PF2U32 "%2u" // ' 0' ... 4294967295
377 #define PF3U32 "%3u" // ' 0' ... 4294967295
378 #define PF4U32 "%4u" // ' 0' ... 4294967295
379 #define PF5U32 "%5u" // ' 0' ... 4294967295
380 #define PF6U32 "%6u" // ' 0' ... 4294967295
381 #define PF7U32 "%7u" // ' 0' ... 4294967295
382 #define PF8U32 "%8u" // ' 0' ... 4294967295
383 #define PF9U32 "%9u" // ' 0' ... 4294967295
384 #define PF10U32 "%10u" // ' 0' ... 4294967295
385 #define PFx32 "%08x" // 00000000 ... ffffffff
386 #define PFX32 "%08X" // 00000000 ... FFFFFFFF
387 #define PF0x32 "0x%08x" // 0x00000000 ... 0xffffffff
388 #define PF0X32 "0x%08X" // 0x00000000 ... 0xFFFFFFFF
389 #define PFPTR "%016lX" // 00000000 ... FFFFFFFF
390 #define PF0xPTR "0x%016lX" // 0x00000000 ... 0xFFFFFFFF
391 #define SFI32 PFI32
392 #define SFU32 PFU32
393 #define SFx32 "%x"
394 #define SFX32 "%X"
395 #define SFPTR PFPTR
396 #define SF0xPTR PF0xPTR
397 #endif
398 #else
399 #define PF32 "l"
400 #define PFI32 "%li" // -2147483648 ... 2147483647
401 #define PFU32 "%lu" // 0 ... 4294967295
402 #define PF02U32 "%02lu" // 00 ... 4294967295
403 #define PF03U32 "%03lu" // 000 ... 4294967295
404 #define PF04U32 "%04lu" // 0000 ... 4294967295
405 #define PF05U32 "%05lu" // 00000 ... 4294967295
406 #define PF06U32 "%06lu" // 000000 ... 4294967295
407 #define PF07U32 "%07lu" // 0000000 ... 4294967295
408 #define PF08U32 "%08lu" // 00000000 ... 4294967295
409 #define PF09U32 "%09lu" // 000000000 ... 4294967295
410 #define PF010U32 "%010lu" // 0000000000 ... 4294967295
411 #define PF2U32 "%2lu" // ' 0' ... 4294967295
412 #define PF3U32 "%3lu" // ' 0' ... 4294967295
413 #define PF4U32 "%4lu" // ' 0' ... 4294967295
414 #define PF5U32 "%5lu" // ' 0' ... 4294967295
415 #define PF6U32 "%6lu" // ' 0' ... 4294967295
416 #define PF7U32 "%7lu" // ' 0' ... 4294967295
417 #define PF8U32 "%8lu" // ' 0' ... 4294967295
418 #define PF9U32 "%9lu" // ' 0' ... 4294967295
419 #define PF10U32 "%10lu" // ' 0' ... 4294967295
420 #define PFx32 "%08lx" // 00000000 ... ffffffff
421 #define PFX32 "%08lX" // 00000000 ... FFFFFFFF
422 #define PF0x32 "0x%08lx" // 0x00000000 ... 0xffffffff
423 #define PF0X32 "0x%08lX" // 0x00000000 ... 0xFFFFFFFF
424 #define PFPTR "%08lX" // 00000000 ... FFFFFFFF
425 #define PF0xPTR "0x%08lX" // 0x00000000 ... 0xFFFFFFFF
426 #define SFI32 PFI32
427 #define SFU32 PFU32
428 #define SFx32 "%lx"
429 #define SFX32 "%lX"
430 #define SFPTR PFPTR
431 #define SF0xPTR PF0xPTR
432 #endif
433 
434 // --- 64 bit ------------------------------------------------------------
435 
436 #if defined(INOS_WINDOWS)
437 #define PF64 "I64"
438 #define PFI64 "%" PRId64
439 #define PFU64 "%" PRIu64
440 #define PF_x64 "%llx"
441 #define PFx64 "%016" PRIx64
442 #define PFX64 "%016" PRIX64
443 #define PF0x64 "0x%016" PRIx64
444 #define PF0X64 "0x%016" PRIX64
445 #define SFI64 "%lli"
446 #define SFU64 "%llu"
447 #define SFx64 "%016llx"
448 #define SFX64 "%016llX"
449 #define SF0x64 "0x%016llx"
450 #define SF0X64 "0x%016llX"
451 #else
452 #if defined(INOS_64)
453 #define PF64 "l"
454 #define PFI64 "%li"
455 #define PFU64 "%lu"
456 #define PF_x64 "%lx"
457 #define PFx64 "%016lx"
458 #define PFX64 "%016lX"
459 #define PF0x64 "0x%016lx"
460 #define PF0X64 "0x%016lX"
461 #else
462 #define PF64 "ll"
463 #define PFI64 "%lli"
464 #define PFU64 "%llu"
465 #define PF_x64 "%llx"
466 #define PFx64 "%016llx"
467 #define PFX64 "%016llX"
468 #define PF0x64 "0x%016llx"
469 #define PF0X64 "0x%016llX"
470 #endif
471 #define SFI64 PFI64
472 #define SFU64 PFU64
473 #define SFx64 PFx64
474 #define SFX64 PFX64
475 #define SF0x64 PF0x64
476 #define SF0X64 PF0X64
477 #endif
478 
479 // --- misc (32 bit on a 32 bit system, 64 bit on a 64 bit system) -----
480 
481 #ifdef INOS_WINDOWS
482 #if defined(INOS_64)
483 #define PFINBR "%I64i"
484 #define PFUNBR "%I64u"
485 #define SFINBR "%lli"
486 #define SFUNBR "%llu"
487 #else
488 #define PFINBR "%li"
489 #define PFUNBR "%lu"
490 #define SFINBR PFINBR
491 #define SFUNBR PFUNBR
492 #endif
493 #else
494 #define PFINBR "%li"
495 #define PFUNBR "%lu"
496 #define SFINBR PFINBR
497 #define SFUNBR PFUNBR
498 #endif
499 #if defined(INOS_KERNEL_MSGID_64)
500 #define PFIID PFI64
501 #define PFUID PFU64
502 #define PFXID PFX64
503 #define SFXID SFX64
504 #define SFIID SFI64
505 #else
506 #define PFIID PFI32
507 #define PFUID PFU32
508 #define PFXID PFX32
509 #define SFXID PFX32
510 #define SFIID SFI32
511 #endif
512 
513 //------------------------------------------------------------------------------
514 // end of file
515 //------------------------------------------------------------------------------
516 
517 #endif // INC_INOSTYPE_H
tMsgId
int32 tMsgId
Definition: inostype.h:186
tTaskId::GetTask
class CINOSTask * GetTask()
get task
Definition: inostype.h:227
inosdefine.h
The definition file.
DF_INOS_MAX_CORES
#define DF_INOS_MAX_CORES
Definition: inosdefine.h:164
tTaskId::SetId
void SetId(uintid auId)
set id
Definition: inostype.h:221
SINOSCoreLock
Definition: inostype.h:257
tTaskId
Definition: inostype.h:192
__nanoSeconds
SINOSNanoSeconds __nanoSeconds
the one and only
SINOSNanoSeconds
Definition: inostype.h:271
SINOSNanoSeconds::PerTick
uint32 PerTick
nanoseconds per tick
Definition: inostype.h:286
tUid
uint32 tUid
Definition: inostype.h:190
SINOSNanoSeconds::Base
uint64 Base
utc nanoseconds at system boot (UNIX timestamp, nanoseconds since 01.01.1970)
Definition: inostype.h:277
tTaskId::GetCoreId
uint32 GetCoreId()
get task
Definition: inostype.h:233
_INOSTime
Definition: inostype.h:164
tTaskId::m_uId
uintid m_uId
task id (bits log2(DF_INOS_MAX_CORES) contain the core id the task is running on)
Definition: inostype.h:195
SINOSNanoSeconds::Correction
int64 Correction
actual nanoseconds correction
Definition: inostype.h:279
CINOSTask
Definition: cinostask.h:51