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
57typedef signed char int8;
58typedef signed short int16;
59#if defined(INOS_64)
60/* 64-bit */
61#if defined(INOS_WINDOWS)
62typedef signed long int32;
63typedef signed long long int64;
64typedef signed long long intid;
65#else
66typedef signed int int32;
67typedef signed long int64;
68typedef signed long intid;
69#endif
70#else // end of 64 bit
71/* 32-bit */
72typedef signed long int32;
73typedef signed long long int64;
74typedef 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
95typedef unsigned char uint8;
96typedef unsigned short uint16;
97#if defined(INOS_64)
98/* 64-bit */
99#if defined(INOS_WINDOWS)
100typedef unsigned long uint32;
101typedef unsigned long long uint64;
102typedef unsigned long long uintid;
103#else
104typedef unsigned int uint32;
105typedef unsigned long uint64;
106typedef unsigned long uintid;
107#endif
108#else // end of 64 bit
109/* 32-bit */
110typedef unsigned long uint32;
111typedef unsigned long long uint64;
112typedef 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 */
117typedef 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 */
121typedef 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)
140typedef unsigned short ushort; /* System V compatibility */
141typedef unsigned int uint; /* System V compatibility */
142typedef 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
164typedef 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
176typedef char inosName[16];
177typedef char inosName32[32];
178typedef char inosName64[64];
179typedef char inosName128[128];
180
183#if defined(INOS_KERNEL_MSGID_64)
184typedef int64 tMsgId;
185#else
186typedef int32 tMsgId;
187#endif
188
190typedef uint32 tUid;
191
192struct tTaskId {
193
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
234 {
235 return (m_uId&(DF_INOS_MAX_CORES-1));
236 }
237
238};
239
240#ifdef INOS_MULTICORE
241struct 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
280 int64 Adjust;
282 #if defined(INOS_DESKTOP)
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
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
Definition cinosmcmodule.h:1900
Definition cinostask.h:52
The definition file.
#define DF_INOS_MAX_CORES
Definition inosdefine.h:164
uint32 tUid
Definition inostype.h:190
SINOSNanoSeconds __nanoSeconds
the one and only
int32 tMsgId
Definition inostype.h:186
Definition inostype.h:258
Definition inostype.h:272
uint32 PerTick
nanoseconds per tick
Definition inostype.h:286
uint64 Base
utc nanoseconds at system boot (UNIX timestamp, nanoseconds since 01.01.1970)
Definition inostype.h:277
int64 Correction
actual nanoseconds correction
Definition inostype.h:279
Definition inostype.h:164
Definition inostype.h:192
uintid m_uId
task id (bits log2(DF_INOS_MAX_CORES) contain the core id the task is running on)
Definition inostype.h:195
class CINOSTask * GetTask()
get task
Definition inostype.h:227
void SetId(uintid auId)
set id
Definition inostype.h:221
uint32 GetCoreId()
get task
Definition inostype.h:233