Index: lib/Basic/Targets.cpp =================================================================== --- lib/Basic/Targets.cpp +++ lib/Basic/Targets.cpp @@ -2064,6 +2064,7 @@ HasAVX512VL; bool HasSHA; bool HasCX16; + bool HasMOVBE; /// \brief Enumeration of all of the X86 CPUs supported by Clang. /// @@ -2248,7 +2249,8 @@ HasADX(false), HasTBM(false), HasFMA(false), HasF16C(false), HasAVX512CD(false), HasAVX512ER(false), HasAVX512PF(false), HasAVX512DQ(false), HasAVX512BW(false), HasAVX512VL(false), - HasSHA(false), HasCX16(false), CPU(CK_Generic), FPMath(FP_Default) { + HasSHA(false), HasCX16(false), HasMOVBE(false), CPU(CK_Generic), + FPMath(FP_Default) { BigEndian = false; LongDoubleFormat = &llvm::APFloat::x87DoubleExtended; } @@ -2563,6 +2565,7 @@ setFeatureEnabledImpl(Features, "bmi2", true); setFeatureEnabledImpl(Features, "rtm", true); setFeatureEnabledImpl(Features, "fma", true); + setFeatureEnabledImpl(Features, "movbe", true); // FALLTHROUGH case CK_IvyBridge: setFeatureEnabledImpl(Features, "rdrnd", true); @@ -2599,6 +2602,7 @@ setFeatureEnabledImpl(Features, "aes", true); setFeatureEnabledImpl(Features, "pclmul", true); setFeatureEnabledImpl(Features, "cx16", true); + setFeatureEnabledImpl(Features, "movbe", true); break; case CK_K6_2: case CK_K6_3: @@ -2983,6 +2987,11 @@ continue; } + if (Feature == "movbe") { + HasMOVBE = true; + continue; + } + assert(Features[i][0] == '+' && "Invalid target feature!"); X86SSEEnum Level = llvm::StringSwitch(Feature) .Case("avx512f", AVX512F) @@ -3285,6 +3294,9 @@ if (HasF16C) Builder.defineMacro("__F16C__"); + if (HasMOVBE) + Builder.defineMacro("__MOVBE__"); + if (HasAVX512CD) Builder.defineMacro("__AVX512CD__"); if (HasAVX512ER) @@ -3386,6 +3398,7 @@ .Case("bmi", HasBMI) .Case("bmi2", HasBMI2) .Case("cx16", HasCX16) + .Case("movbe", HasMOVBE) .Case("f16c", HasF16C) .Case("fma", HasFMA) .Case("fma4", XOPLevel >= FMA4)