/* sieve of Eratosthenes to demonstrate TinyMips in Hades */ #include int main( int argc, char** argv ) { int i; int j; int limit = 8192; // size of sieve int * sieve = (void*) 0x00000400; // start address of sieve // initialization loop for( i=0; i < limit; i++ ) { *(sieve+i) = 0xCCCCCCCC; } // first loop iteration marks all multiples of 2 for( i=4; i < limit; i = i+2 ) { *(sieve+i) = 2; } // next nested loop marks all multiples of 3,5,7,... for( i=3; i < limit; i = i+2 ) { *(sieve-1) = i; for( j=(i+i); j < limit; j = j+i ) { *(sieve+j) = i; } } // endless loop that writes the detected primes to *(sieve-2) for( ;; ) { for( i=0; i < limit; i++ ) { if (*(sieve+i) == 0xCCCCCCCC) { *(sieve-2) = i; } } } }