diff --git a/README.md b/README.md
index 4ad5a52..55b4643 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@ int main()
```
-
OS | ✅ Windows ✅ Linux ✅ macOS ✅ Android ✅ iOS ✅ FreeBSD ✅ NetBSD ✅ OpenBSD |
+OS | ✅ Windows ✅ Linux ✅ macOS ✅ Android ✅ iOS ✅ FreeBSD ✅ NetBSD ✅ OpenBSD ✅ SyterKit |
Compiler | ✅ GCC ✅ Clang ✅ MSVC ✅ MinGW |
diff --git a/ruapu.h b/ruapu.h
index 340d287..ee7132a 100644
--- a/ruapu.h
+++ b/ruapu.h
@@ -19,12 +19,11 @@ const char* const* ruapu_rua();
#ifdef RUAPU_IMPLEMENTATION
-#include
-#include
-
#if defined _WIN32
#include
+#include
+#include
#if WINAPI_FAMILY == WINAPI_FAMILY_APP
// uwp does not support veh :(
@@ -74,6 +73,8 @@ static int ruapu_detect_isa(const void* some_inst)
#elif defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__
#include
+#include
+#include
static int g_ruapu_sigill_caught = 0;
static sigjmp_buf g_ruapu_jmpbuf;
@@ -110,7 +111,27 @@ static int ruapu_detect_isa(ruapu_some_inst some_inst)
return g_ruapu_sigill_caught ? 0 : 1;
}
-#endif // defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__
+#elif defined __SYTERKIT__
+
+typedef void (*ruapu_some_inst)();
+#include
+
+static int g_ruapu_sigill_caught = 0;
+
+void arm32_do_undefined_instruction(struct arm_regs_t *regs)
+{
+ g_ruapu_sigill_caught = 1;
+ regs->pc += 4;
+}
+
+static int ruapu_detect_isa(ruapu_some_inst some_inst)
+{
+ g_ruapu_sigill_caught = 0;
+ some_inst();
+ return g_ruapu_sigill_caught ? 0 : 1;
+}
+
+#endif // defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __SYTERKIT__
#if defined _WIN32
@@ -395,7 +416,7 @@ static void ruapu_detect_openrisc_isa()
void ruapu_init()
{
-#if defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__
+#if defined _WIN32 || defined __ANDROID__ || defined __linux__ || defined __APPLE__ || defined __FreeBSD__ || defined __NetBSD__ || defined __OpenBSD__ || defined __SYTERKIT__
size_t j = 0;
for (size_t i = 0; i < sizeof(g_ruapu_isa_map) / sizeof(g_ruapu_isa_map[0]); i++)
{