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();  | 
