#include #include #include #include /* This is creating a program that has * a few more text pages than the average * program we usually have. */ // #define DEBUG extern void call_all_loop(int count); void write_data(unsigned int array[], unsigned int start); void read_data(unsigned int array[], unsigned int start, const char *array_name); void print_data(unsigned int array[]); void do_work(unsigned int start); #define PAGE_SIZE (4096) #define DATA_BYTES (3 * 1024 * 1024) #define PAGES (DATA_BYTES / PAGE_SIZE) #define ELEM_SIZE (sizeof(unsigned int)) #define ELEMS ((PAGE_SIZE * PAGES / sizeof(unsigned int)) / 2) #define ELEMS_PER_PAGE (PAGE_SIZE / ELEM_SIZE) #define TLB_SIZE (64) #define LOCAL_REFS (TLB_SIZE - 6) /* leave a few pages for code and stack */ #define STACK_PAGES_USED (9) #define STACK_ARRAY_ELEMS (PAGE_SIZE * STACK_PAGES_USED / sizeof(unsigned int)) #define MIN(a,b) ((a < b) ? a : b) unsigned int init[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, }; #define INIT_ARRAY_ELEMS (sizeof(init) / sizeof(int)) unsigned int array1[ELEMS]; unsigned int array2[ELEMS]; void write_data(unsigned int array[], unsigned int start) { unsigned int i = 0; unsigned int k = 0; unsigned int end = 0; for (k=0; k