diff -bur tulip-6.0.1-orig/CMakeLists.txt tulip-6.0.1/CMakeLists.txt
--- tulip-6.0.1-orig/CMakeLists.txt	2025-04-11 06:38:27.126384500 -0600
+++ tulip-6.0.1/CMakeLists.txt	2025-04-11 06:40:44.944927600 -0600
@@ -38,7 +38,7 @@
 STRING(COMPARE EQUAL "${CMAKE_SIZEOF_VOID_P}" "8" IS_64BIT)
 IF(IS_64BIT)
     add_compile_definitions("IS_64BIT")
-  IF(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
+  IF(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64|ARM64")
     add_compile_definitions("ARM64")
   ELSE()
     add_compile_definitions("X86_64")
diff -bur tulip-6.0.1-orig/library/tulip-core/include/tulip/SystemDefinition.h tulip-6.0.1/library/tulip-core/include/tulip/SystemDefinition.h
--- tulip-6.0.1-orig/library/tulip-core/include/tulip/SystemDefinition.h	2025-04-11 06:38:26.620060100 -0600
+++ tulip-6.0.1/library/tulip-core/include/tulip/SystemDefinition.h	2025-04-11 06:40:32.216875100 -0600
@@ -35,7 +35,7 @@
 #define OS_ARCHITECTURE "x86_64"
 #elif defined(__i386__) || defined(_M_IX86)
 #define OS_ARCHITECTURE "x86"
-#elif defined(__arm64__)
+#elif defined(__arm64__) || defined(_M_ARM64)
 #define OS_ARCHITECTURE "arm64"
 #else
 #define OS_ARCHITECTURE "other"
diff -bur tulip-6.0.1-orig/software/crash_handling/StackWalker.cpp tulip-6.0.1/software/crash_handling/StackWalker.cpp
--- tulip-6.0.1-orig/software/crash_handling/StackWalker.cpp	2025-04-11 06:38:26.336026400 -0600
+++ tulip-6.0.1/software/crash_handling/StackWalker.cpp	2025-04-11 06:43:41.998354300 -0600
@@ -353,16 +353,21 @@
   STACKFRAME frame;
   memset(&frame, 0, sizeof(frame));
 
-#ifndef X86_64
-  DWORD machine = IMAGE_FILE_MACHINE_I386;
-  frame.AddrPC.Offset = context->Eip;
-  frame.AddrStack.Offset = context->Esp;
-  frame.AddrFrame.Offset = context->Ebp;
-#else
+#if defined(ARM64)
+  DWORD machine = IMAGE_FILE_MACHINE_ARM64;
+  frame.AddrPC.Offset = context->Pc;
+  frame.AddrStack.Offset = context->Sp;
+  frame.AddrFrame.Offset = context->Fp;
+#elif defined(X86_64)
   DWORD machine = IMAGE_FILE_MACHINE_AMD64;
   frame.AddrPC.Offset = context->Rip;
   frame.AddrStack.Offset = context->Rsp;
   frame.AddrFrame.Offset = context->Rbp;
+#else
+  DWORD machine = IMAGE_FILE_MACHINE_I386;
+  frame.AddrPC.Offset = context->Eip;
+  frame.AddrStack.Offset = context->Esp;
+  frame.AddrFrame.Offset = context->Ebp;
 #endif
 
   frame.AddrPC.Mode = AddrModeFlat;
@@ -386,10 +391,10 @@
     symbol->SizeOfStruct = (sizeof *symbol) + 255;
     symbol->MaxNameLength = 254;
 
-#ifndef X86_64
-    DWORD module_base = SymGetModuleBase(process, frame.AddrPC.Offset);
-#else
+#if defined(ARM64) || defined(X86_64)
     DWORD64 module_base = SymGetModuleBase(process, frame.AddrPC.Offset);
+#else
+    DWORD module_base = SymGetModuleBase(process, frame.AddrPC.Offset);
 #endif
 
     int64_t symbolOffset = frame.AddrPC.Offset - module_base - 0x1000 - 1;
@@ -412,10 +417,10 @@
 
     const char *func = nullptr;
 
-#ifndef X86_64
-    DWORD dummy = 0;
-#else
+#if defined(ARM64) || defined(X86_64)
     DWORD64 dummy = 0;
+#else
+    DWORD dummy = 0;
 #endif
 
     if (SymGetSymFromAddr(process, frame.AddrPC.Offset, &dummy, symbol)) {
