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
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