Fix checks for minimum required compiler versions.

This commit is contained in:
Mike Pall 2010-09-28 14:20:49 +02:00
parent f635e3e5bb
commit a500752787
2 changed files with 18 additions and 5 deletions

View File

@ -86,6 +86,23 @@
#error "No target architecture defined" #error "No target architecture defined"
#endif #endif
/* Check for minimum required compiler versions. */
#if defined(__GNUC__)
#if LJ_TARGET_X64
#if __GNUC__ < 4
#error "Need at least GCC 4.0 or newer"
#endif
#elif LJ_TARGET_PPC
#if (__GNUC__ < 4) || ((__GNUC__ == 4) && __GNUC_MINOR__ < 3)
#error "Need at least GCC 4.3 or newer"
#endif
#else
#if (__GNUC__ < 3) || ((__GNUC__ == 3) && __GNUC_MINOR__ < 4)
#error "Need at least GCC 3.4 or newer"
#endif
#endif
#endif
/* Check target-specific constraints. */ /* Check target-specific constraints. */
#ifndef _BUILDVM_H #ifndef _BUILDVM_H
#if LJ_TARGET_PPC #if LJ_TARGET_PPC

View File

@ -104,10 +104,6 @@ typedef uintptr_t BloomFilter;
#if defined(__GNUC__) #if defined(__GNUC__)
#if (__GNUC__ < 3) || ((__GNUC__ == 3) && __GNUC_MINOR__ < 4)
#error "sorry, need GCC 3.4 or newer"
#endif
#define LJ_NORET __attribute__((noreturn)) #define LJ_NORET __attribute__((noreturn))
#define LJ_ALIGN(n) __attribute__((aligned(n))) #define LJ_ALIGN(n) __attribute__((aligned(n)))
#define LJ_INLINE inline #define LJ_INLINE inline
@ -140,7 +136,7 @@ static LJ_AINLINE uint32_t lj_fls(uint32_t x)
#define lj_fls(x) ((uint32_t)(__builtin_clz(x)^31)) #define lj_fls(x) ((uint32_t)(__builtin_clz(x)^31))
#endif #endif
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 3 #if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
static LJ_AINLINE uint32_t lj_bswap(uint32_t x) static LJ_AINLINE uint32_t lj_bswap(uint32_t x)
{ {
return (uint32_t)__builtin_bswap32((int32_t)x); return (uint32_t)__builtin_bswap32((int32_t)x);