ctr_firmware/trunk/bootrom/include/brom/math/math.h
nakasima 207a8ec364 MMU設定修正。
ARM11ロードアドレス修正。
MG20EMUデバッグ用PROM追加。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@81 b871894f-2f95-9b40-918c-086798483c85
2008-12-05 12:44:11 +00:00

204 lines
6.8 KiB
C

/*---------------------------------------------------------------------------*
Project: TwlBrom - MATH - include
File: math/math.h
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef BROM_MATH_MATH_H_
#define BROM_MATH_MATH_H_
#include <brom/misc.h>
#include <brom/types.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------------
// Type definition
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Declaration of function
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Implementation of inline function
//----------------------------------------------------------------------------
/*---------------------------------------------------------------------------*
Name: MATH_ABS
Description: 絶対値を返すマクロ。
各引数は複数回評価されるため、副作用に注意。
Arguments: a
Returns: a < 0 なら -a, さもなくば a
*---------------------------------------------------------------------------*/
#define MATH_ABS(a) ( ( (a) < 0 ) ? (-(a)) : (a) )
/*---------------------------------------------------------------------------*
Name: MATH_IAbs
Description: 絶対値を返すインライン関数。
インライン関数として実装されているので、副作用はない。
Arguments: a
Returns: a < 0 なら -a, さもなくば a
*---------------------------------------------------------------------------*/
SDK_INLINE int MATH_IAbs(int a)
{
return (a < 0) ? -a : a;
}
/*---------------------------------------------------------------------------*
Name: MATH_CLAMP
Description: lowからhighの範囲の値を取得するマクロ。
各引数は複数回評価されるため、副作用に注意。
Arguments: x
low 最大値
hight 最小値
Returns: x < low ならば low, x > high ならば high さもなくば x
*---------------------------------------------------------------------------*/
#define MATH_CLAMP(x, low, high) ( ( (x) > (high) ) ? (high) : ( ( (x) < (low) ) ? (low) : (x) ) )
/*---------------------------------------------------------------------------*
Name: MATH_MIN
Description: 2つの引数のどちらか小さいほうを返す。
マクロとして実装されているので、不等号演算子が定義されている
型で使用可能。各引数は複数回評価されるため、副作用に注意。
Arguments: a, b
Returns: a < b なら a, さもなくば b
*---------------------------------------------------------------------------*/
#define MATH_MIN(a,b) (((a) <= (b)) ? (a) : (b))
/*---------------------------------------------------------------------------*
Name: MATH_IMin
Description: 2つの int 型整数引数のどちらか小さいほうを返す。
インライン関数として実装されているので、副作用はない。
Arguments: a, b - int 型整数
Returns: a <= b なら a, さもなくば b
*---------------------------------------------------------------------------*/
SDK_INLINE int MATH_IMin(int a, int b)
{
return (a <= b) ? a : b;
}
/*---------------------------------------------------------------------------*
Name: MATH_MAX
Description: 2つの引数のどちらか大きいほうを返す。
マクロとして実装されているので、不等号演算子が定義されている
型で使用可能。各引数は複数回評価されるため、副作用に注意。
Arguments: a, b
Returns: a >= b なら a, さもなくば b
*---------------------------------------------------------------------------*/
#define MATH_MAX(a,b) (((a) >= (b)) ? (a) : (b))
/*---------------------------------------------------------------------------*
Name: MATH_IMax
Description: 2つの int 型整数引数のどちらか大きいほうを返す。
インライン関数として実装されているので、副作用はない。
Arguments: a, b - int 型整数
Returns: a >= b なら a, さもなくば b
*---------------------------------------------------------------------------*/
SDK_INLINE int MATH_IMax(int a, int b)
{
return (a >= b) ? a : b;
}
/*---------------------------------------------------------------------------*
Name: MATH_DIVUP
Description: base で割り端数を切り上げるマクロ。
Arguments: x: 数値
base: 2 のべき乗の基数
Returns: x を base で割り端数を切り上げた数
*---------------------------------------------------------------------------*/
#define MATH_DIVUP(x, base) (((x) + ((base)-1)) / (base))
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDUP
Description: 切り上げた数値を返すマクロ。
Arguments: x
base - 2 のべき乗の基数
Returns: x 以上の最小の base の倍数
*---------------------------------------------------------------------------*/
#define MATH_ROUNDUP(x, base) (((x) + ((base)-1)) & ~((base)-1))
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDDOWN
Description: 切り下げた数値を返すマクロ。
Arguments: x
base - 2 のべき乗の基数
Returns: x 以下の最大の base の倍数
*---------------------------------------------------------------------------*/
#define MATH_ROUNDDOWN(x, base) ((x) & ~((base)-1))
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDUP32
Description: 32の倍数に切り上げた数値を返すマクロ。
Arguments: x
Returns: x 以上の最小の32の倍数
*---------------------------------------------------------------------------*/
#define MATH_ROUNDUP32(x) MATH_ROUNDUP(x, 32)
/*---------------------------------------------------------------------------*
Name: MATH_ROUNDDOWN32
Description: 32の倍数に切り下げた数値を返すマクロ。
Arguments: x
Returns: x 以下の最大の32の倍数
*---------------------------------------------------------------------------*/
#define MATH_ROUNDDOWN32(x) MATH_ROUNDDOWN(x, 32)
#ifdef __cplusplus
}/* extern "C" */
#endif
/* BROM_MATH_MATH_H_ */
#endif