diff options
author | Sebastian Siewior <bigeasy@linutronix.de> | 2008-05-09 16:10:37 +0200 |
---|---|---|
committer | Greg Ungerer <gerg@uclinux.org> | 2008-07-23 15:11:28 +1000 |
commit | a6260ef84103fa8a51a67b6a58e5e16c676e08ad (patch) | |
tree | a20685c546b2e2ffc49273f3ab4181577b3a78e0 | |
parent | 5bed10a5ee272fbf18ce0ce764245bbb8f28e2e6 (diff) |
m68knommu: add ffs and __ffs plattform which support ISA A+ or ISA C
the ff1 and bitrev opcode appears in ISA C and ISA A+ what isn't
supported by all plattforms. The assembly optimization is automaticly
enabled if the compiler understand the required cpu keyword.
My m5235 seems to boot and run fine so far.
Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
Signed-off-by: Greg Ungerer <gerg@uclinux.org>
-rw-r--r-- | arch/m68knommu/Makefile | 11 | ||||
-rw-r--r-- | include/asm-m68knommu/bitops.h | 30 |
2 files changed, 37 insertions, 4 deletions
diff --git a/arch/m68knommu/Makefile b/arch/m68knommu/Makefile index e0b5f62e395c..b63bbcf874ff 100644 --- a/arch/m68knommu/Makefile +++ b/arch/m68knommu/Makefile @@ -8,6 +8,8 @@ # (C) Copyright 2002, Greg Ungerer <gerg@snapgear.com> # +KBUILD_DEFCONFIG := m5208evb_defconfig + platform-$(CONFIG_M68328) := 68328 platform-$(CONFIG_M68EZ328) := 68EZ328 platform-$(CONFIG_M68VZ328) := 68VZ328 @@ -90,13 +92,14 @@ export PLATFORM BOARD MODEL CPUCLASS cflags-$(CONFIG_M5206) := -m5200 cflags-$(CONFIG_M5206e) := -m5200 cflags-$(CONFIG_M520x) := -m5307 -cflags-$(CONFIG_M523x) := -m5307 +cflags-$(CONFIG_M523x) := $(call cc-option,-mcpu=523x,-m5307) cflags-$(CONFIG_M5249) := -m5200 -cflags-$(CONFIG_M527x) := -m5307 +cflags-$(CONFIG_M5271) := $(call cc-option,-mcpu=5271,-m5307) cflags-$(CONFIG_M5272) := -m5307 -cflags-$(CONFIG_M528x) := -m5307 +cflags-$(CONFIG_M5275) := $(call cc-option,-mcpu=5275,-m5307) +cflags-$(CONFIG_M528x) := $(call cc-option,-m528x,-m5307) cflags-$(CONFIG_M5307) := -m5307 -cflags-$(CONFIG_M532x) := -m5307 +cflags-$(CONFIG_M532x) := $(call cc-option,-mcpu=532x,-m5307) cflags-$(CONFIG_M5407) := -m5200 cflags-$(CONFIG_M68328) := -m68000 cflags-$(CONFIG_M68EZ328) := -m68000 diff --git a/include/asm-m68knommu/bitops.h b/include/asm-m68knommu/bitops.h index c142fbf2f376..6f3685eab44c 100644 --- a/include/asm-m68knommu/bitops.h +++ b/include/asm-m68knommu/bitops.h @@ -14,8 +14,38 @@ #error only <linux/bitops.h> can be included directly #endif +#if defined (__mcfisaaplus__) || defined (__mcfisac__) +static inline int ffs(unsigned int val) +{ + if (!val) + return 0; + + asm volatile( + "bitrev %0\n\t" + "ff1 %0\n\t" + : "=d" (val) + : "0" (val) + ); + val++; + return val; +} + +static inline int __ffs(unsigned int val) +{ + asm volatile( + "bitrev %0\n\t" + "ff1 %0\n\t" + : "=d" (val) + : "0" (val) + ); + return val; +} + +#else #include <asm-generic/bitops/ffs.h> #include <asm-generic/bitops/__ffs.h> +#endif + #include <asm-generic/bitops/sched.h> #include <asm-generic/bitops/ffz.h> |