diff options
author | Anthony Blake <anthonix@me.com> | 2012-10-11 17:53:46 +1300 |
---|---|---|
committer | Anthony Blake <anthonix@me.com> | 2012-10-11 17:53:46 +1300 |
commit | 11c42fab7cda9d63f763962970fbac754b2192de (patch) | |
tree | a5b766201fab4afa456ffcda4d8db1fa9a62fddb /src/codegen.c | |
parent | 54a23010b42e55641fca1aeb30261cc51db91881 (diff) | |
download | ffts-11c42fab7cda9d63f763962970fbac754b2192de.zip ffts-11c42fab7cda9d63f763962970fbac754b2192de.tar.gz |
Builds and runs on Android/ARM
Diffstat (limited to 'src/codegen.c')
-rw-r--r-- | src/codegen.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/codegen.c b/src/codegen.c index f4e1912..c5469da 100644 --- a/src/codegen.c +++ b/src/codegen.c @@ -2,7 +2,11 @@ #include "macros.h" //#include "mini_macros.h" #include "cp_sse.h" -#include <libkern/OSCacheControl.h> + +#ifdef __APPLE__ + #include <libkern/OSCacheControl.h> +#endif + #include <sys/types.h> #include <sys/mman.h> @@ -15,6 +19,10 @@ #include "sse_float.h" #endif +#ifdef __ANDROID__ + #include <unistd.h> +#endif + int tree_count(int N, int leafN, int offset) { if(N <= leafN) return 0; @@ -133,8 +141,14 @@ void ffts_generate_func_code(ffts_plan_t *p, size_t N, size_t leafN) { else p->transform_size = 16384 + 2*N/8 * __builtin_ctzl(N); #endif +#ifdef __APPLE__ p->transform_base = mmap(NULL, p->transform_size, PROT_WRITE | PROT_READ, MAP_ANON | MAP_SHARED, -1, 0); - /* +#else +#define MAP_ANONYMOUS 0x20 + p->transform_base = mmap(NULL, p->transform_size, PROT_WRITE | PROT_READ, MAP_ANONYMOUS | MAP_SHARED, -1, 0); +#endif + +/* if(p->transform_base == MAP_FAILED) { fprintf(stderr, "MAP FAILED\n"); exit(1); @@ -520,9 +534,11 @@ void ffts_generate_func_code(ffts_plan_t *p, size_t N, size_t leafN) { perror("Couldn't mprotect"); exit(1); } - +#ifdef __APPLE__ sys_icache_invalidate(func, p->transform_size); - +#elif __ANDROID__ + cacheflush((long)(func), (long)(func) + p->transform_size, 0); +#endif //fprintf(stderr, "size of transform %zu = %d\n", N, (fp-func)*4); |