A proper ARM64EC implementation would be tricky, as it would need to handle
a different calling convention and possibly use exit thunks for imported
functions. Instead, we can simply use the x86_64 version.
---
This series, together with setjmp/longjmp, finally allow building unmodified
mingw-w64-crt as ARM64EC.

 mingw-w64-crt/Makefile.am | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index b4712cda8..4a3aff664 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -306,7 +306,6 @@ src_msvcrt_commonarm64=\
   $(src_msvcrt_common_add_arm64)
 
 src_msvcrt_add_vscanf=\
-  stdio/scanf.S \
   stdio/scanf2-argcount-char.c \
   stdio/scanf2-argcount-wchar.c \
   stdio/vfscanf.c \
@@ -383,7 +382,8 @@ src_msvcrt_add_x86=\
   secapi/rand_s.c \
   secapi/sprintf_s.c \
   secapi/strerror_s.c \
-  secapi/vsprintf_s.c
+  secapi/vsprintf_s.c \
+  stdio/scanf.S
 
 # Files included in libucrt*.a
 src_ucrtbase=\
@@ -635,7 +635,8 @@ src_msvcrtarm32=\
   misc/__winitenv.c \
   stdio/_fstat64i32.c \
   stdio/_setmaxstdio.c \
-  stdio/gets.c
+  stdio/gets.c \
+  stdio/scanf.S
 
 if !ENABLE_SOFTMATH
 src_msvcrtarm32+=\
@@ -755,6 +756,12 @@ src_msvcrtarm64=\
   stdio/_setmaxstdio.c \
   stdio/gets.c
 
+if ARM64EC
+src_msvcrtarm64_x64=libarm64/stdio/scanf.x86_64.o
+else
+src_msvcrtarm64+=stdio/scanf.S
+endif
+
 src_pre_msvcrt20=\
   misc/__daylight.c \
   misc/__initenv.c \
@@ -854,7 +861,8 @@ src_pre_msvcr120=\
   misc/isblank.c \
   misc/iswblank.c \
   misc/wctrans.c \
-  misc/wctype.c
+  misc/wctype.c \
+  stdio/scanf.S
 
 src_pre_msvcr120_post_msvcr71=\
   misc/_isblank_l.c \
@@ -2337,6 +2345,9 @@ libarm64/gcrt2.o: libarm64/gcrt0.o
 libarm64/%.o: crt/%.c
        $(AM_V_CC)$(COMPILE) $(CPPFLAGSARM64) -c $< -o $@
 
+libarm64/%.x86_64.o: %.S
+       $(AM_V_CC)$(MKDIR_P) $(@D) && $(COMPILE) $(CPPFLAGSARM64) -target 
x86_64-windows-gnu -c $< -o $@
+
 # These source files aren't compiled in to any library yet.  I'm not sure how 
/ where to do so.
 # The source files that I did compile somewhere I just guessed at anyway.
 #
@@ -2552,6 +2563,7 @@ libarm64_libmsvcrt_common_a_SOURCES = 
$(src_msvcrt_commonarm64)
 libarm64_libmsvcrt_common_a_CPPFLAGS=$(CPPFLAGSARM64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 libarm64_libmsvcrt_extra_a_SOURCES = $(src_msvcrtarm64)
 libarm64_libmsvcrt_extra_a_CPPFLAGS=$(CPPFLAGSARM64) -D__LIBMSVCRT__ 
-D__LIBMSVCRT_OS__ $(extra_include) $(sysincludes)
+libarm64_libmsvcrt_extra_a_LIBADD=$(src_msvcrtarm64_x64)
 libarm64_libucrt_extra_a_SOURCES = $(src_ucrtbasearm64)
 libarm64_libucrt_extra_a_CPPFLAGS=$(CPPFLAGSARM64) -D__LIBMSVCRT__ 
$(extra_include) $(sysincludes)
 libarm64_libucrtapp_extra_a_SOURCES = $(src_ucrtapp) $(src_ucrtapp_arm64)
-- 
2.49.0



_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to