00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _RTEMS_SCORE_BITFIELD_H
00019 #define _RTEMS_SCORE_BITFIELD_H
00020
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033
00034 #if ( CPU_USE_GENERIC_BITFIELD_DATA == TRUE )
00035
00041 #ifndef SCORE_INIT
00042 extern const unsigned char __log2table[256];
00043 #else
00044 const unsigned char __log2table[256] = {
00045 7, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
00046 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
00047 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00048 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00049 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00050 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00051 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00052 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00053 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00054 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00055 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00056 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00057 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00058 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00059 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
00060 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
00061 };
00062 #endif
00063
00064 #endif
00065
00083 #if ( CPU_USE_GENERIC_BITFIELD_CODE == FALSE )
00084 #define _Bitfield_Find_first_bit( _value, _bit_number ) \
00085 _CPU_Bitfield_Find_first_bit( _value, _bit_number )
00086 #else
00087 #define _Bitfield_Find_first_bit( _value, _bit_number ) \
00088 { \
00089 register uint32_t __value = (uint32_t ) (_value); \
00090 register const unsigned char *__p = __log2table; \
00091 \
00092 if ( __value < 0x100 ) \
00093 (_bit_number) = __p[ __value ] + 8; \
00094 else \
00095 (_bit_number) = __p[ __value >> 8 ]; \
00096 }
00097 #endif
00098
00099 #ifdef __cplusplus
00100 }
00101 #endif
00102
00105 #endif
00106