Example #1
0
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);
	}
Example #2
0
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);
	}
Example #3
0
static inline int roundUpToPowerOfTwo (int x)
{
	return 1 << (32 - __builtin_allegrex_clz(x - 1));
}