Przeglądaj źródła

Fix checks for minimum required compiler versions.

Mike Pall 15 lat temu
rodzic
commit
a500752787
2 zmienionych plików z 18 dodań i 5 usunięć
  1. 17 0
      src/lj_arch.h
  2. 1 5
      src/lj_def.h

+ 17 - 0
src/lj_arch.h

@@ -86,6 +86,23 @@
 #error "No target architecture defined"
 #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. */
 #ifndef _BUILDVM_H
 #if LJ_TARGET_PPC

+ 1 - 5
src/lj_def.h

@@ -104,10 +104,6 @@ typedef uintptr_t BloomFilter;
 
 #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_ALIGN(n)	__attribute__((aligned(n)))
 #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))
 #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)
 {
   return (uint32_t)__builtin_bswap32((int32_t)x);