diff --git a/src/base/macros.h b/src/base/macros.h
index e5e020d9..53af2187 100644
--- a/src/base/macros.h
+++ b/src/base/macros.h
@@ -316,8 +316,12 @@ V8_INLINE A implicit_cast(A x) {
 # else
 #  define V8_PTR_PREFIX   ""
 # endif  // V8_HOST_ARCH_64_BIT
-#elif V8_CC_MINGW64
-# define V8_PTR_PREFIX    "I64"
+#elif V8_CC_MINGW
+# if V8_TARGET_ARCH_X64
+#  define V8_PTR_PREFIX   "I64"
+# else
+#  define V8_PTR_PREFIX   ""
+# endif
 #elif V8_HOST_ARCH_64_BIT
 # define V8_PTR_PREFIX    "l"
 #else
diff --git a/src/base/platform/platform-win32.cc b/src/base/platform/platform-win32.cc
index 11402689..ae2d7c08 100644
--- a/src/base/platform/platform-win32.cc
+++ b/src/base/platform/platform-win32.cc
@@ -81,7 +81,6 @@ inline void MemoryFence() {
   __asm__ __volatile__("xchgl %%eax,%0 ":"=r" (barrier));
 }
 
-#endif  // __MINGW64_VERSION_MAJOR
 
 
 int localtime_s(tm* out_tm, const time_t* time) {
@@ -134,6 +133,7 @@ int strncpy_s(char* dest, size_t dest_size, const char* source, size_t count) {
   return 0;
 }
 
+#endif  // __MINGW64_VERSION_MAJOR
 #endif  // __MINGW32__
 
 namespace v8 {
diff --git a/src/bigint/mul-karatsuba.cc b/src/bigint/mul-karatsuba.cc
index 7df03401..67691f03 100644
--- a/src/bigint/mul-karatsuba.cc
+++ b/src/bigint/mul-karatsuba.cc
@@ -48,7 +48,7 @@ uint32_t RoundUpLen(uint32_t len) {
   // Round up, unless we're only just above the threshold. This smoothes
   // the steps by which time goes up as input size increases.
   uint32_t additive = ((1 << shift) - 1);
-  if (shift >= 2 && (len & additive) < (1 << (shift - 2))) {
+  if (shift >= 2 && ((int)len & (int)additive) < (1 << (shift - 2))) {
     return len;
   }
   return ((len + additive) >> shift) << shift;
diff --git a/src/libplatform/default-platform.cc b/src/libplatform/default-platform.cc
index 09ef613a..791adfa2 100644
--- a/src/libplatform/default-platform.cc
+++ b/src/libplatform/default-platform.cc
@@ -24,10 +24,12 @@ namespace platform {
 namespace {
 
 void PrintStackTrace() {
+#ifdef DEBUG
   v8::base::debug::StackTrace trace;
   trace.Print();
   // Avoid dumping duplicate stack trace on abort signal.
   v8::base::debug::DisableSignalStackDump();
+#endif
 }
 
 constexpr int kMaxThreadPoolSize = 16;
@@ -47,9 +49,11 @@ std::unique_ptr<v8::Platform> NewDefaultPlatform(
     InProcessStackDumping in_process_stack_dumping,
     std::unique_ptr<v8::TracingController> tracing_controller,
     PriorityMode priority_mode) {
+#ifdef DEBUG
   if (in_process_stack_dumping == InProcessStackDumping::kEnabled) {
     v8::base::debug::EnableInProcessStackDumping();
   }
+#endif
   thread_pool_size = GetActualThreadPoolSize(thread_pool_size);
   auto platform = std::make_unique<DefaultPlatform>(
       thread_pool_size, idle_task_support, std::move(tracing_controller),
@@ -61,9 +65,11 @@ std::unique_ptr<v8::Platform> NewSingleThreadedDefaultPlatform(
     IdleTaskSupport idle_task_support,
     InProcessStackDumping in_process_stack_dumping,
     std::unique_ptr<v8::TracingController> tracing_controller) {
+#ifdef DEBUG
   if (in_process_stack_dumping == InProcessStackDumping::kEnabled) {
     v8::base::debug::EnableInProcessStackDumping();
   }
+#endif
   auto platform = std::make_unique<DefaultPlatform>(
       0, idle_task_support, std::move(tracing_controller));
   return platform;
diff --git a/src/objects/swiss-hash-table-helpers.h b/src/objects/swiss-hash-table-helpers.h
index f346c333..c5a0ba0f 100644
--- a/src/objects/swiss-hash-table-helpers.h
+++ b/src/objects/swiss-hash-table-helpers.h
@@ -20,8 +20,9 @@
 // The following #defines are taken from Abseil's have_sse.h (but renamed).
 #ifndef V8_SWISS_TABLE_HAVE_SSE2_HOST
 #if (defined(__SSE2__) ||  \
-     (defined(_MSC_VER) && \
-      (defined(_M_X64) || (defined(_M_IX86) && _M_IX86_FP >= 2))))
+     (defined(_WIN32) && \
+      (defined(__x86_64__) || defined(__i686__) || \
+       defined(_M_X64) || (defined(_M_IX86) && _M_IX86_FP >= 2))))
 #define V8_SWISS_TABLE_HAVE_SSE2_HOST 1
 #else
 #define V8_SWISS_TABLE_HAVE_SSE2_HOST 0
