-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Please review, i'll split it up and commit it.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/

iQGcBAEBAgAGBQJTiLoLAAoJEGm5GZTakYsszxoMALMK9wIyw737hP/+HPbnj2VJ
KZ1r4j49ofWF1K0KQt0oyyDKk2gkP2Kys5xdzgHoArrp1cKEU50Z+EurKL0Uh4Xz
m3ZQ11NYr6Ws5CZyLZZ0yY8l00bJe8F1iE4aiz07D5z2wnap3XPJh43870VhgtyQ
bF1CuU3lVchreKOUKusXYP8q7mc5rVMWDQ6YulRJyhps7EvL1OferXZHUlf4V11V
JQWCmGhiOatKIYdQhRRS1dUNj7eEN5GviwEl667DVDz6GriRaPbA6g4LEf2eNk2P
eTpiBNLv7+/h69n5TEuFCa6uA/+6K0B9FwlzsxcrWCo99ozsPMImtHtSAKYgatLL
VE49ztqhR5lKCq9zHz5yRCLzlUmUwkye9YCSDoJkIf9HtGLJ0olAkzBwu8mZJjsS
CHO03XvEOsrfisH9y2hEcsvOUtwgHqzbQTEKJxPD6t/s0UGC5/dvlIgBPm/Y5zKh
M1mBJdHTwz9htLkg8GDPPgUagL3ilEgxIqCJSavvwA==
=1dqI
-----END PGP SIGNATURE-----
diff --git a/mingw-w64-crt/Makefile.am b/mingw-w64-crt/Makefile.am
index fbb00b6..b809595 100644
--- a/mingw-w64-crt/Makefile.am
+++ b/mingw-w64-crt/Makefile.am
@@ -306,7 +306,7 @@ src_intrincs= \
   intrincs/ilockor64.c      intrincs/ilockxor.c       intrincs/ilockxor64.c      intrincs/inbyte.c        intrincs/inbytestring.c   \
   intrincs/indword.c        intrincs/indwordstring.c  intrincs/inword.c          intrincs/inwordstring.c  intrincs/outbyte.c        \
   intrincs/outbytestring.c  intrincs/outdword.c       intrincs/outdwordstring.c  intrincs/outword.c       intrincs/outwordstring.c  \
-  intrincs/rdtsc.c          intrincs/readcr0.c        intrincs/readcr2.c         intrincs/readcr3.c       intrincs/readcr4.c        \
+  intrincs/readcr0.c        intrincs/readcr2.c        intrincs/readcr3.c         intrincs/readcr4.c       \
   intrincs/readcr8.c        intrincs/readmsr.c        intrincs/writecr0.c        intrincs/writecr2.c      intrincs/writecr3.c       \
   intrincs/writecr4.c       intrincs/writecr8.c       intrincs/writemsr.c        intrincs/__int2c.c       intrincs/RtlSecureZeroMemory.c
 
@@ -314,7 +314,7 @@ src_intrincs= \
 src_intrincs64=\
   intrincs/bittest64.c    intrincs/bittestc64.c   intrincs/bittestr64.c   intrincs/bittestri64.c     \
   intrincs/bittests64.c   intrincs/bittestsi64.c  intrincs/bitscanfwd64.c intrincs/bitscanrev64.c    \
-  intrincs/ilockadd64.c   intrincs/readgsbyte.c   intrincs/readgsword.c   intrincs/readgsdword.c     \
+  intrincs/ilockadd64.c   intrincs/rdtsc.c        intrincs/readgsbyte.c   intrincs/readgsword.c      intrincs/readgsdword.c \
   intrincs/readgsqword.c  intrincs/writegsbyte.c  intrincs/writegsword.c  intrincs/writegsdword.c    \
   intrincs/writegsqword.c intrincs/mul128ex.c     intrincs/umul128ex.c    intrincs/_mul128.c         \
   intrincs/_umul128.c     intrincs/__movsq.c      intrincs/__stosq.c      intrincs/__shiftright128.c \
@@ -322,9 +322,12 @@ src_intrincs64=\
 
 # these only go into the 32 bit version:
 src_intrincs32=\
-  intrincs/readfsbyte.c   intrincs/readfsword.c   intrincs/readfsdword.c  \
+  intrincs/rdtsc.c        intrincs/readfsbyte.c   intrincs/readfsword.c   intrincs/readfsdword.c  \
   intrincs/writefsbyte.c  intrincs/writefsword.c  intrincs/writefsdword.c
 
+# these only go into the ARM32 version:
+src_intrincsarm32=
+
 winrtlibs=\
   winrt/libruntimeobject.a
 
@@ -1148,14 +1151,14 @@ dxerr.c \
 test.c
 
 libarm32_LIBRARIES = libarm32/libkernel32.a
-libarm32_libkernel32_a_SOURCES = $(src_intrincs)
+libarm32_libkernel32_a_SOURCES = $(src_intrincs) $(src_intrincsarm32)
 libarm32_libkernel32_a_AR = $(DTLIBARM32) && $(AR) $(ARFLAGS)
 libarm32_libkernel32_a_CPPFLAGS=$(CPPFLAGSARM32) $(extra_include) $(AM_CPPFLAGS)
 
 if !W32API
 libarm32_LIBRARIES += libarm32/libmsvcrt.a
 libarm32_libmsvcrt_a_SOURCES = $(src_msvcrt32)
-libarm32_libmsvcrt_a_AR = $(DTDEFARM32) && $(AR) $(ARFLAGS)
+libarm32_libmsvcrt_a_AR = $(DTLIBARM32) && $(AR) $(ARFLAGS)
 libarm32_libmsvcrt_a_CPPFLAGS=$(CPPFLAGSARM32) -D__LIBMSVCRT__ $(extra_include) $(sysincludes)
 EXTRA_libarm32_libmsvcrt_a_DEPENDENCIES=libarm32/msvcrt.def
 endif
diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c
index fef0172..ade4124 100644
--- a/mingw-w64-crt/crt/crtexe.c
+++ b/mingw-w64-crt/crt/crtexe.c
@@ -226,7 +226,7 @@ __tmainCRTStartup (void)
   WINBOOL inDoubleQuote = FALSE;
   memset (&StartupInfo, 0, sizeof (STARTUPINFO));
 
-#ifndef _WIN64
+#if defined(__i386__) || defined(_X86_)
   /* We need to make sure that this function is build with frame-pointer
      and that we align the stack to 16 bytes for the sake of SSE ops in main
      or in functions inlined into main.  */
@@ -235,7 +235,7 @@ __tmainCRTStartup (void)
 #ifdef __GNUC__
   asm  __volatile__  ("andl $-16, %%esp" : : : "%esp");
 #endif
-#endif
+#endif /* defined(__i386__) || defined(_X86_) */
 
   if (mingw_app_type)
     GetStartupInfo (&StartupInfo);
diff --git a/mingw-w64-crt/crt/gs_support.c b/mingw-w64-crt/crt/gs_support.c
index 4126526..dbd95d5 100644
--- a/mingw-w64-crt/crt/gs_support.c
+++ b/mingw-w64-crt/crt/gs_support.c
@@ -119,21 +119,26 @@ __report_gsfailure (ULONG_PTR StackCookie)
   else
 #endif /* _WIN64 */
     {
-#ifdef _WIN64
+#if defined(__x86_64__) || defined(_AMD64_)
       GS_ContextRecord.Rip = (ULONGLONG) _ReturnAddress();
       GS_ContextRecord.Rsp = (ULONGLONG) _AddressOfReturnAddress() + 8;
-#else
+#elif defined(__i386__) || defined(_X86_)
       GS_ContextRecord.Eip = (DWORD) _ReturnAddress();
       GS_ContextRecord.Esp = (DWORD) _AddressOfReturnAddress() + 4;
+#elif defined(__arm__) || defined(_ARM_)
+      GS_ContextRecord.Pc = (DWORD) _ReturnAddress();
+      GS_ContextRecord.Sp = (DWORD) _AddressOfReturnAddress() + 4;
 #endif /* _WIN64 */
     }
 
-#ifdef _WIN64
+#if defined(__x86_64__) || defined(_AMD64_)
   GS_ExceptionRecord.ExceptionAddress = (PVOID) GS_ContextRecord.Rip;
   GS_ContextRecord.Rcx = StackCookie;
-#else
+#elif defined(__i386__) || defined(_X86_)
   GS_ExceptionRecord.ExceptionAddress = (PVOID) GS_ContextRecord.Eip;
   GS_ContextRecord.Ecx = StackCookie;
+#elif defined(__arm__) || defined(_ARM_)
+  GS_ExceptionRecord.ExceptionAddress = (PVOID) GS_ContextRecord.Pc;
 #endif /* _WIN64 */
   GS_ExceptionRecord.ExceptionCode = STATUS_STACK_BUFFER_OVERRUN;
   GS_ExceptionRecord.ExceptionFlags = EXCEPTION_NONCONTINUABLE;
diff --git a/mingw-w64-crt/intrincs/ilockadd.c b/mingw-w64-crt/intrincs/ilockadd.c
index 115c18b..8e3d2f2 100644
--- a/mingw-w64-crt/intrincs/ilockadd.c
+++ b/mingw-w64-crt/intrincs/ilockadd.c
@@ -4,6 +4,7 @@ __LONG32 _InterlockedAdd(__LONG32 volatile *, __LONG32);			/* not in intrin.h */
 __LONG32 _InterlockedAdd(__LONG32 volatile *Addend, __LONG32 Value)
 {
 /* return InterlockedExchangeAdd(Addend,Value) + Value; */
+#if defined(__x86_64__) || defined(_AMD64_) || defined(__i386__) || defined(_X86_)
   __LONG32 ret;
   __asm__ __volatile__ ("lock\n\t"
            "xaddl %0,(%1)"
@@ -11,6 +12,9 @@ __LONG32 _InterlockedAdd(__LONG32 volatile *Addend, __LONG32 Value)
            : "r" (Addend), "0" (Value)
            : "memory");
   return ret + Value;
+#else
+  return __sync_fetch_and_add(Addend, Value) + Value;
+#endif
 }
 
 #ifdef _WIN64

Attachment: tmp.diff.sig
Description: PGP signature

------------------------------------------------------------------------------
Time is money. Stop wasting it! Get your web API in 5 minutes.
www.restlet.com/download
http://p.sf.net/sfu/restlet
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to