summaryrefslogtreecommitdiff
path: root/include/libc
diff options
context:
space:
mode:
Diffstat (limited to 'include/libc')
-rw-r--r--include/libc/assert.h23
-rw-r--r--include/libc/stdbool.h30
-rw-r--r--include/libc/stddef.h25
-rw-r--r--include/libc/stdint.h29
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 */