nds/arm9/math.h

#include <nds/jtypes.h>

マクロ定義

#define DIV_CR   (*(vuint16*)(0x04000280))
#define DIV_NUMERATOR64   (*(vint64*) (0x04000290))
#define DIV_NUMERATOR32   (*(vint32*) (0x04000290))
#define DIV_DENOMINATOR64   (*(vint64*) (0x04000298))
#define DIV_DENOMINATOR32   (*(vint32*) (0x04000298))
#define DIV_RESULT64   (*(vint64*) (0x040002A0))
#define DIV_RESULT32   (*(vint32*) (0x040002A0))
#define DIV_REMAINDER64   (*(vint64*) (0x040002A8))
#define DIV_REMAINDER32   (*(vint32*) (0x040002A8))
#define SQRT_CR   (*(vuint16*)(0x040002B0))
#define SQRT_PARAM64   (*(vint64*) (0x040002B8))
#define SQRT_RESULT32   (*(vint32*) (0x040002B4))
#define SQRT_PARAM32   (*(vint32*) (0x040002B8))
#define DIV_64_64   2
#define DIV_64_32   1
#define DIV_32_32   0
#define DIV_BUSY   (1<<15)
#define SQRT_64   1
#define SQRT_32   0
#define SQRT_BUSY   (1<<15)

関数

static int32 divf32 (int32 num, int32 den)
static int32 mulf32 (int32 a, int32 b)
static int32 sqrtf32 (int32 a)
static int32 div32 (int32 num, int32 den)
static int32 mod32 (int32 num, int32 den)
static int32 div64 (int64 num, int32 den)
static int32 mod64 (int64 num, int32 den)
static int32 sqrt32 (int a)
static void crossf32 (int32 *a, int32 *b, int32 *result)
static int32 dotf32 (int32 *a, int32 *b)
static void normalizef32 (int32 *a)

マクロ定義

#define DIV_32_32   0

#define DIV_64_32   1

#define DIV_64_64   2

#define DIV_BUSY   (1<<15)

#define DIV_CR   (*(vuint16*)(0x04000280))

#define DIV_DENOMINATOR32   (*(vint32*) (0x04000298))

#define DIV_DENOMINATOR64   (*(vint64*) (0x04000298))

#define DIV_NUMERATOR32   (*(vint32*) (0x04000290))

#define DIV_NUMERATOR64   (*(vint64*) (0x04000290))

#define DIV_REMAINDER32   (*(vint32*) (0x040002A8))

#define DIV_REMAINDER64   (*(vint64*) (0x040002A8))

#define DIV_RESULT32   (*(vint32*) (0x040002A0))

#define DIV_RESULT64   (*(vint64*) (0x040002A0))

#define SQRT_32   0

#define SQRT_64   1

#define SQRT_BUSY   (1<<15)

#define SQRT_CR   (*(vuint16*)(0x040002B0))

#define SQRT_PARAM32   (*(vint32*) (0x040002B8))

#define SQRT_PARAM64   (*(vint64*) (0x040002B8))

#define SQRT_RESULT32   (*(vint32*) (0x040002B4))


関数

static void crossf32 ( int32 a,
int32 b,
int32 result 
) [inline, static]

00226 {
00227         result[0] = mulf32(a[1], b[2]) - mulf32(b[1], a[2]);
00228         result[1] = mulf32(a[2], b[0]) - mulf32(b[2], a[0]);
00229         result[2] = mulf32(a[0], b[1]) - mulf32(b[0], a[1]);
00230 }

static int32 div32 ( int32  num,
int32  den 
) [inline, static]

00139 {
00140         DIV_CR = DIV_32_32;
00141 
00142         while(DIV_CR & DIV_BUSY);
00143 
00144         DIV_NUMERATOR32 = num;
00145         DIV_DENOMINATOR32 = den;
00146 
00147         while(DIV_CR & DIV_BUSY);
00148 
00149         return (DIV_RESULT32);
00150 }

static int32 div64 ( int64  num,
int32  den 
) [inline, static]

00173 {
00174         DIV_CR = DIV_64_32;
00175 
00176         while(DIV_CR & DIV_BUSY);
00177 
00178         DIV_NUMERATOR64 = num;
00179         DIV_DENOMINATOR32 = den;
00180 
00181         while(DIV_CR & DIV_BUSY);
00182 
00183         return (DIV_RESULT32);
00184 }

static int32 divf32 ( int32  num,
int32  den 
) [inline, static]

00095 {
00096         DIV_CR = DIV_64_32;
00097 
00098         while(DIV_CR & DIV_BUSY);
00099 
00100         DIV_NUMERATOR64 = ((int64)num) << 12;
00101         DIV_DENOMINATOR32 = den;
00102 
00103         while(DIV_CR & DIV_BUSY);
00104 
00105         return (DIV_RESULT32);
00106 }

static int32 dotf32 ( int32 a,
int32 b 
) [inline, static]

00235 {
00236         return mulf32(a[0], b[0]) + mulf32(a[1], b[1]) + mulf32(a[2], b[2]);
00237 }

static int32 mod32 ( int32  num,
int32  den 
) [inline, static]

00156 {
00157         DIV_CR = DIV_32_32;
00158 
00159         while(DIV_CR & DIV_BUSY);
00160 
00161         DIV_NUMERATOR32 = num;
00162         DIV_DENOMINATOR32 = den;
00163 
00164         while(DIV_CR & DIV_BUSY);
00165 
00166         return (DIV_REMAINDER32);
00167 }

static int32 mod64 ( int64  num,
int32  den 
) [inline, static]

00190 {
00191         DIV_CR = DIV_64_32;
00192 
00193         while(DIV_CR & DIV_BUSY);
00194 
00195         DIV_NUMERATOR64 = num;
00196         DIV_DENOMINATOR32 = den;
00197 
00198         while(DIV_CR & DIV_BUSY);
00199 
00200         return (DIV_REMAINDER32);
00201 }

static int32 mulf32 ( int32  a,
int32  b 
) [inline, static]

00112 {
00113         long long result = (long long)a*(long long)b;
00114         return (int32)(result >> 12);
00115 }

static void normalizef32 ( int32 a  )  [inline, static]

00244 {
00245         // magnitude = sqrt ( Ax^2 + Ay^2 + Az^2 )
00246         int32 magnitude = sqrtf32( mulf32(a[0], a[0]) + mulf32(a[1], a[1]) + mulf32(a[2], a[2]) );
00247 
00248         a[0] = divf32(a[0], magnitude);
00249         a[1] = divf32(a[1], magnitude);
00250         a[2] = divf32(a[2], magnitude);
00251 }

static int32 sqrt32 ( int  a  )  [inline, static]

00207 {
00208         SQRT_CR = SQRT_32;
00209 
00210         while(SQRT_CR & SQRT_BUSY);
00211 
00212         SQRT_PARAM32 = a;
00213 
00214         while(SQRT_CR & SQRT_BUSY);
00215 
00216         return SQRT_RESULT32;
00217 }

static int32 sqrtf32 ( int32  a  )  [inline, static]

00121 {
00122         SQRT_CR = SQRT_64;
00123 
00124         while(SQRT_CR & SQRT_BUSY);
00125 
00126         SQRT_PARAM64 = ((int64)a) << 12;
00127 
00128         while(SQRT_CR & SQRT_BUSY);
00129 
00130         return SQRT_RESULT32;
00131 }


libnds(ARM9)に対してTue Jan 22 15:48:22 2008に生成されました。  doxygen 1.5.4