Hi rnk, hansw,

http://reviews.llvm.org/D4415

Files:
  lib/Basic/Targets.cpp
  lib/Headers/Intrin.h
  lib/Headers/ammintrin.h
  lib/Headers/arm_acle.h
  lib/Headers/emmintrin.h
  lib/Headers/fmaintrin.h
  lib/Headers/immintrin.h
  lib/Headers/mmintrin.h
  lib/Headers/nmmintrin.h
  lib/Headers/pmmintrin.h
  lib/Headers/smmintrin.h
  lib/Headers/tmmintrin.h
  lib/Headers/wmmintrin.h
  lib/Headers/x86intrin.h
  lib/Headers/xmmintrin.h
  test/CodeGenCXX/mangle-ms-vector-types.cpp
  test/Preprocessor/predefined-macros.c
Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp
+++ lib/Basic/Targets.cpp
@@ -2588,6 +2588,31 @@
 /// definitions for this particular subtarget.
 void X86TargetInfo::getTargetDefines(const LangOptions &Opts,
                                      MacroBuilder &Builder) const {
+  // None of these macros make sense in MSVC compat mode.
+  if (Opts.MicrosoftExt) {
+    if (getTriple().getArch() == llvm::Triple::x86) {
+      switch (SSELevel) {
+      case AVX512F:
+      case AVX2:
+      case AVX:
+      case SSE42:
+      case SSE41:
+      case SSSE3:
+      case SSE3:
+      case SSE2:
+        Builder.defineMacro("_M_IX86_FP", Twine(2));
+        break;
+      case SSE1:
+        Builder.defineMacro("_M_IX86_FP", Twine(1));
+        break;
+      default:
+        Builder.defineMacro("_M_IX86_FP", Twine(0));
+      }
+    }
+
+    return;
+  }
+
   // Target identification.
   if (getTriple().getArch() == llvm::Triple::x86_64) {
     Builder.defineMacro("__amd64__");
@@ -2831,26 +2856,6 @@
     break;
   }
 
-  if (Opts.MicrosoftExt && getTriple().getArch() == llvm::Triple::x86) {
-    switch (SSELevel) {
-    case AVX512F:
-    case AVX2:
-    case AVX:
-    case SSE42:
-    case SSE41:
-    case SSSE3:
-    case SSE3:
-    case SSE2:
-      Builder.defineMacro("_M_IX86_FP", Twine(2));
-      break;
-    case SSE1:
-      Builder.defineMacro("_M_IX86_FP", Twine(1));
-      break;
-    default:
-      Builder.defineMacro("_M_IX86_FP", Twine(0));
-    }
-  }
-
   // Each case falls through to the previous one here.
   switch (MMX3DNowLevel) {
   case AMD3DNowAthlon:
@@ -4182,7 +4187,8 @@
     : ARMTargetInfo(Triple, false) { }
   virtual void getTargetDefines(const LangOptions &Opts,
                                 MacroBuilder &Builder) const {
-    Builder.defineMacro("__ARMEL__");
+    if (!Opts.MSVCCompat)
+      Builder.defineMacro("__ARMEL__");
     ARMTargetInfo::getTargetDefines(Opts, Builder);
   }
 };
@@ -4193,8 +4199,10 @@
     : ARMTargetInfo(Triple, true) { }
   virtual void getTargetDefines(const LangOptions &Opts,
                                 MacroBuilder &Builder) const {
-    Builder.defineMacro("__ARMEB__");
-    Builder.defineMacro("__ARM_BIG_ENDIAN");
+    if (!Opts.MSVCCompat) {
+      Builder.defineMacro("__ARMEB__");
+      Builder.defineMacro("__ARM_BIG_ENDIAN");
+    }
     ARMTargetInfo::getTargetDefines(Opts, Builder);
   }
 };
Index: lib/Headers/Intrin.h
===================================================================
--- lib/Headers/Intrin.h
+++ lib/Headers/Intrin.h
@@ -30,7 +30,7 @@
 #define __INTRIN_H
 
 /* First include the standard intrinsics. */
-#if defined(__i386__) || defined(__x86_64__)
+#if defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)
 #include <x86intrin.h>
 #endif
 
Index: lib/Headers/ammintrin.h
===================================================================
--- lib/Headers/ammintrin.h
+++ lib/Headers/ammintrin.h
@@ -24,7 +24,7 @@
 #ifndef __AMMINTRIN_H
 #define __AMMINTRIN_H
 
-#ifndef __SSE4A__
+#if !defined(__SSE4A__) && !defined(_MSC_VER)
 #error "SSE4A instruction set not enabled"
 #else
 
Index: lib/Headers/arm_acle.h
===================================================================
--- lib/Headers/arm_acle.h
+++ lib/Headers/arm_acle.h
@@ -24,7 +24,7 @@
 #ifndef __ARM_ACLE_H
 #define __ARM_ACLE_H
 
-#ifndef __ARM_ACLE
+#if !defined(__ARM_ACLE) && !defined(_MSC_VER)
 #error "ACLE intrinsics support not enabled."
 #endif
 
Index: lib/Headers/emmintrin.h
===================================================================
--- lib/Headers/emmintrin.h
+++ lib/Headers/emmintrin.h
@@ -24,7 +24,7 @@
 #ifndef __EMMINTRIN_H
 #define __EMMINTRIN_H
 
-#ifndef __SSE2__
+#if !defined(__SSE2__) && !defined(_MSC_VER)
 #error "SSE2 instruction set not enabled"
 #else
 
Index: lib/Headers/fmaintrin.h
===================================================================
--- lib/Headers/fmaintrin.h
+++ lib/Headers/fmaintrin.h
@@ -28,7 +28,7 @@
 #ifndef __FMAINTRIN_H
 #define __FMAINTRIN_H
 
-#ifndef __FMA__
+#if !defined(__FMA__) && !defined(_MSC_VER)
 # error "FMA instruction set is not enabled"
 #else
 
Index: lib/Headers/immintrin.h
===================================================================
--- lib/Headers/immintrin.h
+++ lib/Headers/immintrin.h
@@ -24,39 +24,39 @@
 #ifndef __IMMINTRIN_H
 #define __IMMINTRIN_H
 
-#ifdef __MMX__
+#if defined(__MMX__) || defined(_MSC_VER)
 #include <mmintrin.h>
 #endif
 
-#ifdef __SSE__
+#if defined(__SSE__) || defined(_MSC_VER)
 #include <xmmintrin.h>
 #endif
 
-#ifdef __SSE2__
+#if defined(__SSE2__) || defined(_MSC_VER)
 #include <emmintrin.h>
 #endif
 
-#ifdef __SSE3__
+#if defined(__SSE3__) || defined(_MSC_VER)
 #include <pmmintrin.h>
 #endif
 
-#ifdef __SSSE3__
+#if defined(__SSSE3__) || defined(_MSC_VER)
 #include <tmmintrin.h>
 #endif
 
-#if defined (__SSE4_2__) || defined (__SSE4_1__)
+#if defined (__SSE4_2__) || defined (__SSE4_1__) || defined(_MSC_VER)
 #include <smmintrin.h>
 #endif
 
-#if defined (__AES__) || defined (__PCLMUL__)
+#if defined (__AES__) || defined (__PCLMUL__) || defined(_MSC_VER)
 #include <wmmintrin.h>
 #endif
 
-#ifdef __AVX__
+#if defined(__AVX__) || defined(_MSC_VER)
 #include <avxintrin.h>
 #endif
 
-#ifdef __AVX2__
+#if defined(__AVX2__) || defined(_MSC_VER)
 #include <avx2intrin.h>
 #endif
 
Index: lib/Headers/mmintrin.h
===================================================================
--- lib/Headers/mmintrin.h
+++ lib/Headers/mmintrin.h
@@ -24,7 +24,7 @@
 #ifndef __MMINTRIN_H
 #define __MMINTRIN_H
 
-#ifndef __MMX__
+#if !defined(__MMX__) && !defined(_MSC_VER)
 #error "MMX instruction set not enabled"
 #else
 
Index: lib/Headers/nmmintrin.h
===================================================================
--- lib/Headers/nmmintrin.h
+++ lib/Headers/nmmintrin.h
@@ -24,7 +24,7 @@
 #ifndef _NMMINTRIN_H
 #define _NMMINTRIN_H
 
-#ifndef __SSE4_2__
+#if !defined(__SSE_4_2__) && !defined(_MSC_VER)
 #error "SSE4.2 instruction set not enabled"
 #else
 
Index: lib/Headers/pmmintrin.h
===================================================================
--- lib/Headers/pmmintrin.h
+++ lib/Headers/pmmintrin.h
@@ -24,7 +24,7 @@
 #ifndef __PMMINTRIN_H
 #define __PMMINTRIN_H
 
-#ifndef __SSE3__
+#if !defined(__SSE3__) && !defined(_MSC_VER)
 #error "SSE3 instruction set not enabled"
 #else
 
Index: lib/Headers/smmintrin.h
===================================================================
--- lib/Headers/smmintrin.h
+++ lib/Headers/smmintrin.h
@@ -24,7 +24,7 @@
 #ifndef _SMMINTRIN_H
 #define _SMMINTRIN_H
 
-#ifndef __SSE4_1__
+#if !defined(__SSE4_1__) && !defined(_MSC_VER)
 #error "SSE4.1 instruction set not enabled"
 #else
 
Index: lib/Headers/tmmintrin.h
===================================================================
--- lib/Headers/tmmintrin.h
+++ lib/Headers/tmmintrin.h
@@ -24,7 +24,7 @@
 #ifndef __TMMINTRIN_H
 #define __TMMINTRIN_H
 
-#ifndef __SSSE3__
+#if !defined(__SSE3__) && !defined(_MSC_VER)
 #error "SSSE3 instruction set not enabled"
 #else
 
Index: lib/Headers/wmmintrin.h
===================================================================
--- lib/Headers/wmmintrin.h
+++ lib/Headers/wmmintrin.h
@@ -26,7 +26,7 @@
 
 #include <emmintrin.h>
 
-#if !defined (__AES__) && !defined (__PCLMUL__)
+#if !defined (__AES__) && !defined (__PCLMUL__) && !defined (_MSC_VER)
 # error "AES/PCLMUL instructions not enabled"
 #else
 
Index: lib/Headers/x86intrin.h
===================================================================
--- lib/Headers/x86intrin.h
+++ lib/Headers/x86intrin.h
@@ -28,7 +28,7 @@
 
 #include <immintrin.h>
 
-#ifdef __3dNOW__
+#if defined(__3dNOW__) || defined(_MSC_VER)
 #include <mm3dnow.h>
 #endif
 
@@ -56,7 +56,7 @@
 #include <prfchwintrin.h>
 #endif
 
-#ifdef __SSE4A__
+#if defined(_SSE4A__) || defined(_MSC_VER)
 #include <ammintrin.h>
 #endif
 
Index: lib/Headers/xmmintrin.h
===================================================================
--- lib/Headers/xmmintrin.h
+++ lib/Headers/xmmintrin.h
@@ -24,7 +24,7 @@
 #ifndef __XMMINTRIN_H
 #define __XMMINTRIN_H
  
-#ifndef __SSE__
+#if !defined(__SSE__) && !defined(_MSC_VER)
 #error "SSE instruction set not enabled"
 #else
 
Index: test/CodeGenCXX/mangle-ms-vector-types.cpp
===================================================================
--- test/CodeGenCXX/mangle-ms-vector-types.cpp
+++ test/CodeGenCXX/mangle-ms-vector-types.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fms-extensions -ffreestanding -target-feature +avx -emit-llvm %s -o - -triple=i686-pc-win32 | FileCheck %s
+// RUN: %clang_cc1 -fms-extensions -fmsc-version=1700 -ffreestanding -target-feature +avx -emit-llvm %s -o - -triple=i686-pc-win32 | FileCheck %s
 
 #include <xmmintrin.h>
 #include <emmintrin.h>
Index: test/Preprocessor/predefined-macros.c
===================================================================
--- test/Preprocessor/predefined-macros.c
+++ test/Preprocessor/predefined-macros.c
@@ -10,6 +10,27 @@
 // CHECK-MS: #define _WIN32 1
 // CHECK-MS-NOT: #define __GNUC__
 // CHECK-MS-NOT: #define __STRICT_ANSI__
+// CHECK-MS-NOT: #define __i386__
+// CHECK-MS-NOT: #define __i486__
+// CHECK-MS-NOT: #define __i686__
+// CHECK-MS-NOT: #define __SSE__
+//
+// RUN: %clang_cc1 %s -E -dM -triple x86_64-pc-win32 -fms-extensions -fms-compatibility \
+// RUN:     -fmsc-version=1300 -o - | FileCheck %s --check-prefix=CHECK-MS64
+// CHECK-MS64: #define _INTEGRAL_MAX_BITS 64
+// CHECK-MS64: #define _MSC_EXTENSIONS 1
+// CHECK-MS64: #define _MSC_VER 1300
+// CHECK-MS64: #define _M_AMD64 1
+// CHECK-MS64: #define _M_X64 1
+// CHECK-MS64: #define _WIN64 1
+// CHECK-MS64-NOT: #define __GNUC__
+// CHECK-MS64-NOT: #define __STRICT_ANSI__
+// CHECK-MS64-NOT: #define __i486__
+// CHECK-MS64-NOT: #define __i686__
+// CHECK-MS64-NOT: #define __i386__
+// CHECK-MS64-NOT: #define __SSE__
+// CHECK-MS64-NOT: #define __x86_64__
+// CHECK-MS64-NOT: #define __amd64__
 //
 // RUN: %clang_cc1 %s -E -dM -triple i686-pc-win32 -fms-compatibility \
 // RUN:     -o - | FileCheck %s --check-prefix=CHECK-MS-STDINT
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to