aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2016-09-27 10:32:35 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2016-09-27 10:32:35 +0800
commit16fb544eb462ae6b94150dc93e16f8f3ca6d7169 (patch)
tree9e308145d847177b1c794782e61c5333311900bb
parenta441a522facde9804f44550848c32bd22b645d9c (diff)
downloaddexon-mcl-16fb544eb462ae6b94150dc93e16f8f3ca6d7169.tar.gz
dexon-mcl-16fb544eb462ae6b94150dc93e16f8f3ca6d7169.tar.zst
dexon-mcl-16fb544eb462ae6b94150dc93e16f8f3ca6d7169.zip
fp_neg requires p
-rw-r--r--include/mcl/fp.hpp8
-rw-r--r--include/mcl/op.hpp2
-rw-r--r--src/fp.cpp4
-rw-r--r--src/fp_generator.hpp2
-rw-r--r--test/fp_generator_test.cpp2
5 files changed, 7 insertions, 11 deletions
diff --git a/include/mcl/fp.hpp b/include/mcl/fp.hpp
index fa8a5af..3d818bc 100644
--- a/include/mcl/fp.hpp
+++ b/include/mcl/fp.hpp
@@ -129,7 +129,7 @@ public:
assert(sizeof(mp_limb_t) == sizeof(Unit));
// set default wrapper function
op_.clear();
- op_.fp_neg = fp_negW;
+ op_.fp_neg = 0;
op_.fp_sqr = fp_sqrW;
op_.fp_add = 0;
op_.fp_sub = 0;
@@ -372,7 +372,7 @@ public:
static inline void mul(FpT& z, const FpT& x, const FpT& y) { op_.fp_mul(z.v_, x.v_, y.v_); }
static inline void mul_Unit(FpT& z, const FpT& x, const Unit y) { op_.fp_mul_Unit(z.v_, x.v_, y); }
static inline void inv(FpT& y, const FpT& x) { op_.fp_invOp(y.v_, x.v_, op_); }
- static inline void neg(FpT& y, const FpT& x) { op_.fp_neg(y.v_, x.v_); }
+ static inline void neg(FpT& y, const FpT& x) { op_.fp_neg(y.v_, x.v_, op_.p); }
static inline void sqr(FpT& y, const FpT& x) { op_.fp_sqr(y.v_, x.v_); }
static inline void divBy2(FpT& y, const FpT& x)
{
@@ -521,10 +521,6 @@ private:
op_.fpDbl_sqrPre(xx, x);
op_.fpDbl_mod(y, xx);
}
- static inline void fp_negW(Unit *y, const Unit *x)
- {
- op_.fp_negP(y, x, op_.p);
- }
// wrapper function for mcl_fp_mont by LLVM
static inline void fp_montW(Unit *z, const Unit *x, const Unit *y)
{
diff --git a/include/mcl/op.hpp b/include/mcl/op.hpp
index 69dd803..a7721d9 100644
--- a/include/mcl/op.hpp
+++ b/include/mcl/op.hpp
@@ -85,7 +85,7 @@ struct Op {
void1u fp_clear;
void2u fp_copy;
// not require p(function having p)
- void2u fp_neg;
+ void3u fp_neg;
void2u fp_sqr;
void4u fp_add;
void4u fp_sub;
diff --git a/src/fp.cpp b/src/fp.cpp
index 9025827..3d7b3db 100644
--- a/src/fp.cpp
+++ b/src/fp.cpp
@@ -326,7 +326,7 @@ struct OpeFunc {
fp_isZero = OpeFunc<n>::fp_isZeroC; \
fp_clear = OpeFunc<n>::fp_clearC; \
fp_copy = OpeFunc<n>::fp_copyC; \
- fp_negP = OpeFunc<n>::fp_negC; \
+ fp_neg = OpeFunc<n>::fp_negC; \
if (isMont) { \
fp_invOp = OpeFunc<n>::fp_invMontOpC; \
} else { \
@@ -588,7 +588,7 @@ int64_t getInt64(bool *pb, fp::Block& b, const fp::Op& op)
{
bool isNegative = false;
if (fp::isGreaterArray(b.p, op.half, op.N)) {
- op.fp_neg(b.v_, b.p);
+ op.fp_neg(b.v_, b.p, op.p);
b.p = b.v_;
isNegative = true;
}
diff --git a/src/fp_generator.hpp b/src/fp_generator.hpp
index 7e3b857..90aba80 100644
--- a/src/fp_generator.hpp
+++ b/src/fp_generator.hpp
@@ -215,7 +215,7 @@ struct FpGenerator : Xbyak::CodeGenerator {
gen_shr1();
align(16);
- op.fp_neg = getCurr<void2u>();
+ op.fp_neg = getCurr<void3u>();
gen_neg();
align(16);
diff --git a/test/fp_generator_test.cpp b/test/fp_generator_test.cpp
index 36dc5ae..ad8e7b4 100644
--- a/test/fp_generator_test.cpp
+++ b/test/fp_generator_test.cpp
@@ -133,7 +133,7 @@ void testNeg(const mcl::fp::Op& op)
x.setStr(tbl[i]);
mx.set(x);
x = -x;
- op.fp_neg(mx.v, mx.v);
+ op.fp_neg(mx.v, mx.v, op.p);
CYBOZU_TEST_EQUAL(mx, x);
}
}