diff options
| author | Mattias Andrée <maandree@kth.se> | 2016-04-29 22:08:39 +0200 |
|---|---|---|
| committer | Mattias Andrée <maandree@kth.se> | 2016-04-29 22:08:39 +0200 |
| commit | f345412eb653cf7079996ad2c371def814f410b6 (patch) | |
| tree | add465764c123ea82ed7db2b098aeeb5f5eb799e | |
| parent | Some optimisations, fix refsheet, and disable const/pure attributes in gmp in benchmark (diff) | |
| download | libzahl-f345412eb653cf7079996ad2c371def814f410b6.tar.gz libzahl-f345412eb653cf7079996ad2c371def814f410b6.tar.bz2 libzahl-f345412eb653cf7079996ad2c371def814f410b6.tar.xz | |
Specify optimisation level on functions in zahl-inlines.h
Signed-off-by: Mattias Andrée <maandree@kth.se>
| -rw-r--r-- | src/internals.h | 32 | ||||
| -rw-r--r-- | zahl-inlines.h | 26 | ||||
| -rw-r--r-- | zahl-internals.h | 31 |
3 files changed, 49 insertions, 40 deletions
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--) |
