mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
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
204 lines
6.8 KiB
C
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
|