(toppers-users 3730) Re: SSPの制約タスクの待ちについて

Miyagawa miyagawa @ sanritz.co.jp
2012年 1月 17日 (火) 11:10:37 JST


宮川です。

余計な突っ込みかも知れませんが、、、

> Inline uint_t
> bitmap_search(uint_t bitmap)
> {
>  uint_t n;
>  for(n = 0U; n < 3; n++){
>   if ((bitmap & 0x0fU) == 0U) {
>    bitmap >>= 4U;
>   }else{
>    break;
>   }
>  }
>  return (n*4U + bitmap_search_table[(bitmap & 0x0fU) - 1U]);
> }

n <= 3 ? は置いといて、

良く知られた方法としては、こんな手もあります。(16bit)

  x = (x & (-x)) - 1
  x = (x & 0x5555) + ( (x >> 1) & 0x5555)
  x = (x & 0x3333) + ( (x >> 2) & 0x3333)
  x = (x & 0xffff) + ( (x >> 4) & 0xffff)
  x = (x & 0x00ff) + ( (x >> 8) & 0x00ff)

固定時間だし、シフトと足し算だけなのでそれなりに速いと思います。

--------------