diff options
Diffstat (limited to 'include/libc')
| -rw-r--r-- | include/libc/assert.h | 23 | ||||
| -rw-r--r-- | include/libc/stdbool.h | 30 | ||||
| -rw-r--r-- | include/libc/stddef.h | 25 | ||||
| -rw-r--r-- | include/libc/stdint.h | 29 |
4 files changed, 107 insertions, 0 deletions
diff --git a/include/libc/assert.h b/include/libc/assert.h new file mode 100644 index 0000000..a9ecef0 --- /dev/null +++ b/include/libc/assert.h @@ -0,0 +1,23 @@ +#ifndef LIBC_ASSERT_H +#define LIBC_ASSERT_H + +// Runtime assertions + +// TODO + +// Static/compile-time assertions + +#if __STDC_VERSION__ >= 201112L +# define static_assert(cond, msg) _Static_assert(cond, msg) +#else +# ifndef GLUE +# define GLUE(a, b) a##b +# endif +# ifndef GLUE2 +# define GLUE2(a, b) GLUE(a, b) +# endif + +# define static_assert(cond, msg) typedef char GLUE2(static_assertion_failed, __LINE__)[(cond) ? 1 : -1] +#endif + +#endif diff --git a/include/libc/stdbool.h b/include/libc/stdbool.h new file mode 100644 index 0000000..d3f951b --- /dev/null +++ b/include/libc/stdbool.h @@ -0,0 +1,30 @@ +#ifndef LIBC_STDBOOL_H +#define LIBC_STDBOOL_H + +#ifndef __bool_true_false_are_defined +#define __bool_true_false_are_defined 1 +#endif + +#ifndef __cplusplus + +#if (__STDC_VERSION__ >= 199901L) && !defined(PERMUTER) +#define bool _Bool +#define false 0 +#define true 1 +#elif CC_CHECK +// A way to enforce bools to not be treated the same as s32 by the host compiler +// This has to be an ifdef because an enum-return-type doesn't match on `return (thing1) && (thing2);` patterns +typedef enum bool { + false, + true +} bool; +#else +typedef int bool; + +#define false 0 +#define true 1 +#endif + +#endif /* __cplusplus */ + +#endif /* STDBOOL */ diff --git a/include/libc/stddef.h b/include/libc/stddef.h new file mode 100644 index 0000000..8a48f55 --- /dev/null +++ b/include/libc/stddef.h @@ -0,0 +1,25 @@ +#ifndef LIBC_STDDEF_H +#define LIBC_STDDEF_H + +#ifndef NULL +#define NULL ((void *)0) +#endif + +#ifndef _PTRDIFF_T + #define _PTRDIFF_T + #if (_MIPS_SZLONG == 32) + typedef int ptrdiff_t; + #else + typedef long ptrdiff_t; + #endif +#endif + +#ifndef offsetof +#ifdef __GNUC__ +#define offsetof(structure, member) __builtin_offsetof(structure, member) +#else +#define offsetof(structure, member) ((size_t)&(((structure*)0)->member)) +#endif +#endif + +#endif diff --git a/include/libc/stdint.h b/include/libc/stdint.h new file mode 100644 index 0000000..854fd25 --- /dev/null +++ b/include/libc/stdint.h @@ -0,0 +1,29 @@ +#ifndef LIBC_STDINT_H +#define LIBC_STDINT_H + +#include "PR/ultratypes.h" + +typedef s32 intptr_t; +typedef u32 uintptr_t; + +#define INT8_MIN (-0x80) +#define INT16_MIN (-0x8000) +#define INT32_MIN (-0x80000000) +#define INT64_MIN (-0x8000000000000000) + +#define INT8_MAX 0x7F +#define INT16_MAX 0x7FFF +#define INT32_MAX 0x7FFFFFFF +#define INT64_MAX 0x7FFFFFFFFFFFFFFF + +#define UINT8_MAX 0xFF +#define UINT16_MAX 0xFFFF +#define UINT32_MAX 0xFFFFFFFF +#define UINT64_MAX 0xFFFFFFFFFFFFFFFF + +#define INTPTR_MIN (-0x80000000) +#define INTPTR_MAX 0x7FFFFFFF +#define UINTPTR_MAX 0xFFFFFFFF + + +#endif /* STDINT_H */ |
