Add generic arch include header
[fio.git] / arch / arch.h
index 3962c9291bebf1abe4babee787f253198a913e98..0ad7b6ebdf8babc94affbf96e2f2f7a9b7114471 100644 (file)
@@ -1,6 +1,12 @@
 #ifndef ARCH_H
 #define ARCH_H
 
+#ifdef __WORDSIZE
+#define BITS_PER_LONG  __WORDSIZE
+#else
+#define BITS_PER_LONG  32
+#endif
+
 enum {
        arch_x86_64,
        arch_i386,
@@ -8,24 +14,18 @@ enum {
        arch_ia64,
        arch_s390,
        arch_alpha,
-};
-
-static inline unsigned long generic_ffz(unsigned long word)
-{
-       unsigned int i;
+       arch_sparc,
+       arch_sparc64,
+       arch_arm,
 
-       for (i = 0; i < sizeof(word) * 8; i++)
-               if ((word & (1UL << i)) == 0)
-                       return i;
-
-       return -1;
-}
+       arch_generic,
+};
 
 #if defined(__i386__)
 #include "arch-x86.h"
 #elif defined(__x86_64__)
 #include "arch-x86_64.h"
-#elif defined(__powerpc__) || defined(__powerpc64__)
+#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__)
 #include "arch-ppc.h"
 #elif defined(__ia64__)
 #include "arch-ia64.h"
@@ -33,8 +33,23 @@ static inline unsigned long generic_ffz(unsigned long word)
 #include "arch-alpha.h"
 #elif defined(__s390x__) || defined(__s390__)
 #include "arch-s390.h"
+#elif defined(__sparc__)
+#include "arch-sparc.h"
+#elif defined(__sparc64__)
+#include "arch-sparc64.h"
+#elif defined(__arm__)
+#include "arch-arm.h"
+#elif defined(__mips__) || defined(__mips64__)
+#include "arch-mips.h"
+#else
+#warning "Unknown architecture, attempting to use generic model."
+#include "arch-generic.h"
+#endif
+
+#ifdef ARCH_HAVE_FFZ
+#define ffz(bitmask)   arch_ffz(bitmask)
 #else
-#error "Unsupported arch"
+#include "../lib/ffz.h"
 #endif
 
 #endif