mirror of https://gitee.com/openkylin/linux.git
ALSA: pcm: Replace custom ld2 function with __fls
__fls has the same semantics as ld2, so there is no need to re-implement it. Furthermore a lot of architectures have custom implementations of __fls that are able to use special hardware instructions to compute the result. This makes the code slightly shorter and faster. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
f6dbe1bee5
commit
757b037650
|
@ -38,31 +38,6 @@ int snd_pcm_hw_param_value(const struct snd_pcm_hw_params *params,
|
|||
#define MASK_OFS(i) ((i) >> 5)
|
||||
#define MASK_BIT(i) (1U << ((i) & 31))
|
||||
|
||||
static inline unsigned int ld2(u_int32_t v)
|
||||
{
|
||||
unsigned r = 0;
|
||||
|
||||
if (v >= 0x10000) {
|
||||
v >>= 16;
|
||||
r += 16;
|
||||
}
|
||||
if (v >= 0x100) {
|
||||
v >>= 8;
|
||||
r += 8;
|
||||
}
|
||||
if (v >= 0x10) {
|
||||
v >>= 4;
|
||||
r += 4;
|
||||
}
|
||||
if (v >= 4) {
|
||||
v >>= 2;
|
||||
r += 2;
|
||||
}
|
||||
if (v >= 2)
|
||||
r++;
|
||||
return r;
|
||||
}
|
||||
|
||||
static inline size_t snd_mask_sizeof(void)
|
||||
{
|
||||
return sizeof(struct snd_mask);
|
||||
|
@ -102,7 +77,7 @@ static inline unsigned int snd_mask_max(const struct snd_mask *mask)
|
|||
int i;
|
||||
for (i = SNDRV_MASK_SIZE - 1; i >= 0; i--) {
|
||||
if (mask->bits[i])
|
||||
return ld2(mask->bits[i]) + (i << 5);
|
||||
return __fls(mask->bits[i]) + (i << 5);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue