summaryrefslogtreecommitdiff
path: root/src/sparc
diff options
context:
space:
mode:
authorAnthony Green <green@moxielogic.com>2013-02-08 12:25:18 -0500
committerAnthony Green <green@moxielogic.com>2013-02-08 12:25:18 -0500
commitcb03ea8f4eb08024e44abe4392edc77b89fbfbad (patch)
treefab68bb2739c7dd350010c0a6c4e6aecbfaa1f79 /src/sparc
parent35ee8d44f31dd3d3b88083c837dc351593e13cc2 (diff)
downloadlibffi-cb03ea8f4eb08024e44abe4392edc77b89fbfbad.tar.gz
sparc v9 fixes for sun tools
Diffstat (limited to 'src/sparc')
-rw-r--r--src/sparc/ffi.c5
-rw-r--r--src/sparc/v8.S4
2 files changed, 6 insertions, 3 deletions
diff --git a/src/sparc/ffi.c b/src/sparc/ffi.c
index 7c384ef..564be13 100644
--- a/src/sparc/ffi.c
+++ b/src/sparc/ffi.c
@@ -521,16 +521,15 @@ ffi_prep_closure_loc (ffi_closure* closure,
closure->user_data = user_data;
/* Flush the Icache. closure is 8 bytes aligned. */
+#ifdef __GNUC__
#ifdef SPARC64
asm volatile ("flush %0; flush %0+8" : : "r" (closure) : "memory");
#else
-#ifdef __GNUC__
asm volatile ("iflush %0; iflush %0+8" : : "r" (closure) : "memory");
/* SPARC v8 requires 5 instructions for flush to be visible */
asm volatile ("nop; nop; nop; nop; nop");
-#else
- ffi_flush_icache (closure, 16);
#endif
+ ffi_flush_icache (closure, 16);
#endif
return FFI_OK;
diff --git a/src/sparc/v8.S b/src/sparc/v8.S
index 4faf3bd..ba3cdac 100644
--- a/src/sparc/v8.S
+++ b/src/sparc/v8.S
@@ -41,7 +41,11 @@
ffi_flush_icache:
_ffi_flush_icache:
add %o0, %o1, %o2
+#ifdef SPARC64
+1: flush %o0
+#else
1: iflush %o0
+#endif
add %o0, 8, %o0
cmp %o0, %o2
blt 1b