X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=include%2Fwimlib%2Fcompiler.h;h=40f9276254c4e663cdb5aef7887aa4df5fc0bc63;hb=5a50cccf768a6bf6e9ccfd2337bcedc0cbf1ba6c;hp=1d596e20a37641b5ec9874f3875febf1d1a45438;hpb=605df71262af15c229fa3b5f0f6f7611abc011d1;p=wimlib diff --git a/include/wimlib/compiler.h b/include/wimlib/compiler.h index 1d596e20..40f92762 100644 --- a/include/wimlib/compiler.h +++ b/include/wimlib/compiler.h @@ -49,14 +49,6 @@ # define __has_builtin(builtin) 0 #endif -/* Declare that the annotated function should be exported from the shared - * library (or DLL). */ -#ifdef __WIN32__ -# define WIMLIBAPI __declspec(dllexport) -#else -# define WIMLIBAPI __attribute__((visibility("default"))) -#endif - /* Declare that the annotated function should always be inlined. This might be * desirable in highly tuned code, e.g. compression codecs. */ #define forceinline inline __attribute__((always_inline)) @@ -81,17 +73,6 @@ /* Prefetch into L1 cache for write. */ #define prefetchw(addr) __builtin_prefetch((addr), 1) -/* Declare that the members of the annotated struct are tightly packed, and the - * struct itself may be misaligned. */ -#define _packed_attribute __attribute__((packed)) - -/* Declare that the annotated variable, or variables of the annotated type, are - * to be aligned on n-byte boundaries. */ -#define _aligned_attribute(n) __attribute__((aligned(n))) - -/* Declare that pointers to the annotated type may alias other pointers. */ -#define _may_alias_attribute __attribute__((may_alias)) - /* Hint that the annotated function is rarely called. */ #if GCC_PREREQ(4, 4) || __has_attribute(cold) # define _cold_attribute __attribute__((cold)) @@ -99,24 +80,16 @@ # define _cold_attribute #endif -/* Hint that the annotated function is malloc-like: any non-null pointer it - * returns will not alias any pointer previously in use by the program. */ -#define _malloc_attribute __attribute__((malloc)) - /* Hint that the annotated function takes a printf()-like format string and * arguments. This is currently disabled on Windows because MinGW does not * support this attribute on functions taking wide-character strings. */ -#ifdef __WIN32__ +#ifdef _WIN32 # define _format_attribute(type, format_str, format_start) #else # define _format_attribute(type, format_str, format_start) \ __attribute__((format(type, format_str, format_start))) #endif -/* Hint that the annotated function is intentionally not used. This might be - * the case if the function contains only static assertions. */ -#define _unused_attribute __attribute__((unused)) - /* Endianness definitions. Either CPU_IS_BIG_ENDIAN() or CPU_IS_LITTLE_ENDIAN() * evaluates to 1. The other evaluates to 0. Note that newer gcc supports * __BYTE_ORDER__ for easily determining the endianness; older gcc doesn't. In @@ -135,27 +108,25 @@ /* UNALIGNED_ACCESS_IS_FAST should be defined to 1 if unaligned memory accesses * can be performed efficiently on the target platform. */ -#if defined(__x86_64__) || defined(__i386__) || defined(__ARM_FEATURE_UNALIGNED) +#if defined(__x86_64__) || defined(__i386__) || \ + defined(__ARM_FEATURE_UNALIGNED) || defined(__powerpc64__) # define UNALIGNED_ACCESS_IS_FAST 1 #else # define UNALIGNED_ACCESS_IS_FAST 0 #endif -/* Get the type of the specified expression. */ -#define typeof __typeof__ - /* Get the minimum of two variables, without multiple evaluation. */ -#ifndef min -# define min(a, b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \ - (_a < _b) ? _a : _b; }) -#endif +#undef min +#define min(a, b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \ + (_a < _b) ? _a : _b; }) +#undef MIN #define MIN(a, b) min((a), (b)) /* Get the maximum of two variables, without multiple evaluation. */ -#ifndef max -# define max(a, b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \ - (_a > _b) ? _a : _b; }) -#endif +#undef max +#define max(a, b) ({ typeof(a) _a = (a); typeof(b) _b = (b); \ + (_a > _b) ? _a : _b; }) +#undef MAX #define MAX(a, b) max((a), (b)) /* Swap the values of two variables, without multiple evaluation. */ @@ -164,27 +135,6 @@ #endif #define SWAP(a, b) swap((a), (b)) -/* (Optional) Efficiently swap the bytes of a 16-bit integer. */ -#if GCC_PREREQ(4, 8) || __has_builtin(__builtin_bswap16) -# define compiler_bswap16 __builtin_bswap16 -#endif - -/* (Optional) Efficiently swap the bytes of a 32-bit integer. */ -#if GCC_PREREQ(4, 3) || __has_builtin(__builtin_bswap32) -# define compiler_bswap32 __builtin_bswap32 -#endif - -/* (Optional) Efficiently swap the bytes of a 64-bit integer. */ -#if GCC_PREREQ(4, 3) || __has_builtin(__builtin_bswap64) -# define compiler_bswap64 __builtin_bswap64 -#endif - -/* (Optional) Find Last Set bit and Find First Set bit macros. */ -#define compiler_bsr32(n) (31 - __builtin_clz(n)) -#define compiler_bsr64(n) (63 - __builtin_clzll(n)) -#define compiler_bsf32(n) __builtin_ctz(n) -#define compiler_bsf64(n) __builtin_ctzll(n) - /* Optional definitions for checking with 'sparse'. */ #ifdef __CHECKER__ # define _bitwise_attr __attribute__((bitwise))