[llvm-commits] CVS: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c
Chris Lattner
lattner at cs.uiuc.edu
Thu Jan 12 11:42:38 PST 2006
Changes in directory llvm-test/SingleSource/UnitTests:
2005-05-11-Popcount-ffs-fls.c updated: 1.4 -> 1.5
---
Log message:
enhance this test to pass on non-gcc 4 host compilers
---
Diffs of the changes: (+22 -1)
2005-05-11-Popcount-ffs-fls.c | 23 ++++++++++++++++++++++-
1 files changed, 22 insertions(+), 1 deletion(-)
Index: llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c
diff -u llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.4 llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.5
--- llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c:1.4 Sun May 15 16:18:45 2005
+++ llvm-test/SingleSource/UnitTests/2005-05-11-Popcount-ffs-fls.c Thu Jan 12 13:42:26 2006
@@ -24,6 +24,12 @@
return table[x >> 26];
}
+int nlzll(unsigned long long x) {
+ if ((x >> 32) == 0)
+ return nlz10b(x)+32;
+ return nlz10b(x>>32);
+}
+
int pop(unsigned x) {
x = x - ((x >> 1) & 0x55555555);
x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
@@ -33,6 +39,10 @@
return x >> 24;
}
+int popll(unsigned long long x) {
+ return pop(x) + pop(x >> 32);
+}
+
int ntz8(unsigned x) {
static char table[64] =
@@ -45,6 +55,17 @@
return table[x >> 26];
}
+/* Work with non-gcc compilers and GCC before 4.0 */
+#if !defined(__GNUC__) || __GNUC__ < 4
+#define __builtin_clz nlz10b
+#define __builtin_popcount pop
+#define __builtin_ctz ntz8
+#define __builtin_clzll nlzll
+#define __builtin_popcountll popll
+#define __builtin_ffsl __builtin_ffs
+#define ffsl ffs
+#endif
+
int i;
int main(void) {
long long l;
@@ -66,7 +87,7 @@
printf("LLVM: n: %lld, clz(n): %d, popcount(n): %d, ctz(n): %d\n",
l, __builtin_clzll(l), __builtin_popcountll(l), __builtin_ctz(l));
printf("REF LO BITS : n: %lld, clz(n): %d, popcount(n): %d, ctz(n): %d\n",
- l, nlz10b(l), pop(l), ntz8(l));
+ l, nlzll(l), popll(l), ntz8(l));
printf(" *** \n");
l++;
}
More information about the llvm-commits
mailing list