blob: 2bb497fe8934f9ba73d09b2e7bfd63d90a14e887 [file] [log] [blame]
// A simple Sieve of Eratosthenes
#ifdef TESTBENCH
# include <stdint.h>
# include <stdbool.h>
# include <stdio.h>
#else
typedef unsigned int uint32_t;
typedef unsigned char bool;
#endif
#define BITMAP_SIZE 64
#define OUTPORT 0xff000004
static uint32_t bitmap[BITMAP_SIZE/32];
static void bitmap_set(uint32_t idx)
{
bitmap[idx/32] |= 1 << (idx % 32);
}
static bool bitmap_get(uint32_t idx)
{
return (bitmap[idx/32] & (1 << (idx % 32))) != 0;
}
static void output(uint32_t val)
{
#ifdef TESTBENCH
printf("%d\n", (int)val);
#else
*((volatile uint32_t*)OUTPORT) = val;
#endif
}
int main()
{
uint32_t i, j, k;
output(2);
for (i = 0; i < BITMAP_SIZE; i++) {
if (bitmap_get(i))
continue;
output(3+2*i);
for (j = 2*(3+2*i);; j += 3+2*i) {
if (j%2 == 0)
continue;
k = (j-3)/2;
if (k >= BITMAP_SIZE)
break;
bitmap_set(k);
}
}
return 0;
}