static int round_up_to_power_of_2(int x) { #if (1) /* alegrex(pspのcpu)対応の組み込み関数を使う */ return (1 << (32 - __builtin_allegrex_clz(x - 1))); #else /* alegrex非対応の場合(pspのcpuに対応していない場合) */ /* 万一コンパイルできないSDKの場合用 */ { // とりあえず大体の大きさ判定(値が無くなるビットを調べる) int b = x; int n; for (n=0; b!=0; n++) { b >>= 1; } // この時点で大体の大きさ(n bit)ぐらい。 // 大体の大きさ(b)を計算 b = (1 << n); // 特殊ケース(丁度)の場合、半分にする。 if (b == (2 * x)) { b >>= 1; } return (b); }
static /*inline*/ int round_up_to_power_of_2(int x) { #if (1) /* alegrex(pspのcpu)対応の組み込み関数を使う */ return (1 << (32 - __builtin_allegrex_clz(x - 1))); #else /* alegrex非対応の場合 */ /* 万一コンパイルできないSDKの場合用 */ { int b = x; int n; for (n=0; b!=0; n++) { b >>= 1; } b = (1 << n); // if (b == (2 * x)) { b >>= 1; } return (b); }
static inline int roundUpToPowerOfTwo (int x) { return 1 << (32 - __builtin_allegrex_clz(x - 1)); }