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>