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