aboutsummaryrefslogtreecommitdiff
path: root/src/compiler.h
diff options
context:
space:
mode:
authorallusive-dev <[email protected]>2023-09-19 17:47:33 +1000
committerallusive-dev <[email protected]>2023-09-19 17:47:33 +1000
commita93aba600b1c5d019b680b9f4ff3fa85d5d43a60 (patch)
tree77f8152222655657472a70e0bfa413a0495dd555 /src/compiler.h
parentreset (diff)
downloadcompfy-a93aba600b1c5d019b680b9f4ff3fa85d5d43a60.tar.xz
compfy-a93aba600b1c5d019b680b9f4ff3fa85d5d43a60.zip
Fixed broken files/code and other errors
Diffstat (limited to 'src/compiler.h')
-rw-r--r--src/compiler.h124
1 files changed, 124 insertions, 0 deletions
diff --git a/src/compiler.h b/src/compiler.h
new file mode 100644
index 0000000..f146bd2
--- /dev/null
+++ b/src/compiler.h
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: MPL-2.0
+// Copyright (c) 2018 Yuxuan Shui <[email protected]>
+#pragma once
+
+#ifdef HAS_STDC_PREDEF_H
+#include <stdc-predef.h>
+#endif
+
+// clang-format off
+#define auto __auto_type
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#define likely_if(x) if (likely(x))
+#define unlikely_if(x) if (unlikely(x))
+
+#ifndef __has_attribute
+# if __GNUC__ >= 4
+# define __has_attribute(x) 1
+# else
+# define __has_attribute(x) 0
+# endif
+#endif
+
+#if __has_attribute(const)
+# define attr_const __attribute__((const))
+#else
+# define attr_const
+#endif
+
+#if __has_attribute(format)
+# define attr_printf(a, b) __attribute__((format(printf, a, b)))
+#else
+# define attr_printf(a, b)
+#endif
+
+#if __has_attribute(pure)
+# define attr_pure __attribute__((pure))
+#else
+# define attr_pure
+#endif
+
+#if __has_attribute(unused)
+# define attr_unused __attribute__((unused))
+#else
+# define attr_unused
+#endif
+
+#if __has_attribute(warn_unused_result)
+# define attr_warn_unused_result __attribute__((warn_unused_result))
+#else
+# define attr_warn_unused_result
+#endif
+// An alias for conveninence
+#define must_use attr_warn_unused_result
+
+#if __has_attribute(nonnull)
+# define attr_nonnull(...) __attribute__((nonnull(__VA_ARGS__)))
+# define attr_nonnull_all __attribute__((nonnull))
+#else
+# define attr_nonnull(...)
+# define attr_nonnull_all
+#endif
+
+#if __has_attribute(returns_nonnull)
+# define attr_ret_nonnull __attribute__((returns_nonnull))
+#else
+# define attr_ret_nonnull
+#endif
+
+#if __has_attribute(deprecated)
+# define attr_deprecated __attribute__((deprecated))
+#else
+# define attr_deprecated
+#endif
+
+#if __has_attribute(malloc)
+# define attr_malloc __attribute__((malloc))
+#else
+# define attr_malloc
+#endif
+
+#if __has_attribute(fallthrough)
+# define fallthrough() __attribute__((fallthrough))
+#else
+# define fallthrough()
+#endif
+
+#if __STDC_VERSION__ >= 201112L
+# define attr_noret _Noreturn
+#else
+# if __has_attribute(noreturn)
+# define attr_noret __attribute__((noreturn))
+# else
+# define attr_noret
+# endif
+#endif
+
+#if defined(__GNUC__) || defined(__clang__)
+# define unreachable __builtin_unreachable()
+#else
+# define unreachable do {} while(0)
+#endif
+
+#ifndef __has_include
+# define __has_include(x) 0
+#endif
+
+#if !defined(__STDC_NO_THREADS__) && __has_include(<threads.h>)
+# include <threads.h>
+#elif __STDC_VERSION__ >= 201112L
+# define thread_local _Thread_local
+#elif defined(__GNUC__) || defined(__clang__)
+# define thread_local __thread
+#else
+# define thread_local _Pragma("GCC error \"No thread local storage support\"") __error__
+#endif
+// clang-format on
+
+typedef unsigned long ulong;
+typedef unsigned int uint;
+
+static inline int attr_const popcntul(unsigned long a) {
+ return __builtin_popcountl(a);
+}