// This returns #t if successful, or a number (the correct length) if there was a mismatched length. ptr s_fftw_execute (ptr vec, uptr plan) { int i; int len = Svector_length(vec); int N = len / 2; clock_t start, end; plan_t* p = (plan_t*) plan; /*printf("Executing!! len %i incoming len %i\n", p->vec_len, Svector_length(vec)); for (i=0; i<10; i++) printf(" Got element %i %lf\n", i, ((double*)p->vec)[i]); printf(" Got element %i %lf\n", 262000, ((double*)p->vec)[262000]); printf(" Got element %i %lf\n", 524000, ((double*)p->vec)[524000]);*/ // TODO: CHECK THAT LENGTH IS RIGHT! if (N != p->vec_len) { printf("Mismatched lengths! %i %i\n", N, p->vec_len); return(Sfixnum((uptr)p->vec_len)); } //printf("Measuring... "); fflush( 0 ); //start = clock(); //end = clock(); //printf("Done. (time used %i)\n", end - start); fflush( 0 ); //printf("Filling... \n"); fflush( 0 ); for(i=0; i<len; i+=2) { /*printf("Loading: real %lf, imag %lf\n", Sflonum_value(Svector_ref(vec, i)), Sflonum_value(Svector_ref(vec, i+1)));*/ ((double*)p->vec)[i] = Sflonum_value(Svector_ref(vec, i)); ((double*)p->vec)[i+1] = Sflonum_value(Svector_ref(vec, i+1)); } //printf("Done\n"); //printf("Executing... "); fflush( 0 ); //start = clock(); fftw_execute(p->plan); //end = clock(); //printf("Done. (time used %i)\n", end - start); fflush( 0 ); //printf("Clocks per sec... %i\n", CLOCKS_PER_SEC); // Fill the output back into the vector: for(i=0; i<len; i++) { //printf("Unloading: %lf\n", ((double*)out)[i]); Svector_set(vec, i, Sflonum(((double*)p->vec)[i])); } }
void racket_boot(int argc, char **argv, char *exec_file, char *run_file, char *boot_exe, long segment_offset, char *coldir, char *configdir, /* wchar_t * */void *dlldir, int pos1, int pos2, int pos3, int cs_compiled_subdir, int is_gui, int wm_is_gracket_or_x11_arg_count, char *gracket_guid_or_x11_args, void *dll_open, void *dll_find_object) /* exe argument already stripped from argv */ { #if !defined(RACKET_USE_FRAMEWORK) || !defined(RACKET_AS_BOOT) int fd; #endif #ifdef RACKET_USE_FRAMEWORK const char *fw_path; #endif #ifdef WIN32 if (dlldir) rktio_set_dll_path((wchar_t *)dlldir); if (dll_open) rktio_set_dll_procs(dll_open, dll_find_object); #endif Sscheme_init(NULL); #ifdef RACKET_USE_FRAMEWORK fw_path = get_framework_path(); Sregister_boot_file(path_append(fw_path, "petite.boot")); Sregister_boot_file(path_append(fw_path, "scheme.boot")); # ifdef RACKET_AS_BOOT Sregister_boot_file(path_append(fw_path, "racket.boot")); # endif #else fd = open(boot_exe, O_RDONLY | BOOT_O_BINARY); { int fd1, fd2; fd1 = dup(fd); lseek(fd1, pos1, SEEK_SET); Sregister_boot_file_fd("petite", fd1); fd2 = open(boot_exe, O_RDONLY | BOOT_O_BINARY); lseek(fd2, pos2, SEEK_SET); Sregister_boot_file_fd("scheme", fd2); # ifdef RACKET_AS_BOOT fd = open(boot_exe, O_RDONLY | BOOT_O_BINARY); lseek(fd, pos3, SEEK_SET); Sregister_boot_file_fd("racket", fd); # endif } #endif Sbuild_heap(NULL, init_foreign); { ptr l = Snil; int i; char segment_offset_s[32], wm_is_gracket_s[32]; for (i = argc; i--; ) { l = Scons(Sbytevector(argv[i]), l); } l = Scons(Sbytevector(gracket_guid_or_x11_args), l); sprintf(wm_is_gracket_s, "%d", wm_is_gracket_or_x11_arg_count); l = Scons(Sbytevector(wm_is_gracket_s), l); l = Scons(Sbytevector(is_gui ? "true" : "false"), l); l = Scons(Sbytevector(cs_compiled_subdir ? "true" : "false"), l); sprintf(segment_offset_s, "%ld", segment_offset); l = Scons(Sbytevector(segment_offset_s), l); l = Scons(Sbytevector(configdir), l); l = Scons(parse_coldirs(coldir), l); l = Scons(Sbytevector(run_file), l); l = Scons(Sbytevector(exec_file), l); #ifdef RACKET_AS_BOOT { ptr c, start, apply; c = Stop_level_value(Sstring_to_symbol("scheme-start")); start = Scall0(c); apply = Stop_level_value(Sstring_to_symbol("apply")); Scall2(apply, start, l); } #else Sset_top_level_value(Sstring_to_symbol("bytes-command-line-arguments"), l); #endif } #ifndef RACKET_AS_BOOT # ifdef RACKET_USE_FRAMEWORK fd = open(path_append(fw_path, "racket.so"), O_RDONLY); pos3 = 0; # endif { ptr c, p; if (pos3) lseek(fd, pos3, SEEK_SET); c = Stop_level_value(Sstring_to_symbol("open-fd-input-port")); p = Scall1(c, Sfixnum(fd)); Slock_object(p); c = Stop_level_value(Sstring_to_symbol("port-file-compressed!")); Scall1(c, p); Sunlock_object(p); c = Stop_level_value(Sstring_to_symbol("load-compiled-from-port")); Scall1(c, p); } #endif }