aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2017-01-26 10:43:10 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2017-01-26 10:43:10 +0800
commite4ef74373a96a0e8a12aff745d0cb24a96592250 (patch)
treead4469da052140b8118625a3538135b451850d55
parentc0804671f67ab29578d6f17b8f49ea33555b7ac1 (diff)
downloadtangerine-mcl-e4ef74373a96a0e8a12aff745d0cb24a96592250.tar.gz
tangerine-mcl-e4ef74373a96a0e8a12aff745d0cb24a96592250.tar.zst
tangerine-mcl-e4ef74373a96a0e8a12aff745d0cb24a96592250.zip
test of 1024 bit size
-rw-r--r--sample/rawbench.cpp10
-rw-r--r--src/fp.cpp19
-rw-r--r--src/low_func_llvm.hpp5
-rw-r--r--src/proto.hpp3
4 files changed, 26 insertions, 11 deletions
diff --git a/sample/rawbench.cpp b/sample/rawbench.cpp
index 4665cb9..8a86682 100644
--- a/sample/rawbench.cpp
+++ b/sample/rawbench.cpp
@@ -5,7 +5,7 @@
#include <mcl/fp.hpp>
#include <mcl/fp_tower.hpp>
-typedef mcl::FpT<mcl::FpTag, 512> Fp;
+typedef mcl::FpT<mcl::FpTag> Fp;
typedef mcl::Fp2T<Fp> Fp2;
typedef mcl::FpDblT<Fp> FpDbl;
typedef mcl::Fp6T<Fp> Fp6;
@@ -151,6 +151,10 @@ int main(int argc, char *argv[])
// N = 8
"0x8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f",
"0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc7",
+#if MCL_MAX_BIT_SIZE == 1024
+ "0xc70b1ddda9b96e3965e5855942aa5852d8f8e052c760ac32cdfec16a2ed3d56981e1a475e20a70144ed2f5061ba64900f69451492803f815d446ee133d0668f7a7f3276d6301c95ce231f0e4b0d0f3882f10014fca04454cff55d2e2d4cfc1aad33b8d38397e2fc8b623177e63d0b783269c40a85b8f105654783b8ed2e737df",
+ "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97",
+#endif
};
for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
const char *p = tbl[i];
@@ -165,7 +169,9 @@ int main(int argc, char *argv[])
benchRaw(tbl[i], mcl::fp::FP_LLVM_MONT);
#endif
#ifdef MCL_USE_XBYAK
- benchRaw(tbl[i], mcl::fp::FP_XBYAK);
+ if (bitSize <= 256) {
+ benchRaw(tbl[i], mcl::fp::FP_XBYAK);
+ }
#endif
}
} catch (std::exception& e) {
diff --git a/src/fp.cpp b/src/fp.cpp
index 84e3e79..d00b99b 100644
--- a/src/fp.cpp
+++ b/src/fp.cpp
@@ -394,16 +394,19 @@ void Op::init(const std::string& mstr, size_t maxBitSize, Mode mode)
case 8: setOp<8>(*this, mode); break;
case 9: setOp<9>(*this, mode); break; // 576 if 64-bit
#if CYBOZU_OS_BIT == 32 || MCL_MAX_BIT_SIZE == 768
- case 10: setOp<10>(*this, mode); break;
- case 11: setOp<11>(*this, mode); break;
- case 12: setOp<12>(*this, mode); break; // 768 if 64-bit
+ case 10: setOp<10>(*this, mode); break;
+ case 11: setOp<11>(*this, mode); break;
+ case 12: setOp<12>(*this, mode); break; // 768 if 64-bit
#endif
#if CYBOZU_OS_BIT == 32
- case 13: setOp<13>(*this, mode); break;
- case 14: setOp<14>(*this, mode); break;
- case 15: setOp<15>(*this, mode); break;
- case 16: setOp<16>(*this, mode); break;
- case 17: setOp<17>(*this, mode); break; // 544 if 32-bit
+ case 13: setOp<13>(*this, mode); break;
+ case 14: setOp<14>(*this, mode); break;
+ case 15: setOp<15>(*this, mode); break;
+ case 16: setOp<16>(*this, mode); break;
+ case 17: setOp<17>(*this, mode); break; // 544 if 32-bit
+#endif
+#if CYBOZU_OS_BIT == 64 && MCL_MAX_BIT_SIZE == 1024
+ case 16: setOp<16>(*this, mode); break;
#endif
default:
throw cybozu::Exception("Op::init:not:support") << N << mstr;
diff --git a/src/low_func_llvm.hpp b/src/low_func_llvm.hpp
index a02001a..fe48853 100644
--- a/src/low_func_llvm.hpp
+++ b/src/low_func_llvm.hpp
@@ -14,7 +14,7 @@ struct EnableKaratsuba<Ltag> {
};
#if CYBOZU_OS_BIT == 32
- #define MCL_GMP_IS_FASTER_THAN_LLVM
+ #define MCL_GMP_IS_FASTER_THAN_LLVM // QQQ : check later
#endif
#ifdef MCL_GMP_IS_FASTER_THAN_LLVM
@@ -71,6 +71,9 @@ MCL_DEF_LLVM_FUNC(15)
MCL_DEF_LLVM_FUNC(16)
MCL_DEF_LLVM_FUNC(17)
#endif
+#if CYBOZU_OS_BIT == 64 && MCL_MAX_BIT_SIZE == 1024
+MCL_DEF_LLVM_FUNC(16)
+#endif
} } // mcl::fp
diff --git a/src/proto.hpp b/src/proto.hpp
index 0085f23..c11c8ec 100644
--- a/src/proto.hpp
+++ b/src/proto.hpp
@@ -58,6 +58,9 @@ MCL_FP_DEF_FUNC(15)
MCL_FP_DEF_FUNC(16)
MCL_FP_DEF_FUNC(17)
#endif
+#if CYBOZU_OS_BIT == 64 && MCL_MAX_BIT_SIZE == 1024
+MCL_FP_DEF_FUNC(16)
+#endif
MCL_FP_DEF_FUNC_SPECIAL(L)
MCL_FP_DEF_FUNC_SPECIAL(Lbmi2)