Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Dec 2012 20:09:27 +0000 (UTC)
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r243990 - projects/bpfjit/sys/contrib/sljit
Message-ID:  <201212072009.qB7K9Rqx074328@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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. */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201212072009.qB7K9Rqx074328>