Merge branch 'fix_vorbis_ilog' of https://github.com/rygorous/stb into working

pull/415/merge
Sean Barrett 2017-03-03 06:48:48 -08:00
commit 66fdbaaa87
1 changed files with 7 additions and 6 deletions

View File

@ -986,17 +986,18 @@ static int ilog(int32 n)
{ {
static signed char log2_4[16] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4 }; static signed char log2_4[16] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4 };
if (n < 0) return 0; // signed n returns 0
// 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29) // 2 compares if n < 16, 3 compares otherwise (4 if signed or n > 1<<29)
if (n < (1 << 14)) if (n < (1 << 14))
if (n < (1 << 4)) return 0 + log2_4[n ]; if (n < (1 << 4)) return 0 + log2_4[n ];
else if (n < (1 << 9)) return 5 + log2_4[n >> 5]; else if (n < (1 << 9)) return 5 + log2_4[n >> 5];
else return 10 + log2_4[n >> 10]; else return 10 + log2_4[n >> 10];
else if (n < (1 << 24)) else if (n < (1 << 24))
if (n < (1 << 19)) return 15 + log2_4[n >> 15]; if (n < (1 << 19)) return 15 + log2_4[n >> 15];
else return 20 + log2_4[n >> 20]; else return 20 + log2_4[n >> 20];
else if (n < (1 << 29)) return 25 + log2_4[n >> 25]; else if (n < (1 << 29)) return 25 + log2_4[n >> 25];
else if (n < (1 << 31)) return 30 + log2_4[n >> 30]; else return 30 + log2_4[n >> 30];
else return 0; // signed n returns 0
} }
#ifndef M_PI #ifndef M_PI