summaryrefslogtreecommitdiff
path: root/source/base/base_core.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/base/base_core.h')
-rw-r--r--source/base/base_core.h73
1 files changed, 43 insertions, 30 deletions
diff --git a/source/base/base_core.h b/source/base/base_core.h
index 9d0f5e7..d708ce1 100644
--- a/source/base/base_core.h
+++ b/source/base/base_core.h
@@ -14,10 +14,31 @@
14 14
15//- architecture definitions 15//- architecture definitions
16 16
17#if defined(__arm__) || defined(__aarch64__) 17#if defined(__arm__) || defined(__aarch64__) || defined(_M_ARM64)
18#define ARCH_ARM 1 18#define ARCH_ARM 1
19#elif defined(__i386__) || defined(__x86_64__) 19#elif defined(__x86_64__) || defined(_M_X64)
20#define ARCH_x86_64 1 20#define ARCH_x86_64 1
21#elif defined(__i386__) || defined(_M_IX86)
22#define ARCH_X86 1
23#endif
24
25#ifndef COMPILER_MSVC
26#define COMPILER_MSVC 0
27#endif
28#ifndef COMPILER_CLANG
29#define COMPILER_CLANG 0
30#endif
31#ifndef COMPILER_GCC
32#define COMPILER_GCC 0
33#endif
34#ifndef ARCH_ARM
35#define ARCH_ARM 0
36#endif
37#ifndef ARCH_x86_64
38#define ARCH_x86_64 0
39#endif
40#ifndef ARCH_X86
41#define ARCH_X86 0
21#endif 42#endif
22 43
23//- compiler definitions 44//- compiler definitions
@@ -39,26 +60,27 @@
39#define Unused(x) (void)(x) 60#define Unused(x) (void)(x)
40#define Nil 0 61#define Nil 0
41 62
42#define Deprecated __attribute__((__deprecated__)) 63#define Deprecated [[deprecated]]
43 64
44//- breakpoints 65//- breakpoints
45#if ARCH_ARM
46#define breakpoint() __asm__ volatile("brk #0")
47#elif ARCH_x86_64
48
49#if COMPILER_GCC
50#define breakpoint() __asm__ volatile("int3")
51#endif
52#endif
53
54#if COMPILER_MSVC 66#if COMPILER_MSVC
55#include <intrin.h> 67#include <intrin.h>
56#define breakpoint() __debugbreak() 68#define breakpoint() __debugbreak()
69#define Trap() __fastfail(0)
70#elif COMPILER_CLANG
71#define breakpoint() __builtin_debugtrap()
72#define Trap() __builtin_trap()
73#elif ARCH_ARM
74#define breakpoint() __asm__ volatile("brk #0")
75#define Trap() __builtin_trap()
76#else
77#define breakpoint() __asm__ volatile("int3")
78#define Trap() __builtin_trap()
57#endif 79#endif
58 80
59//- 81//-
60#define MemCpy(dest, src, len) memcpy((dest), (src), (len)) 82#define MemCpy(dest, src, len) memcpy((dest), (src), (len))
61#define MemSet(dest, len) memset((dest), (1), (len)) 83#define MemSet(dest, val, len) memset((dest), (val), (len))
62#define MemSetZero(dest, len) memset((dest), (0), (len)) 84#define MemSetZero(dest, len) memset((dest), (0), (len))
63 85
64//- 86//-
@@ -107,11 +129,17 @@ typedef intptr_t smm;
107 129
108//- 130//-
109 131
110#define Assert(expression) _assert(expression) 132#define Assert(expression) do { \
133 if (!(expression)) { \
134 breakpoint(); \
135 Trap(); \
136 } \
137 } \
138 while(0)
111 139
112// NOTE: apparantly in macros this strinifys whataever you put after the # 140// NOTE: apparantly in macros this strinifys whataever you put after the #
113#define AssertLog(expression, ...) do { \ 141#define AssertLog(expression, ...) do { \
114 if (!expression) { \ 142 if (!(expression)) { \
115 Log("%s:%d: %s\n", __FILE__, __LINE__, #expression); \ 143 Log("%s:%d: %s\n", __FILE__, __LINE__, #expression); \
116 Log(__VA_ARGS__);\ 144 Log(__VA_ARGS__);\
117 Assert(false);\ 145 Assert(false);\
@@ -119,21 +147,6 @@ typedef intptr_t smm;
119 } \ 147 } \
120 while(0) 148 while(0)
121 149
122internal void _assert(bool expression);
123
124
125internal void _assert(bool expression)
126{
127
128 if (!expression) {
129 breakpoint();
130#if COMPILER_MSVC
131 __fastfail(0);
132#else
133 __builtin_trap(); // NOTE: always stop, breakpoint() is empty on arm without DEBUG
134#endif
135 }
136}
137 150
138 151
139 152