svn commit: r243990 - projects/bpfjit/sys/contrib/sljit
Jung-uk Kim
jkim at FreeBSD.org
Fri Dec 7 20:09:28 UTC 2012
Author: jkim
Date: Fri Dec 7 20:09:27 2012
New Revision: 243990
URL: http://svnweb.freebsd.org/changeset/base/243990
Log:
Implement the SLJIT_CACHE_FLUSH() macro for arm, mips, and powerpc. It was
only compile-tested on powerpc. arm and mips are just my blunt guesswork.
Discussed with: nwhitehorn (powerpc)
Modified:
projects/bpfjit/sys/contrib/sljit/sljitConfig.h
projects/bpfjit/sys/contrib/sljit/sljitNativePPC_common.c
Modified: projects/bpfjit/sys/contrib/sljit/sljitConfig.h
==============================================================================
--- projects/bpfjit/sys/contrib/sljit/sljitConfig.h Fri Dec 7 19:06:40 2012 (r243989)
+++ projects/bpfjit/sys/contrib/sljit/sljitConfig.h Fri Dec 7 20:09:27 2012 (r243990)
@@ -38,8 +38,17 @@
#ifdef _KERNEL
#include <sys/malloc.h>
+#include <sys/stddef.h>
#include <sys/systm.h>
+#if defined(__arm__)
+#include <machine/cpufunc.h>
+#elif defined(__mips__)
+#include <machine/cache.h>
+#elif defined(__powerpc__)
+#include <machine/md_var.h>
+#endif
+
#define SLJIT_CALL
#define SLJIT_CONFIG_AUTO 1
#define SLJIT_DEBUG 0
@@ -58,7 +67,16 @@
#define SLJIT_FREE_EXEC(ptr) free(ptr, M_TEMP)
#define SLJIT_MALLOC_EXEC(size) malloc(size, M_TEMP, M_NOWAIT)
-/* XXX need SLJIT_CACHE_FLUSH(from, to) for non-X86 to flush icache */
+#if defined(__arm__)
+#define SLJIT_CACHE_FLUSH(from, to) \
+ cpu_icache_sync_range(from, (ptrdiff_t)(to) - (ptrdiff_t)(from))
+#elif defined(__mips__)
+#define SLJIT_CACHE_FLUSH(from, to) \
+ mips_icache_sync_range(from, (ptrdiff_t)(to) - (ptrdiff_t)(from))
+#elif defined(__powerpc__)
+/* ppc_cache_flush() was modified to call __syncicache(). */
+#define SLJIT_CACHE_FLUSH(from, to) ppc_cache_flush(from, to)
+#endif
#endif
/* --------------------------------------------------------------------- */
Modified: projects/bpfjit/sys/contrib/sljit/sljitNativePPC_common.c
==============================================================================
--- projects/bpfjit/sys/contrib/sljit/sljitNativePPC_common.c Fri Dec 7 19:06:40 2012 (r243989)
+++ projects/bpfjit/sys/contrib/sljit/sljitNativePPC_common.c Fri Dec 7 20:09:27 2012 (r243990)
@@ -41,6 +41,8 @@ static void ppc_cache_flush(sljit_ins *f
{
#ifdef _AIX
_sync_cache_range((caddr_t)from, (int)((size_t)to - (size_t)from));
+#elif defined(__FreeBSD__) && defined(_KERNEL)
+ __syncicache(from, (ptrdiff_t)to - (ptrdiff_t)from);
#elif defined(__GNUC__) || (defined(__IBM_GCC_ASM) && __IBM_GCC_ASM)
# if defined(_ARCH_PWR) || defined(_ARCH_PWR2)
/* Cache flush for POWER architecture. */
More information about the svn-src-projects
mailing list