X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=os%2Fos-linux.h;h=ba53590d01a22611469c3733a3fbd25b1d449684;hp=7be833bf067a5f81df3505fb2a74df4af4cdc265;hb=deb728c66d3f745abca5afc4eebcf0d5049d50fd;hpb=0cfe20893afc994b3e105ea91a528f96af560199 diff --git a/os/os-linux.h b/os/os-linux.h index 7be833bf..ba53590d 100644 --- a/os/os-linux.h +++ b/os/os-linux.h @@ -16,12 +16,15 @@ #include #include #include -#include #include "./os-linux-syscall.h" #include "binject.h" #include "../file.h" +#ifndef __has_builtin // Optional of course. + #define __has_builtin(x) 0 // Compatibility with non-clang compilers. +#endif + #define FIO_HAVE_CPU_AFFINITY #define FIO_HAVE_DISK_UTIL #define FIO_HAVE_SGIO @@ -32,7 +35,6 @@ #define FIO_HAVE_HUGETLB #define FIO_HAVE_RAWBIND #define FIO_HAVE_BLKTRACE -#define FIO_HAVE_PSHARED_MUTEX #define FIO_HAVE_CL_SIZE #define FIO_HAVE_CGROUPS #define FIO_HAVE_FS_STAT @@ -220,21 +222,19 @@ static inline int fio_lookup_raw(dev_t dev, int *majdev, int *mindev) #define FIO_MADV_FREE MADV_REMOVE #endif -#if defined(__builtin_bswap16) +/* Check for GCC or Clang byte swap intrinsics */ +#if (__has_builtin(__builtin_bswap16) && __has_builtin(__builtin_bswap32) \ + && __has_builtin(__builtin_bswap64)) || (__GNUC__ > 4 \ + || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) /* fio_swapN */ #define fio_swap16(x) __builtin_bswap16(x) -#else -#define fio_swap16(x) __bswap_16(x) -#endif -#if defined(__builtin_bswap32) #define fio_swap32(x) __builtin_bswap32(x) -#else -#define fio_swap32(x) __bswap_32(x) -#endif -#if defined(__builtin_bswap64) #define fio_swap64(x) __builtin_bswap64(x) #else -#define fio_swap64(x) __bswap_64(x) -#endif +#include +#define fio_swap16(x) bswap_16(x) +#define fio_swap32(x) bswap_32(x) +#define fio_swap64(x) bswap_64(x) +#endif /* fio_swapN */ #define CACHE_LINE_FILE \ "/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size" @@ -314,9 +314,13 @@ static inline int fio_set_sched_idle(void) static inline void make_pos_h_l(unsigned long *pos_h, unsigned long *pos_l, off_t offset) { +#if BITS_PER_LONG == 64 + *pos_l = offset; + *pos_h = 0; +#else *pos_l = offset & 0xffffffff; *pos_h = ((uint64_t) offset) >> 32; - +#endif } static inline ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt, off_t offset, unsigned int flags)