Avoid linking error on WCE700 for _InterlockedExchangeAdd().
This implementation is referenced to https://www.boost.org/doc/libs/1_69_0/boost/detail/interlocked.hpp

Reviewed-by: Richard Levitte <levitte@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/8596)
diff --git a/include/internal/refcount.h b/include/internal/refcount.h
index f8b0778..f74f794 100644
--- a/include/internal/refcount.h
+++ b/include/internal/refcount.h
@@ -80,7 +80,7 @@
 
 typedef volatile int CRYPTO_REF_COUNT;
 
-#   if (defined(_M_ARM) && _M_ARM>=7) || defined(_M_ARM64)
+#   if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64)
 #    include <intrin.h>
 #    if defined(_M_ARM64) && !defined(_ARM_BARRIER_ISH)
 #     define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH
@@ -100,7 +100,17 @@
     return 1;
 }
 #   else
-#    pragma intrinsic(_InterlockedExchangeAdd)
+#    if !defined(_WIN32_WCE)
+#     pragma intrinsic(_InterlockedExchangeAdd)
+#    else
+#     if _WIN32_WCE >= 0x600
+       extern long __cdecl _InterlockedExchangeAdd(long volatile*, long);
+#     else
+       // under Windows CE we still have old-style Interlocked* functions
+       extern long __cdecl InterlockedExchangeAdd(long volatile*, long);
+#      define _InterlockedExchangeAdd InterlockedExchangeAdd
+#     endif
+#    endif
 
 static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, void *lock)
 {