static  void    analyze_cecil (void)

{
	int     i, j;
	short   slen, tsize, nb_generics, nb_types, dynamic_type;
	char    *s;

	printf ("Analyzing Cecil\n");

	/* Print two tables: non-gneric and generic */
	for (j = 0, s = "Non generic table size : %d\n"; j < 2; j ++, s = "Generic table size     : %d\n") {
		tsize = rshort ();
		fprintf (mfp, s, (int) tsize);
		i = (int) tsize;
		while (i--) {
			fprintf (mfp,"   Name : ");
			slen = rshort ();
			while (slen--) {
				fprintf (mfp,"%c", rchar ());
			}
			fprintf (mfp,"\n");
		}
		i = (int) tsize;
		while (i--) {
			nb_generics = rshort ();
			dynamic_type = rshort ();
			fprintf (mfp,"    Dynamic type : %d, Generics : %d\n", (int) dynamic_type, (int) nb_generics);
			if (nb_generics)
			{
				nb_types = rshort ();
				fprintf (mfp,"    Types    : %d\n", (int) nb_types);
				rseq ((int) (nb_generics * nb_types * sizeof (int32)));
				rseq ((int) (nb_types * sizeof (int16)));
			}
		}
	}
	print_line ();
}
Example #2
0
void initsound(BYTE src[][2]){
#if 0
	int i;
	for(i = 0; i < numof(soundbuf[0]); i++){
		src[i][0] = 256 * i / numof(soundbuf[0]);
		src[i][1] = 256 - 256 * i / numof(soundbuf[0]);
	}
#elif !defined NDEBUG && 0
	int i;
	struct random_sequence rs;
	init_rseq(&rs, src);
	for(i = 0; i < sizeof soundbuf[0]; i++)
		src[i] = 0x80 + rseq(&rs) % 10 - 5;
#else
#	if SAMPLEBITS == 8
	memset(src, 0x80, sizeof soundbuf[0]);
#	else
	memset(src, 0, sizeof soundbuf[0]);
#	endif
#endif
}
Example #3
0
uint32_t rseqf(rst *rs)
{
#if RSEQMETHOD==0
	return ((rs->i = (rs->i) * 2110005341UL + 2531011UL) >> 3) * 445223UL;
#elif RSEQMETHOD==1
/*	double d = 1. / (double)MBIG;*/
	uint32_t mj;

	if(++rs->pk1 == rs->k_ma_end)	rs->pk1 = &rs->k_ma[1];
	if(++rs->pk2 == rs->k_ma_end)	rs->pk2 = &rs->k_ma[1];
	if((mj = *rs->pk1 - *rs->pk2) < 0)	mj += MBIG;
	return (*rs->pk1 = mj);
#elif RSEQMETHOD==2
	return SHR3((rs->jsr));
#elif RSEQMETHOD==3
	return FIB((rs->a),(rs->b));
#elif RSEQMETHOD==6
	return rseq(rs);
#else
	return MWC((rs->z),(rs->w));
#endif
}
Example #4
0
int main(int argc, char *argv[]){
	double n = 1;
	int test_init = 0;
	int test_method = 0;
	int test_period = 0;
	if(argc < 2){
		printf("usage: %s [-i] [-m] [-p] repeats\n", argv[0]);
		printf("   Tests pseudo random number generator algorithms repeats times. Default once.\n");
		printf("   -i Profiles initialization cost instead of generation.\n");
		printf("   -m Profiles Mersenne Twister.\n");
		printf("   -p Profiles period of the number sequence.\n");
		return 1;
	}
	{
		int a = 0;
		for(a = 1; a < argc; a++){
			if(!strcmp(argv[a], "-i")){
				test_init = 1;
			}
			else if(!strcmp(argv[a], "-m"))
				test_method = 1; // Test Mersenne Twister
			else if(!strcmp(argv[a], "-p"))
				test_period = 1;
			else
				n = atof(argv[a]);
		}
	}
	if(test_init){
		struct random_sequence rs;
		double i;
		clock_t c = clock();
		if(test_method == 0){
			volatile uint32_t c = 0;
			for(i = 0; i < n; i++){
				init_rseq(&rs, i);
				c = rseq(&rs); // Make sure initialization runs by taking side effects
			}
		}
		else{
			volatile uint32_t crc = 0;
			for(i = 0; i < n; i++){
				init_genrand(i);
				crc = genrand_int32(); // Make sure initialization runs by taking side effects
			}
		}
		double seconds = (double)(clock() - c) / CLOCKS_PER_SEC;
		printf("second = %lg\n", seconds);
		printf("initialization per second = %lg\n", i / seconds);
	}
	else{
		struct random_sequence rs;
		double i;
		clock_t c = clock();
		if(test_method == 0){
			struct random_sequence inirs; // Buffer to hold initial state vector.
			volatile uint32_t v = 0;
			init_rseq(&rs, 1);
			if(!test_period){
				for(i = 0; i < n; i++)
					v = rseq(&rs);
			}
			else{
				inirs = rs;
				for(i = 0; i < n; i++){
					v = rseq(&rs);
					// Detect period by comparing state vector, not by returned value.
					// Note that random_sequence structure could have padding bytes that
					// don't contribute to period, but it's unlikely that those paddings
					// are altered between calls.
					if(!memcmp(&inirs, &rs, sizeof rs)){
						printf("Period %lg\n", i);
						break;
					}
				}
			}
		}
		else{
			volatile uint32_t v = 0;
			init_genrand(1);
			for(i = 0; i < n; i++){
				v = genrand_int32();
				// Measuring period of Mersenne Twister is meaningless, because it
				// has far more internal state vectors than the value returned.
				// We should be taking more than universe's lifetime to reach the period.
/*				if(inival == v){
					printf("period %lg\n", i);
					break;
				}*/
			}
		}
		double seconds = (double)(clock() - c) / CLOCKS_PER_SEC;
		printf("second = %lg\n", seconds);
		printf("generation per second = %lg\n", i / seconds);
	}
	return 0;
}