diff options
author | clairexen <claire@symbioticeda.com> | 2020-06-26 16:01:51 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-06-26 16:01:51 +0200 |
commit | ed978e24e2874ba20e16da18d735f414680c34be (patch) | |
tree | da238e9a8c7a839c533f6fef655c0ba9de91a451 | |
parent | f138ade065c4893e2dd0460ba4abbe13922aa47b (diff) | |
parent | 7ed94f51708f7838176bbb46ae680d967aaef744 (diff) | |
download | icestorm-ed978e24e2874ba20e16da18d735f414680c34be.tar.gz icestorm-ed978e24e2874ba20e16da18d735f414680c34be.tar.bz2 icestorm-ed978e24e2874ba20e16da18d735f414680c34be.zip |
Merge pull request #262 from whitequark/icebram-fix
Fix icebram
-rw-r--r-- | icebram/icebram.cc | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/icebram/icebram.cc b/icebram/icebram.cc index 97e6a2c..aacf00c 100644 --- a/icebram/icebram.cc +++ b/icebram/icebram.cc @@ -106,7 +106,7 @@ void help(const char *cmd) printf(" use the same file as <from_hexfile> later.\n"); printf("\n"); printf(" -s <seed>\n"); - printf(" seed random generator with the given value.\n"); + printf(" seed random generator with fixed value.\n"); printf("\n"); printf(" -v\n"); printf(" verbose output\n"); @@ -131,7 +131,7 @@ int main(int argc, char **argv) bool verbose = false; bool generate = false; bool seed = false; - uint32_t seed_nr = 0; + uint32_t seed_opt = 0; int opt; while ((opt = getopt(argc, argv, "vgs:")) != -1) @@ -146,7 +146,7 @@ int main(int argc, char **argv) break; case 's': seed = true; - seed_nr = atoi(optarg); + seed_opt = atoi(optarg); break; default: help(argv[0]); @@ -172,7 +172,21 @@ int main(int argc, char **argv) } if (verbose && seed) - fprintf(stderr, "Seed: %d\n", seed_nr); + fprintf(stderr, "Seed: %d\n", seed_opt); + + // If -s is provided: seed with the given value. + // If -s is not provided: seed with the PID and current time, which are unlikely + // to repeat simultaneously. + uint32_t seed_nr; + if (!seed) { +#if defined(__wasm) + seed_nr = 0; +#else + seed_nr = getpid(); +#endif + } else { + seed_nr = seed_opt; + } x = uint64_t(seed_nr) << 32; x ^= uint64_t(depth) << 16; @@ -182,16 +196,12 @@ int main(int argc, char **argv) xorshift64star(); xorshift64star(); - if (!seed){ + if (!seed) { struct timeval tv; gettimeofday(&tv, NULL); x ^= uint64_t(tv.tv_sec) << 20; x ^= uint64_t(tv.tv_usec); } - else { - x ^= uint64_t(seed) << 20; - x ^= uint64_t(seed); - } xorshift64star(); xorshift64star(); |