X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=samples%2Fsieve.c;h=9d166b768c721fcef07c5482cc182b74ab81a49b;hb=f12fbc4a3b4ff7a30cea4b484aa6f8ac77763b2b;hp=b2fc9cdbc7eef5e3fedd327579e7cdf84a8e15dc;hpb=043acb1d984f88a8ffdee3647dfea2b6cc592309;p=cc65 diff --git a/samples/sieve.c b/samples/sieve.c index b2fc9cdbc..9d166b768 100644 --- a/samples/sieve.c +++ b/samples/sieve.c @@ -11,27 +11,34 @@ #include +/* Workaround missing clock stuff */ +#ifdef __APPLE2__ +# define clock() 0 +# define CLOCKS_PER_SEC 1 +#endif + + /*****************************************************************************/ -/* Data */ +/* Data */ /*****************************************************************************/ -#define COUNT 8192 /* Up to what number? */ -#define SQRT_COUNT 91 /* Sqrt of COUNT */ +#define COUNT 16384 /* Up to what number? */ +#define SQRT_COUNT 128 /* Sqrt of COUNT */ static unsigned char Sieve[COUNT]; /*****************************************************************************/ -/* Code */ +/* Code */ /*****************************************************************************/ -#pragma staticlocals(1); +#pragma static-locals(1); @@ -52,8 +59,8 @@ int main (void) /* This is an example where register variables make sense */ register unsigned char* S; - register unsigned I; - register unsigned J; + register unsigned I; + register unsigned J; /* Output a header */ printf ("Sieve benchmark - calculating primes\n"); @@ -66,16 +73,17 @@ int main (void) /* Execute the sieve */ I = 2; while (I < SQRT_COUNT) { - if (Sieve[I] == 0) { - /* Prime number - mark multiples */ - S = &Sieve[J = I*2]; - while (J < COUNT) { - *S = 1; - S += I; - J += I; - } - } - ++I; + if (Sieve[I] == 0) { + /* Prime number - mark multiples */ + J = I*2; + S = &Sieve[J]; + while (J < COUNT) { + *S = 1; + S += I; + J += I; + } + } + ++I; } /* Calculate the time used */ @@ -89,11 +97,11 @@ int main (void) /* Wait for a key and print the list if not 'Q' */ if (ReadUpperKey () != 'Q') { - /* Print the result */ + /* Print the result */ J = 0; - for (I = 2; I < COUNT; ++I) { - if (Sieve[I] == 0) { - printf ("%4d\n", I); + for (I = 2; I < COUNT; ++I) { + if (Sieve[I] == 0) { + printf ("%4d\n", I); if (++J == 23) { printf ("Q to quit, any other key continues\n"); if (ReadUpperKey () == 'Q') { @@ -101,11 +109,11 @@ int main (void) } J = 0; } - } - if (kbhit() && ReadUpperKey == 'Q') { - break; - } - } + } + if (kbhit() && ReadUpperKey == 'Q') { + break; + } + } } return EXIT_SUCCESS;