Index: trunk/include/iprt/asm-amd64-x86.h
===================================================================
--- trunk/include/iprt/asm-amd64-x86.h	(revision 83775)
+++ trunk/include/iprt/asm-amd64-x86.h	(revision 83776)
@@ -37,10 +37,6 @@
 
 #if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN
-# pragma warning(push)
-# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */
-# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */
-# include <intrin.h>
-# pragma warning(pop)
-   /* Emit the intrinsics at all optimization levels. */
+/* Emit the intrinsics at all optimization levels. */
+# include <iprt/win/msvc_intrin.h>
 # pragma intrinsic(_ReadWriteBarrier)
 # pragma intrinsic(__cpuid)
Index: trunk/include/iprt/asm-math.h
===================================================================
--- trunk/include/iprt/asm-math.h	(revision 83775)
+++ trunk/include/iprt/asm-math.h	(revision 83776)
@@ -33,10 +33,6 @@
 
 #if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN
-# pragma warning(push)
-# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */
-# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */
-# include <intrin.h>
-# pragma warning(pop)
-  /* Emit the intrinsics at all optimization levels. */
+/* Emit the intrinsics at all optimization levels. */
+# include <iprt/win/msvc_intrin.h>
 # pragma intrinsic(__emul)
 # pragma intrinsic(__emulu)
Index: trunk/include/iprt/asm.h
===================================================================
--- trunk/include/iprt/asm.h	(revision 83775)
+++ trunk/include/iprt/asm.h	(revision 83776)
@@ -44,10 +44,6 @@
 
 #if defined(_MSC_VER) && RT_INLINE_ASM_USES_INTRIN
-# pragma warning(push)
-# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */
-# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */
-# include <intrin.h>
-# pragma warning(pop)
-  /* Emit the intrinsics at all optimization levels. */
+/* Emit the intrinsics at all optimization levels. */
+# include <iprt/win/msvc_intrin.h>
 # pragma intrinsic(_ReadWriteBarrier)
 # pragma intrinsic(__cpuid)
Index: trunk/include/iprt/nt/ntddk.h
===================================================================
--- trunk/include/iprt/nt/ntddk.h	(revision 83775)
+++ trunk/include/iprt/nt/ntddk.h	(revision 83776)
@@ -31,9 +31,5 @@
 
 /* Make sure we get the right prototypes. */
-#pragma warning(push)
-#pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */
-#pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */
-#include <intrin.h>
-#pragma warning(pop)
+#include <iprt/win/msvc_intrin.h>
 
 #define _InterlockedExchange           _InterlockedExchange_StupidDDKVsCompilerCrap
Index: trunk/include/iprt/nt/wdm.h
===================================================================
--- trunk/include/iprt/nt/wdm.h	(revision 83775)
+++ trunk/include/iprt/nt/wdm.h	(revision 83776)
@@ -31,9 +31,5 @@
 
 /* Make sure we get the right prototypes. */
-#pragma warning(push)
-#pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */
-#pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */
-#include <intrin.h>
-#pragma warning(pop)
+#include <iprt/win/msvc_intrin.h>
 
 #define _InterlockedExchange           _InterlockedExchange_StupidDDKVsCompilerCrap
Index: trunk/include/iprt/win/msvc_intrin.h
===================================================================
--- trunk/include/iprt/win/msvc_intrin.h	(revision 83776)
+++ trunk/include/iprt/win/msvc_intrin.h	(revision 83776)
@@ -0,0 +1,52 @@
+/** @file
+ * Safe way to include intrin.h from VC++.
+ */
+
+/*
+ * Copyright (C) 2020 Oracle Corporation
+ *
+ * This file is part of VirtualBox Open Source Edition (OSE), as
+ * available from http://www.virtualbox.org. This file is free software;
+ * you can redistribute it and/or modify it under the terms of the GNU
+ * General Public License (GPL) as published by the Free Software
+ * Foundation, in version 2 as it comes in the "COPYING" file of the
+ * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+ * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+ *
+ * The contents of this file may alternatively be used under the terms
+ * of the Common Development and Distribution License Version 1.0
+ * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
+ * VirtualBox OSE distribution, in which case the provisions of the
+ * CDDL are applicable instead of those of the GPL.
+ *
+ * You may elect to license modified versions of this file under the
+ * terms and conditions of either the GPL or the CDDL or both.
+ */
+
+#ifndef IPRT_INCLUDED_win_msvc_intrin_h
+#define IPRT_INCLUDED_win_msvc_intrin_h
+#ifndef RT_WITHOUT_PRAGMA_ONCE
+# pragma once
+#endif
+
+#ifdef _MSC_VER
+# pragma warning(push)
+# pragma warning(disable:4668) /* Several incorrect __cplusplus uses. */
+# pragma warning(disable:4255) /* Incorrect __slwpcb prototype. */
+#endif
+
+/* This is a hack to avoid dragging in malloc.h from UCRT. */
+#if (defined(IPRT_NO_CRT) || defined(RT_OS_AGNOSTIC)) && !defined(_INC_MALLOC)
+# define _INC_MALLOC 1
+# include <intrin.h>
+# undef  _INC_MALLOC
+#else
+# include <intrin.h>
+#endif
+
+#ifdef _MSC_VER
+# pragma warning(pop)
+#endif
+
+#endif /* !IPRT_INCLUDED_win_msvc_intrin_h */
+
