1 |
/* math.h - Math support routines for ia32. |
/* math.h - Math support routines for powerpc. |
2 |
Copyright (C) 2003 Free Software Foundation, Inc. |
Copyright (C) 2003 Free Software Foundation, Inc. |
3 |
Written by Marcus Brinkmann <marcus@gnu.org>. |
Written by Marcus Brinkmann <marcus@gnu.org>. |
4 |
|
|
31 |
{ |
{ |
32 |
l4_word_t msb; |
l4_word_t msb; |
33 |
|
|
34 |
__asm__ ("bsr %[data], %[msb]" |
/* Count the leading zeros. */ |
35 |
: [msb] "=r" (msb) |
asm ("cntlzw %[msb], %[data]" |
36 |
: [data] "rm" (data)); |
: [msb] "=r" (msb) |
37 |
|
: "r" (data & -data)); |
38 |
|
|
39 |
return msb + 1; |
return 32 - msb; |
40 |
} |
} |
41 |
|
|
42 |
|
|
47 |
{ |
{ |
48 |
l4_word_t lsb; |
l4_word_t lsb; |
49 |
|
|
50 |
__asm__ ("bsf %[data], %[lsb]" |
/* x & -x clears all bits in the word except the LSB set. */ |
51 |
: [lsb] "=r" (lsb) |
return __l4_msb (data & -data); |
|
: [data] "rm" (data)); |
|
|
|
|
|
return lsb + 1; |
|
52 |
} |
} |