static void banner(void) { printf("mdrotor v0.1 ("); #ifdef __SSE2__ printf("SSE2:%s ", cpu_has_sse2() ? "yes" : "no"); #endif printf("nCPU:%d)\n", get_number_of_cpus()); }
int ikarus_main(int argc, char** argv, char* boot_file){ if(! cpu_has_sse2()){ fprintf(stderr, "Ikarus Scheme cannot run on your computer because\n"); fprintf(stderr, "your CPU does not support the SSE2 instruction set.\n"); fprintf(stderr, "Refer to the Ikarus Scheme User's Guide for the\n"); fprintf(stderr, "minimum hardware requirements.\n"); exit(-1); } if(sizeof(mp_limb_t) != sizeof(long int)){ fprintf(stderr, "ERROR: limb size does not match\n"); exit(-1); } if(mp_bits_per_limb != (8*sizeof(long int))){ fprintf(stderr, "ERROR: invalid bits_per_limb=%d\n", mp_bits_per_limb); exit(-1); } ikpcb* pcb = ik_make_pcb(); the_pcb = pcb; { /* set up arg_list */ ikptr arg_list = null_object; int i = argc-1; while(i > 0){ char* s = argv[i]; int n = strlen(s); ikptr bv = ik_unsafe_alloc(pcb, align(disp_bytevector_data+n+1)) + bytevector_tag; ref(bv, off_bytevector_length) = fix(n); memcpy((char*)(bv+off_bytevector_data), s, n+1); ikptr p = ik_unsafe_alloc(pcb, pair_size); ref(p, disp_car) = bv; ref(p, disp_cdr) = arg_list; arg_list = p+pair_tag; i--; } pcb->arg_list = arg_list; } register_handlers(); register_alt_stack(); ik_fasl_load(pcb, boot_file); /* fprintf(stderr, "collect time: %d.%03d utime, %d.%03d stime (%d collections)\n", pcb->collect_utime.tv_sec, pcb->collect_utime.tv_usec/1000, pcb->collect_stime.tv_sec, pcb->collect_stime.tv_usec/1000, pcb->collection_id ); */ ik_delete_pcb(pcb); return 0; }