1 #ifndef ARCH_AARCH64_H 2 #define ARCH_AARCH64_H 3 4 #include <unistd.h> 5 #include <stdlib.h> 6 #include <sys/types.h> 7 #include <sys/wait.h> 8 9 #define FIO_ARCH (arch_aarch64) 10 11 #define nop do { __asm__ __volatile__ ("yield"); } while (0) 12 #define read_barrier() do { __sync_synchronize(); } while (0) 13 #define write_barrier() do { __sync_synchronize(); } while (0) 14 arch_ffz(unsigned long bitmask)15static inline int arch_ffz(unsigned long bitmask) 16 { 17 unsigned long count, reversed_bits; 18 if (~bitmask == 0) /* ffz() in lib/ffz.h does this. */ 19 return 63; 20 21 __asm__ __volatile__ ("rbit %1, %2\n" 22 "clz %0, %1\n" : 23 "=r"(count), "=&r"(reversed_bits) : 24 "r"(~bitmask)); 25 return count; 26 } 27 28 #define ARCH_HAVE_FFZ 29 30 #ifdef ARCH_HAVE_CRC_CRYPTO 31 #define ARCH_HAVE_ARM64_CRC_CRYPTO 32 #endif 33 34 #endif 35