diff --git a/include/mtl/target.hpp b/include/mtl/target.hpp new file mode 100644 index 0000000..9a186df --- /dev/null +++ b/include/mtl/target.hpp @@ -0,0 +1,27 @@ +#pragma once + +#ifndef __GNUC__ +#error Failed to create target macros. Compiler is not GCC. +#endif + +#define NOINLINE [[gnu::noinline]] +#define ALWAYS_INLINE [[gnu::always_inline]] inline + +#ifdef __arm__ + +#define TARGET_ARM_MODE _Pragma("GCC push_options") _Pragma("GCC target(\"arm\")") +#define TARGET_THUMB_MODE _Pragma("GCC push_options") _Pragma("GCC target(\"thumb\")") +#define TARGET_END_MODE _Pragma("GCC pop_options") +#define ARM_MODE [[gnu::target("arm")]] +#define THUMB_MODE [[gnu::target("thumb")]] + +#else + +#define TARGET_ARM_MODE +#define TARGET_THUMB_MODE +#define TARGET_END_MODE +#define ARM_MODE +#define THUMB_MODE + +#endif +