aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMITSUNARI Shigeo <herumi@nifty.com>2016-12-28 14:44:24 +0800
committerMITSUNARI Shigeo <herumi@nifty.com>2016-12-28 14:44:24 +0800
commit0c05b799332b65b1da5443c4f0b5915b3e30ef18 (patch)
treef049831c7c8711fad2d8e1d9fe1af750f2d03226
parent32ec71ff764430c1cce049def496c1d514dec635 (diff)
downloadtangerine-mcl-0c05b799332b65b1da5443c4f0b5915b3e30ef18.tar.gz
tangerine-mcl-0c05b799332b65b1da5443c4f0b5915b3e30ef18.tar.zst
tangerine-mcl-0c05b799332b65b1da5443c4f0b5915b3e30ef18.zip
add -put option for gen
-rw-r--r--src/gen.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/gen.cpp b/src/gen.cpp
index 97200fc..4e96216 100644
--- a/src/gen.cpp
+++ b/src/gen.cpp
@@ -883,17 +883,25 @@ struct Code : public mcl::Generator {
unit2 = unit * 2;
unitStr = cybozu::itoa(unit);
}
- void gen(const StrSet& privateFuncList, uint32_t maxBitSize)
+ void gen(const StrSet& privateFuncList, uint32_t maxBitSize, const std::string& putMode)
{
+ if (putMode != "all" && putMode != "mul" && putMode != "etc") throw cybozu::Exception("gen:putMode") << putMode;
+ bool putMul = putMode == "all" || putMode == "mul";
+ bool putEtc = putMode == "all" || putMode == "etc";
this->privateFuncList = &privateFuncList;
gen_once();
uint32_t end = ((maxBitSize + unit - 1) / unit);
for (uint32_t n = 1; n <= end; n++) {
setBit(n * unit);
- gen_all();
- gen_addsub();
- gen_mul();
+ if (putMul) {
+ gen_mul();
+ }
+ if (putEtc) {
+ gen_all();
+ gen_addsub();
+ }
}
+ if (!putEtc) return;
if (unit == 64 && maxBitSize == 768) {
for (uint32_t i = maxBitSize + unit * 2; i <= maxBitSize * 2; i += unit * 2) {
setBit(i);
@@ -908,10 +916,12 @@ int main(int argc, char *argv[])
{
uint32_t unit;
bool oldLLVM;
+ std::string putMode;
std::string privateFile;
cybozu::Option opt;
opt.appendOpt(&unit, uint32_t(sizeof(void*)) * 8, "u", ": unit");
opt.appendBoolOpt(&oldLLVM, "old", ": old LLVM(before 3.8)");
+ opt.appendOpt(&putMode, "all", "put", ": all/mul/etc");
opt.appendOpt(&privateFile, "", "f", ": private function list file");
opt.appendHelp("h");
if (!opt.parse(argc, argv)) {
@@ -932,7 +942,7 @@ int main(int argc, char *argv[])
}
c.setUnit(unit);
uint32_t maxBitSize = MCL_MAX_BIT_SIZE;
- c.gen(privateFuncList, maxBitSize);
+ c.gen(privateFuncList, maxBitSize, putMode);
} catch (std::exception& e) {
printf("ERR %s\n", e.what());
return 1;