c1c866eab429e3ac0d5304559ab40024b893ee3f
[fio.git] / arch / arch-x86.h
1 #ifndef ARCH_X86_H
2 #define ARCH_X86_H
3
4 #ifndef __NR_sys_io_uring_setup
5 #define __NR_sys_io_uring_setup         387
6 #endif
7 #ifndef __NR_sys_io_uring_enter
8 #define __NR_sys_io_uring_enter         388
9 #endif
10 #ifndef __NR_sys_io_uring_register
11 #define __NR_sys_io_uring_register      389
12 #endif
13
14 static inline void do_cpuid(unsigned int *eax, unsigned int *ebx,
15                             unsigned int *ecx, unsigned int *edx)
16 {
17         asm volatile("xchgl %%ebx, %1\ncpuid\nxchgl %%ebx, %1"
18                 : "=a" (*eax), "=r" (*ebx), "=c" (*ecx), "=d" (*edx)
19                 : "0" (*eax)
20                 : "memory");
21 }
22
23 #include "arch-x86-common.h" /* IWYU pragma: export */
24
25 #define FIO_ARCH        (arch_x86)
26
27 #define FIO_HUGE_PAGE           4194304
28
29 #define nop             __asm__ __volatile__("rep;nop": : :"memory")
30 #define read_barrier()  __asm__ __volatile__("": : :"memory")
31 #define write_barrier() __asm__ __volatile__("": : :"memory")
32
33 static inline unsigned long arch_ffz(unsigned long bitmask)
34 {
35         __asm__("bsfl %1,%0" :"=r" (bitmask) :"r" (~bitmask));
36         return bitmask;
37 }
38
39 static inline unsigned long long get_cpu_clock(void)
40 {
41         unsigned long long ret;
42
43         __asm__ __volatile__("rdtsc" : "=A" (ret));
44         return ret;
45 }
46
47 #define ARCH_HAVE_FFZ
48 #define ARCH_HAVE_CPU_CLOCK
49 #define ARCH_HAVE_IOURING
50
51 #endif