diff options
author | MITSUNARI Shigeo <herumi@nifty.com> | 2019-04-17 15:10:23 +0800 |
---|---|---|
committer | MITSUNARI Shigeo <herumi@nifty.com> | 2019-04-24 16:12:10 +0800 |
commit | 3adee27f18a8a8ff56d2f78edbdb1e1e8bcca4f4 (patch) | |
tree | ba87860769c99cbe00f85cdfe3b4b56673565803 | |
parent | d02cc65749a634748c1f9f015c6e64ca3ed504e2 (diff) | |
download | tangerine-mcl-3adee27f18a8a8ff56d2f78edbdb1e1e8bcca4f4.tar.gz tangerine-mcl-3adee27f18a8a8ff56d2f78edbdb1e1e8bcca4f4.tar.zst tangerine-mcl-3adee27f18a8a8ff56d2f78edbdb1e1e8bcca4f4.zip |
MCL_LLVM_BMI2=0 disables bmi2
-rw-r--r-- | src/fp.cpp | 2 | ||||
-rw-r--r-- | src/low_func.hpp | 10 | ||||
-rw-r--r-- | src/low_func_llvm.hpp | 2 |
3 files changed, 12 insertions, 2 deletions
@@ -251,7 +251,7 @@ void setOp(Op& op, Mode mode) setOp2<N, Gtag, true, false>(op); #ifdef MCL_USE_LLVM if (mode != fp::FP_GMP && mode != fp::FP_GMP_MONT) { -#if defined(MCL_USE_XBYAK) && CYBOZU_HOST == CYBOZU_HOST_INTEL +#if MCL_LLVM_BMI2 == 1 const bool gmpIsFasterThanLLVM = false;//(N == 8 && MCL_SIZEOF_UNIT == 8); Xbyak::util::Cpu cpu; if (cpu.has(Xbyak::util::Cpu::tBMI2)) { diff --git a/src/low_func.hpp b/src/low_func.hpp index 57c63cf..89a748e 100644 --- a/src/low_func.hpp +++ b/src/low_func.hpp @@ -15,17 +15,27 @@ #pragma warning(disable : 4127) #endif +#ifndef MCL_LLVM_BMI2 + #if (CYBOZU_HOST == CYBOZU_HOST_INTEL) && defined(MCL_USE_XBYAK) && !defined(MCL_USE_VINT) + #define MCL_LLVM_BMI2 1 + #endif +#endif + namespace mcl { namespace fp { struct Gtag; // GMP struct Ltag; // LLVM +#if MCL_LLVM_BMI2 == 1 struct LBMI2tag; // LLVM with Intel BMI2 instruction +#endif struct Atag; // asm template<class Tag> struct TagToStr { }; template<> struct TagToStr<Gtag> { static const char *f() { return "Gtag"; } }; template<> struct TagToStr<Ltag> { static const char *f() { return "Ltag"; } }; +#if MCL_LLVM_BMI2 == 1 template<> struct TagToStr<LBMI2tag> { static const char *f() { return "LBMI2tag"; } }; +#endif template<> struct TagToStr<Atag> { static const char *f() { return "Atag"; } }; template<size_t N> diff --git a/src/low_func_llvm.hpp b/src/low_func_llvm.hpp index 8a44c22..a9e8a98 100644 --- a/src/low_func_llvm.hpp +++ b/src/low_func_llvm.hpp @@ -41,7 +41,7 @@ template<>const void3u MontRed<n, tag>::f = &mcl_fp_montRed ## n ## suf; \ template<>const void4u DblAdd<n, tag>::f = &mcl_fpDbl_add ## n ## suf; \ template<>const void4u DblSub<n, tag>::f = &mcl_fpDbl_sub ## n ## suf; \ -#if (CYBOZU_HOST == CYBOZU_HOST_INTEL) && !defined(MCL_USE_VINT) +#if MCL_LLVM_BMI2 == 1 #define MCL_DEF_LLVM_FUNC(n) \ MCL_DEF_LLVM_FUNC2(n, Ltag, L) \ MCL_DEF_LLVM_FUNC2(n, LBMI2tag, Lbmi2) |