summaryrefslogtreecommitdiffstats
path: root/src/codegen.c
diff options
context:
space:
mode:
authorAnthony Blake <anthonix@me.com>2012-10-11 17:53:46 +1300
committerAnthony Blake <anthonix@me.com>2012-10-11 17:53:46 +1300
commit11c42fab7cda9d63f763962970fbac754b2192de (patch)
treea5b766201fab4afa456ffcda4d8db1fa9a62fddb /src/codegen.c
parent54a23010b42e55641fca1aeb30261cc51db91881 (diff)
downloadffts-11c42fab7cda9d63f763962970fbac754b2192de.zip
ffts-11c42fab7cda9d63f763962970fbac754b2192de.tar.gz
Builds and runs on Android/ARM
Diffstat (limited to 'src/codegen.c')
-rw-r--r--src/codegen.c24
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);
OpenPOWER on IntegriCloud