fix vendored libdeflate _rotr* macros vs mingw stdlib.h #1
1 changed files with 12 additions and 0 deletions
|
|
@ -203,7 +203,19 @@ typedef char __v64qi __attribute__((__vector_size__(64)));
|
||||||
/*
|
/*
|
||||||
* Setup rotation macros similar to MSVS intrinsics.
|
* Setup rotation macros similar to MSVS intrinsics.
|
||||||
* These should recognized by compilers.
|
* These should recognized by compilers.
|
||||||
|
*
|
||||||
|
* mingw's <stdlib.h> declares _rotl/_rotr/_rotl64/_rotr64 as functions, so
|
||||||
|
* a translation unit that pulls compiler_gcc.h in first (libdeflate's own
|
||||||
|
* utils.c does exactly that) and then includes <stdlib.h> would see the
|
||||||
|
* function declarations mangled by these macros. Force <stdlib.h> in here
|
||||||
|
* on mingw so the declarations get parsed before the macro names get
|
||||||
|
* shadowed; the header guard makes the later #include a no-op and call
|
||||||
|
* sites still resolve to the macros below.
|
||||||
*/
|
*/
|
||||||
|
#if defined(__MINGW32__) || defined(__MINGW64__)
|
||||||
|
# include <stdlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef _rotr16
|
#ifndef _rotr16
|
||||||
#define _rotr16(x,n) ((x>>n) + (x<<(16-n)))
|
#define _rotr16(x,n) ((x>>n) + (x<<(16-n)))
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue