11 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
12 |
__l4_msb_ (l4_word_t data) __attribute__((__const__)); |
__l4_msb_ (l4_word_t data) __attribute__((__const__)); |
13 |
|
|
14 |
|
/* Calculate the MSB set in DATA. DATA is not 0. */ |
15 |
_L4_EXTERN_INLINE l4_word_t |
_L4_EXTERN_INLINE l4_word_t |
16 |
__l4_msb_ (l4_word_t data) |
__l4_msb (l4_word_t data) |
17 |
{ |
{ |
18 |
l4_word_t msb; |
l4_word_t msb; |
19 |
|
|
21 |
: [msb] "=r" (msb) |
: [msb] "=r" (msb) |
22 |
: [data] "rm" (data)); |
: [data] "rm" (data)); |
23 |
|
|
24 |
return msb; |
return msb + 1; |
25 |
|
} |
26 |
|
|
27 |
|
|
28 |
|
/* Calculate the LSB set in DATA. DATA is not 0. */ |
29 |
|
_L4_EXTERN_INLINE l4_word_t |
30 |
|
__l4_lsb (l4_word_t data) |
31 |
|
{ |
32 |
|
l4_word_t lsb; |
33 |
|
|
34 |
|
__asm__ ("bsf %[data], %[lsb]" |
35 |
|
: [lsb] "=r" (lsb) |
36 |
|
: [data] "rm" (data)); |
37 |
|
|
38 |
|
return lsb + 1; |
39 |
} |
} |