count_leading_zeros on 64-bit ppc
Torbjorn Granlund
tg-this-will-bounce-but-I-am-subscribed-to-the-list-honest at swox.com
Sun Jun 3 23:21:57 CEST 2007
David Harvey <dmharvey at math.harvard.edu> writes:
I think there may be a bug in count_leading_zeros in longlong.h on 64-
bit PPC platforms. This is GMP 4.2.1.
This is a bit worrying since I looked in longlong.h, and it looks
like assembly is used directly:
#define count_leading_zeros(count, x) \
__asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x))
So if I'm reading this right, it might be a bug in the chip itself.
Here is an example program that illustrates the bug:
======================================
#define UWtype unsigned long
#define UHWtype unsigned long
#define UDWtype unsigned long
#define W_TYPE_SIZE 64
#include <stdio.h>
#include <gmp.h>
#include "longlong.h"
int main()
{
unsigned long x = 0x0000000001379102;
unsigned long c;
count_leading_zeros(c, x);
printf("%d\n", c);
return 0;
}
======================================
You're not using the macro properly.
Your example works wrong, perhaps because it gets a 32-bit gmp.h,
or something else.
But in a proper 64-bit gmp context, it works right.
I'll let you debug the exact cause of the failure. :-)
--
Torbjörn
More information about the gmp-bugs
mailing list