]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
Improve support for IAR compiler with attributes and intrinsics
authorJoseph Chen <joseph@baoruh.com.tw>
Tue, 14 May 2024 08:51:10 +0000 (16:51 +0800)
committerJoseph Chen <joseph@baoruh.com.tw>
Tue, 14 May 2024 09:01:19 +0000 (17:01 +0800)
lib/common/bits.h
lib/common/compiler.h
lib/common/entropy_common.c
lib/common/mem.h
lib/zstd.h

index def56c474c380d9a734fbc249c1029e2a9c5ec54..992cc6925bafd58a93df6e96c5fcd8035f7195b5 100644 (file)
@@ -43,6 +43,8 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros32(U32 val)
 #       endif
 #   elif defined(__GNUC__) && (__GNUC__ >= 4)
         return (unsigned)__builtin_ctz(val);
+#   elif defined(__ICCARM__)
+        return (unsigned)__builtin_ctz(val);
 #   else
         return ZSTD_countTrailingZeros32_fallback(val);
 #   endif
@@ -82,6 +84,8 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros32(U32 val)
 #       endif
 #   elif defined(__GNUC__) && (__GNUC__ >= 4)
         return (unsigned)__builtin_clz(val);
+#   elif defined(__ICCARM__)
+        return (unsigned)__builtin_clz(val);
 #   else
         return ZSTD_countLeadingZeros32_fallback(val);
 #   endif
@@ -105,6 +109,8 @@ MEM_STATIC unsigned ZSTD_countTrailingZeros64(U64 val)
 #       endif
 #   elif defined(__GNUC__) && (__GNUC__ >= 4) && defined(__LP64__)
         return (unsigned)__builtin_ctzll(val);
+#   elif defined(__ICCARM__)
+        return (unsigned)__builtin_ctzll(val);
 #   else
         {
             U32 mostSignificantWord = (U32)(val >> 32);
@@ -136,6 +142,8 @@ MEM_STATIC unsigned ZSTD_countLeadingZeros64(U64 val)
 #       endif
 #   elif defined(__GNUC__) && (__GNUC__ >= 4)
         return (unsigned)(__builtin_clzll(val));
+#   elif defined(__ICCARM__)
+        return (unsigned)(__builtin_clzll(val));
 #   else
         {
             U32 mostSignificantWord = (U32)(val >> 32);
index 31880ecbe1612f6bdbdbfa36f94a28290b3fb61b..1371212eff10e93b1b095c4c24a2811643db4fb3 100644 (file)
@@ -27,7 +27,7 @@
 #  define INLINE_KEYWORD
 #endif
 
-#if defined(__GNUC__) || defined(__ICCARM__)
+#if defined(__GNUC__) || defined(__IAR_SYSTEMS_ICC__)
 #  define FORCE_INLINE_ATTR __attribute__((always_inline))
 #elif defined(_MSC_VER)
 #  define FORCE_INLINE_ATTR __forceinline
@@ -54,7 +54,7 @@
 #endif
 
 /* UNUSED_ATTR tells the compiler it is okay if the function is unused. */
-#if defined(__GNUC__)
+#if defined(__GNUC__) || defined(__IAR_SYSTEMS_ICC__)
 #  define UNUSED_ATTR __attribute__((unused))
 #else
 #  define UNUSED_ATTR
@@ -95,6 +95,8 @@
 #ifndef MEM_STATIC  /* already defined in Linux Kernel mem.h */
 #if defined(__GNUC__)
 #  define MEM_STATIC static __inline UNUSED_ATTR
+#elif defined(__IAR_SYSTEMS_ICC__)
+#  define MEM_STATIC static inline UNUSED_ATTR
 #elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
 #  define MEM_STATIC static inline
 #elif defined(_MSC_VER)
 #ifdef _MSC_VER
 #  define FORCE_NOINLINE static __declspec(noinline)
 #else
-#  if defined(__GNUC__) || defined(__ICCARM__)
+#  if defined(__GNUC__) || defined(__IAR_SYSTEMS_ICC__)
 #    define FORCE_NOINLINE static __attribute__((__noinline__))
 #  else
 #    define FORCE_NOINLINE static
 
 
 /* target attribute */
-#if defined(__GNUC__) || defined(__ICCARM__)
+#if defined(__GNUC__) || defined(__IAR_SYSTEMS_ICC__)
 #  define TARGET_ATTRIBUTE(target) __attribute__((__target__(target)))
 #else
 #  define TARGET_ATTRIBUTE(target)
index e2173afb0a8b0c8c070033ac404f830157c27c6a..abc8b543e30f14ff0fc5d5ba1e7d71698cde781e 100644 (file)
@@ -38,7 +38,11 @@ const char* HUF_getErrorName(size_t code) { return ERR_getErrorName(code); }
 /*-**************************************************************
 *  FSE NCount encoding-decoding
 ****************************************************************/
+#if defined(__IAR_SYSTEMS_ICC__)
+MEM_STATIC
+#else
 FORCE_INLINE_TEMPLATE
+#endif
 size_t FSE_readNCount_body(short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr,
                            const void* headerBuffer, size_t hbSize)
 {
index 096f4be519d852d9485d452bea44098ff5a02912..a02141c9d496f36edc6480a6de44ce36a2cb9abb 100644 (file)
@@ -30,6 +30,8 @@ extern "C" {
 #if defined(_MSC_VER)   /* Visual Studio */
 #   include <stdlib.h>  /* _byteswap_ulong */
 #   include <intrin.h>  /* _byteswap_* */
+#elif defined(__ICCARM__)
+#   include <intrinsics.h>
 #endif
 
 /*-**************************************************************
@@ -154,6 +156,8 @@ MEM_STATIC unsigned MEM_isLittleEndian(void)
     return 1;
 #elif defined(__DMC__) && defined(_M_IX86)
     return 1;
+#elif defined(__IAR_SYSTEMS_ICC__) && __LITTLE_ENDIAN__
+    return 1;
 #else
     const union { U32 u; BYTE c[4]; } one = { 1 };   /* don't use static : performance detrimental  */
     return one.c[0];
@@ -246,6 +250,8 @@ MEM_STATIC U32 MEM_swap32(U32 in)
 #elif (defined (__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 403)) \
   || (defined(__clang__) && __has_builtin(__builtin_bswap32))
     return __builtin_bswap32(in);
+#elif defined(__ICCARM__)
+    return __REV(in);
 #else
     return MEM_swap32_fallback(in);
 #endif
index aa4ea23af4890059582e58e0c5331ef616f5a57f..338bdb7edfecfc30a3c3748e764e8fd5dcc30971 100644 (file)
@@ -57,7 +57,7 @@ extern "C" {
 #else
 #  if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
 #    define ZSTD_DEPRECATED(message) [[deprecated(message)]]
-#  elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__)
+#  elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__) || defined(__IAR_SYSTEMS_ICC__)
 #    define ZSTD_DEPRECATED(message) __attribute__((deprecated(message)))
 #  elif defined(__GNUC__) && (__GNUC__ >= 3)
 #    define ZSTD_DEPRECATED(message) __attribute__((deprecated))