commit f345412eb653cf7079996ad2c371def814f410b6
Author:     Mattias Andrée <[email protected]>
AuthorDate: Fri Apr 29 22:08:39 2016 +0200
Commit:     Mattias Andrée <[email protected]>
CommitDate: Fri Apr 29 22:08:39 2016 +0200

    Specify optimisation level on functions in zahl-inlines.h
    
    Signed-off-by: Mattias Andrée <[email protected]>

diff --git a/src/internals.h b/src/internals.h
index a049e1a..04118e6 100644
--- a/src/internals.h
+++ b/src/internals.h
@@ -18,31 +18,13 @@
 #define BITS_IN_LAST_CHAR(bits)      ZAHL_BITS_IN_LAST_CHAR(bits)
 #define TRUNCATE_TO_CHAR(bits)       ZAHL_TRUNCATE_TO_CHAR(bits)
 
-#if defined(__GNUC__)
-# define O0     __attribute__((optimize("O0")))
-# define O1     __attribute__((optimize("O1")))
-# define O2     __attribute__((optimize("O2")))
-# define O3     __attribute__((optimize("O3")))
-# define Ofast  __attribute__((optimize("Ofast")))
-# define Os     __attribute__((optimize("Os")))
-# define Oz     __attribute__((optimize("Os")))
-#elif defined(__clang__)
-# define O0     __attribute__((optnone))
-# define O1     /* Don't know how. */
-# define O2     /* Don't know how. */
-# define O3     /* Don't know how. */
-# define Ofast  /* Don't know how. */
-# define Os     /* Don't know how. */
-# define Oz     /* Don't know how. */
-#else
-# define O0     /* Don't know how. */
-# define O1     /* Don't know how. */
-# define O2     /* Don't know how. */
-# define O3     /* Don't know how. */
-# define Ofast  /* Don't know how. */
-# define Os     /* Don't know how. */
-# define Oz     /* Don't know how. */
-#endif
+#define O0     ZAHL_O0
+#define O1     ZAHL_O1
+#define O2     ZAHL_O2
+#define O3     ZAHL_O3
+#define Ofast  ZAHL_Ofast
+#define Os     ZAHL_Os
+#define Oz     ZAHL_Oz
 
 #define LIST_TEMPS\
        X(libzahl_tmp_cmp, 1)\
diff --git a/zahl-inlines.h b/zahl-inlines.h
index abea865..1f04a05 100644
--- a/zahl-inlines.h
+++ b/zahl-inlines.h
@@ -11,7 +11,7 @@ ZAHL_INLINE void zabs(z_t a, z_t b)   { ZAHL_SET(a, b); 
a->sign = !!a->sign; }
 ZAHL_INLINE void zneg(z_t a, z_t b)   { ZAHL_SET(a, b); a->sign = -a->sign; }
 
 
-ZAHL_INLINE void
+ZAHL_INLINE ZAHL_O3 void
 zswap(z_t a, z_t b)
 {
        /* Almost three times faster than the naïve method. */
@@ -23,7 +23,7 @@ zswap(z_t a, z_t b)
 }
 
 
-ZAHL_INLINE void
+ZAHL_INLINE ZAHL_O3 void
 zseti(z_t a, int64_t b)
 {
        if (ZAHL_UNLIKELY(b >= 0)) {
@@ -35,7 +35,7 @@ zseti(z_t a, int64_t b)
 }
 
 
-ZAHL_INLINE void
+ZAHL_INLINE ZAHL_O3 void
 zsetu(z_t a, uint64_t b)
 {
        if (!b) {
@@ -49,7 +49,7 @@ zsetu(z_t a, uint64_t b)
 }
 
 
-ZAHL_INLINE size_t
+ZAHL_INLINE ZAHL_O3 size_t
 zlsb(z_t a)
 {
        size_t i = 0;
@@ -62,7 +62,7 @@ zlsb(z_t a)
 }
 
 
-ZAHL_INLINE size_t
+ZAHL_INLINE ZAHL_O3 size_t
 zbits(z_t a)
 {
        size_t rc;
@@ -75,7 +75,7 @@ zbits(z_t a)
 }
 
 
-ZAHL_INLINE int
+ZAHL_INLINE ZAHL_O3 int
 zcmpmag(z_t a, z_t b)
 {
        size_t i, j;
@@ -103,7 +103,7 @@ zcmpmag(z_t a, z_t b)
 }
 
 
-ZAHL_INLINE int
+ZAHL_INLINE ZAHL_O3 int
 zcmp(z_t a, z_t b)
 {
        if (zsignum(a) != zsignum(b))
@@ -112,7 +112,7 @@ zcmp(z_t a, z_t b)
 }
 
 
-ZAHL_INLINE int
+ZAHL_INLINE ZAHL_O3 int
 zcmpu(z_t a, uint64_t b)
 {
        extern z_t libzahl_tmp_cmp;
@@ -125,7 +125,7 @@ zcmpu(z_t a, uint64_t b)
 }
 
 
-ZAHL_INLINE int
+ZAHL_INLINE ZAHL_O3 int
 zcmpi(z_t a, int64_t b)
 {
        extern z_t libzahl_tmp_cmp;
@@ -147,7 +147,7 @@ zcmpi(z_t a, int64_t b)
 }
 
 
-ZAHL_INLINE void
+ZAHL_INLINE ZAHL_O3 void
 zbset(z_t a, z_t b, size_t bit, int action)
 {
        if (ZAHL_UNLIKELY(a != b))
@@ -185,7 +185,7 @@ fallback:
 }
 
 
-ZAHL_INLINE int
+ZAHL_INLINE ZAHL_O3 int
 zbtest(z_t a, size_t bit)
 {
        size_t chars;
@@ -201,7 +201,7 @@ zbtest(z_t a, size_t bit)
 }
 
 
-ZAHL_INLINE void
+ZAHL_INLINE ZAHL_O3 void
 zsplit(z_t high, z_t low, z_t a, size_t delim)
 {
        if (ZAHL_UNLIKELY(high == a)) {
@@ -214,7 +214,7 @@ zsplit(z_t high, z_t low, z_t a, size_t delim)
 }
 
 
-ZAHL_INLINE size_t
+ZAHL_INLINE ZAHL_O3 size_t
 zsave(z_t a, void *buffer)
 {
        if (ZAHL_LIKELY(buffer)) {
diff --git a/zahl-internals.h b/zahl-internals.h
index 4adbdfe..83fd2e6 100644
--- a/zahl-internals.h
+++ b/zahl-internals.h
@@ -19,6 +19,33 @@
 #endif
 
 
+#if defined(__GNUC__) && !defined(__clang__)
+# define ZAHL_O0     __attribute__((optimize("O0")))
+# define ZAHL_O1     __attribute__((optimize("O1")))
+# define ZAHL_O2     __attribute__((optimize("O2")))
+# define ZAHL_O3     __attribute__((optimize("O3")))
+# define ZAHL_Ofast  __attribute__((optimize("Ofast")))
+# define ZAHL_Os     __attribute__((optimize("Os")))
+# define ZAHL_Oz     __attribute__((optimize("Os")))
+#elif defined(__clang__)
+# define ZAHL_O0     __attribute__((optnone))
+# define ZAHL_O1     /* Don't know how. */
+# define ZAHL_O2     /* Don't know how. */
+# define ZAHL_O3     /* Don't know how. */
+# define ZAHL_Ofast  /* Don't know how. */
+# define ZAHL_Os     /* Don't know how. */
+# define ZAHL_Oz     /* Don't know how. */
+#else
+# define ZAHL_O0     /* Don't know how. */
+# define ZAHL_O1     /* Don't know how. */
+# define ZAHL_O2     /* Don't know how. */
+# define ZAHL_O3     /* Don't know how. */
+# define ZAHL_Ofast  /* Don't know how. */
+# define ZAHL_Os     /* Don't know how. */
+# define ZAHL_Oz     /* Don't know how. */
+#endif
+
+
 #define ZAHL_BITS_PER_CHAR                64
 #define ZAHL_LB_BITS_PER_CHAR             6
 #define ZAHL_CHAR_MAX                     UINT64_MAX
@@ -78,14 +105,14 @@ struct zahl {
 
 void libzahl_realloc(struct zahl *, size_t);
 
-static inline void
+ZAHL_O3 static inline void
 libzahl_memcpy(zahl_char_t *restrict d, const zahl_char_t *restrict s, 
register size_t n)
 {
        while (n--)
                d[n] = s[n];
 }
 
-static inline void
+ZAHL_O3 static inline void
 libzahl_memset(zahl_char_t *a, register zahl_char_t v, register size_t n)
 {
        while (n--)

Reply via email to