diff -bur emacs-29.2-orig/configure.ac emacs-29.2/configure.ac
--- emacs-29.2-orig/configure.ac	2024-02-29 01:02:11.875373100 -0700
+++ emacs-29.2/configure.ac	2024-02-29 01:02:44.859394600 -0700
@@ -825,7 +825,7 @@
   ;;
 
   # MinGW64
-  x86_64-*-* )
+  x86_64-*-* | aarch64-*-*)
     case "${canonical}" in
       *-mingw* )
 		opsys=mingw32
@@ -1619,6 +1619,7 @@
 if test "$opsys" = "mingw32"; then
   case "$canonical" in
     x86_64-*-mingw*) C_SWITCH_SYSTEM="-mtune=generic" ;;
+    aarch64-*-mingw*) C_SWITCH_SYSTEM="-mtune=cortex-a53" ;;
     *) C_SWITCH_SYSTEM="-mtune=pentium4" ;;
   esac
 fi
diff -bur emacs-29.2-orig/nt/inc/ms-w32.h emacs-29.2/nt/inc/ms-w32.h
--- emacs-29.2-orig/nt/inc/ms-w32.h	2024-02-29 01:02:16.696003700 -0700
+++ emacs-29.2/nt/inc/ms-w32.h	2024-02-29 01:02:59.299874200 -0700
@@ -229,7 +229,7 @@
 /* The following is needed for recovery from C stack overflows.  */
 #include <setjmp.h>
 typedef jmp_buf sigjmp_buf;
-#ifdef MINGW_W64
+#if defined(MINGW_W64) && !defined(_M_ARM64)
 /* Evidently, MinGW64's longjmp crashes when invoked from an exception
    handler, see https://sourceforge.net/p/mingw-w64/mailman/message/32421953/.
    This seems to be an unsolved problem in the MinGW64 runtime.  So we
diff -bur emacs-29.2-orig/src/w32fns.c emacs-29.2/src/w32fns.c
--- emacs-29.2-orig/src/w32fns.c	2024-02-29 01:28:43.054838500 -0700
+++ emacs-29.2/src/w32fns.c	2024-02-29 01:28:49.745934200 -0700
@@ -11037,8 +11037,12 @@
   if (gc_in_progress)
     terminate_due_to_signal (SIGSEGV, 40);
 #ifdef _WIN64
+#ifdef _M_ARM64
+  longjmp(return_to_command_loop, 1);
+#else
   /* See ms-w32.h: MinGW64's longjmp crashes if invoked in this context.  */
   __builtin_longjmp (return_to_command_loop, 1);
+#endif  
 #else
   sys_longjmp (return_to_command_loop, 1);
 #endif
@@ -11065,7 +11069,11 @@
     {
       /* Call stack_overflow_handler ().  */
 #ifdef _WIN64
+#ifdef _M_ARM64
+      exception_data->ContextRecord->Pc = (DWORD_PTR) &stack_overflow_handler;
+#else
       exception_data->ContextRecord->Rip = (DWORD_PTR) &stack_overflow_handler;
+#endif      
 #else
       exception_data->ContextRecord->Eip = (DWORD_PTR) &stack_overflow_handler;
 #endif
diff -bur emacs-29.2-orig/configure.ac emacs-29.2/configure.ac
--- emacs-29.2-orig/configure.ac	2024-02-29 01:38:36.186527500 -0700
+++ emacs-29.2/configure.ac	2024-02-29 01:38:43.064754200 -0700
@@ -2291,6 +2291,7 @@
   EMACSRES="emacs.res"
   case "$canonical" in
     x86_64-*-*) EMACS_MANIFEST="emacs-x64.manifest" ;;
+    aarch64-*-*) EMACS_MANIFEST="emacs-ARM64.manifest" ;;
     *) EMACS_MANIFEST="emacs-x86.manifest" ;;
   esac
   dnl Construct something of the form "24,4,0,0" with 4 components.
diff -bur emacs-29.2-orig/nt/emacs.rc.in emacs-29.2/nt/emacs.rc.in
--- emacs-29.2-orig/nt/emacs.rc.in	2024-02-29 01:56:45.198564800 -0700
+++ emacs-29.2/nt/emacs.rc.in	2024-02-29 01:58:17.868439500 -0700
@@ -1,6 +1,8 @@
 Emacs ICON   icons/emacs.ico
 32649 CURSOR icons/hand.cur
-#if defined (WIN64) || defined (__x86_64__)
+#ifdef __aarch64__
+1 24 "emacs-ARM64.manifest"
+#elif defined (WIN64) || defined (__x86_64__)
 1 24 "emacs-x64.manifest"
 #else
 1 24 "emacs-x86.manifest"
diff -bur emacs-29.2-orig/configure.ac emacs-29.2/configure.ac
--- emacs-29.2-orig/configure.ac	2024-02-29 02:34:43.722695200 -0700
+++ emacs-29.2/configure.ac	2024-02-29 02:37:30.573110900 -0700
@@ -6510,13 +6510,13 @@
   mingw32)
    ## Is it any better under MinGW64 to relocate emacs into higher addresses?
    case "$canonical" in
-     x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x400000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
+     x86_64-*-* | aarch64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x400000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
      *) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
    esac
    ## If they want unexec, disable Windows ASLR for the Emacs binary
    if test "$with_dumping" = "unexec"; then
       case "$canonical" in
-        x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS -Wl,-disable-dynamicbase -Wl,-disable-high-entropy-va -Wl,-default-image-base-low" ;;
+        x86_64-*-* | aarch64-*-*) LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS -Wl,-disable-dynamicbase -Wl,-disable-high-entropy-va -Wl,-default-image-base-low" ;;
         *) LD_SWITCH_SYSTEM_TEMACS="$LD_SWITCH_SYSTEM_TEMACS -Wl,-disable-dynamicbase" ;;
       esac
    fi
