int main(int argc, char** argv){ if(argc != 2){ printf("Usage: sacs <source-file>\n"); return 0; } struct asm_binary* bin = asm_parse_file(argv[1]); mem_init(); mem_dynamic_alloc(0x400000,MEM_FAKE_ALLOC|MEM_USE_LOCKED); uint32_t loc = mem_dynamic_alloc(bin->size,MEM_USE_LOCKED); assert(loc == 0x400000); memcpy(mem_translate_addr(loc),bin->binary,bin->size); struct exec_stats_t* stats = exec_run(loc,loc,loc+bin->data_segment); mem_cleanup(); printf("C: %d\nIC: %d\nNOPs: %d\n",stats->c,stats->ic,stats->nopc); return 0; }
void loads(size_t len, size_t range, size_t stride, int parallel, int warmup, int repetitions) { double result; size_t count; struct mem_state state; if (range < stride) return; state.width = 1; state.len = range; state.maxlen = len; state.line = stride; state.pagesize = getpagesize(); count = 100 * (state.len / (state.line * 100) + 1); #if 0 (*fpInit)(0, &state); fprintf(stderr, "loads: after init\n"); (*benchmark_loads)(2, &state); fprintf(stderr, "loads: after benchmark\n"); mem_cleanup(0, &state); fprintf(stderr, "loads: after cleanup\n"); settime(1); save_n(1); #else /* * Now walk them and time it. */ benchmp(fpInit, benchmark_loads, mem_cleanup, 100000, parallel, warmup, repetitions, &state); #endif /* We want to get to nanoseconds / load. */ save_minimum(); result = (1000. * (double)gettime()) / (double)(count * get_n()); fprintf(stderr, "%.5f %.3f\n", range / (1024. * 1024.), result); }
int main(void){ printf("Initializing\n"); mem_init(); printf("Allocating 1MB\n"); uint32_t loc = mem_dynamic_alloc(1<<20,0); printf("Got address 0x%X\n",loc); printf("Writing 192342\n"); mem_write32(loc,192343); printf("Reading...\n"); uint32_t result = mem_read32(loc); printf("Read %d\n",result); printf("Freeing\n"); mem_free(loc); printf("Cleaning up\n"); mem_cleanup(); return 0; }