From 0e1e08f28644ee76f6e972fb949d6241bc21cad5 Mon Sep 17 00:00:00 2001 From: stevenj Date: Sun, 9 Mar 2008 15:24:01 -0400 Subject: [PATCH] use __builtin_ctz if available darcs-hash:20080309192401-c8de0-4524cb891c0806a70adf643340e1065adeea996d.gz --- util/sobolseq.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/util/sobolseq.c b/util/sobolseq.c index bd73b40..42120fc 100644 --- a/util/sobolseq.c +++ b/util/sobolseq.c @@ -87,11 +87,16 @@ typedef struct nlopt_soboldata_s { */ static unsigned rightzero32(uint32_t n) { +#if defined(__GNUC__) && \ + ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3) + return __builtin_ctz(~n); /* gcc builtin for version >= 3.4 */ +#else const uint32_t a = 0x05f66a47; /* magic number, found by brute force */ static const unsigned decode[32] = {0,1,2,26,23,3,15,27,24,21,19,4,12,16,28,6,31,25,22,14,20,18,11,5,30,13,17,10,29,9,8,7}; n = ~n; /* change to rightmost-one problem */ n = a * (n & (-n)); /* store in n to make sure mult. is 32 bits */ return decode[n >> 27]; +#endif } /* generate the next term x_{n+1} in the Sobol sequence, as an array -- 2.30.2