Add rayman2 source files
This commit is contained in:
176
Rayman_X/cpa/tempgrp/MTH/Specif/MTH_fopt.c
Normal file
176
Rayman_X/cpa/tempgrp/MTH/Specif/MTH_fopt.c
Normal file
@@ -0,0 +1,176 @@
|
||||
/* ##C_FILE#
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
FILE : MTH_fopt.c
|
||||
MODULE : MTH (Common Mathematic Library)
|
||||
|
||||
DESCRIPTION : Optimization for PC and float
|
||||
|
||||
VERSION : MTH V5.0.13 / Alexandre LANGER [ALX] Ubi R&D / Add Comments
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*/
|
||||
|
||||
|
||||
/* NOT for U64 */
|
||||
#ifndef U64
|
||||
|
||||
/* ##INCLUDE#----------------------------------------------------------------------------
|
||||
Includes Files
|
||||
---------------------------------------------------------------------------------------*/
|
||||
|
||||
#include <math.h>
|
||||
|
||||
|
||||
|
||||
#include "cpa_expt.h"
|
||||
|
||||
|
||||
/* ##GLOBVAR#----------------------------------------------------------------------------
|
||||
Globale variable declaration
|
||||
---------------------------------------------------------------------------------------*/
|
||||
|
||||
double MTH_gs_dDecal; /* = 3.0F*pow(2, 51); */
|
||||
|
||||
/* sqrt : */
|
||||
CPA_EXPORT unsigned long MTH_g_a2048_fSquareRootTable[1024*2];
|
||||
/* div : */
|
||||
CPA_EXPORT unsigned long MTH_g_a1024_fInverse[1024];
|
||||
/* inv sqrt : */
|
||||
CPA_EXPORT unsigned long MTH_g_a2048_fInvSquareRootTable[1024*2];
|
||||
|
||||
|
||||
|
||||
|
||||
/* ##FUNCDEF#----------------------------------------------------------------------------
|
||||
Functions definition
|
||||
---------------------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
/* ##-###########################
|
||||
## SQRT
|
||||
############################## */
|
||||
|
||||
/* ##F===================================================================================
|
||||
NAME : MTH_fn_vInitSqrtRootOpt
|
||||
DESCRIPTION : Initialize Square root table
|
||||
INPUT : void
|
||||
OUTPUT : void
|
||||
=======================================================================================*/
|
||||
void MTH_fn_vInitSqrtRootOpt( void )
|
||||
{
|
||||
long i;
|
||||
float ft;
|
||||
unsigned long m;
|
||||
|
||||
for ( i=0; i<1024; i++)
|
||||
{
|
||||
ft = (float) sqrt((double) 1.0+((float)i/1024) );
|
||||
m = *(long *)&ft;
|
||||
m&= 0x7FFFFF;
|
||||
MTH_g_a2048_fSquareRootTable[i+1024] = m;
|
||||
|
||||
ft = (float) ( sqrt(2.0)*sqrt((double) 1.0+((float)i/1024) ) );
|
||||
m = *(long *)&ft;
|
||||
m&= 0x7FFFFF;
|
||||
MTH_g_a2048_fSquareRootTable[i] = m;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ##-###########################
|
||||
## DIV
|
||||
############################## */
|
||||
|
||||
/* ##F===================================================================================
|
||||
NAME : MTH_fn_vInitInverseOpt
|
||||
DESCRIPTION : Initialize Inverse table
|
||||
INPUT : void
|
||||
OUTPUT : void
|
||||
=======================================================================================*/
|
||||
void MTH_fn_vInitInverseOpt( void )
|
||||
{
|
||||
long i;
|
||||
float ft;
|
||||
|
||||
for ( i=0; i<1024; i++ )
|
||||
{
|
||||
ft = 1.0F / ( 1.0F + ((float)i/1024) );
|
||||
MTH_g_a1024_fInverse[i] = (*(long *)&ft) & 0x7FFFFF;
|
||||
}
|
||||
MTH_g_a1024_fInverse[0]=(1<<23); /* Because of problems with 2^n */
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ##-###########################
|
||||
## INV SQRT
|
||||
############################## */
|
||||
|
||||
/* ##F===================================================================================
|
||||
NAME : MTH_fn_vInitInvSqrtRootOpt
|
||||
DESCRIPTION : Initialize Inverse Square root table
|
||||
INPUT : void
|
||||
OUTPUT : void
|
||||
=======================================================================================*/
|
||||
void MTH_fn_vInitInvSqrtRootOpt(void)
|
||||
{
|
||||
long i; /* index on the table */
|
||||
unsigned long m; /* mantis */
|
||||
float ft; /* float value */
|
||||
|
||||
for ( i=0; i<1024; i++ )
|
||||
{
|
||||
ft = (float) ( 2.0/sqrt((double)( 1.0+((float)i/1024) )) );
|
||||
m = *(long *)&ft;
|
||||
m &= 0x7FFFFF;
|
||||
MTH_g_a2048_fInvSquareRootTable[i+1024] = m;
|
||||
ft = (float) ( sqrt(2.0)/sqrt((double)( 1.0+((float)i/1024) )) );
|
||||
m = *(long *)&ft;
|
||||
m &= 0x7FFFFF;
|
||||
m+=0x800000;
|
||||
MTH_g_a2048_fInvSquareRootTable[i] = m;
|
||||
}
|
||||
MTH_g_a2048_fInvSquareRootTable[1024]=(1<<23);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ##-###########################
|
||||
## INIT
|
||||
############################## */
|
||||
|
||||
/* ##F===================================================================================
|
||||
NAME : MTH_fn_vInit
|
||||
DESCRIPTION : Initialize all table if it not yet done
|
||||
INPUT : void
|
||||
OUTPUT : void
|
||||
=======================================================================================*/
|
||||
void MTH_fn_vInit( void )
|
||||
{
|
||||
static unsigned char InitDone=0;
|
||||
|
||||
MTH_gs_dDecal= 3.0F*pow(2, 51);
|
||||
|
||||
if(InitDone==0)
|
||||
{
|
||||
MTH_fn_vInitSqrtRootOpt();
|
||||
MTH_fn_vInitInverseOpt();
|
||||
MTH_fn_vInitInvSqrtRootOpt();
|
||||
InitDone=1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif /* NOT U64 */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user