diff options
Diffstat (limited to 'src/mathline.c')
| -rw-r--r-- | src/mathline.c | 109 |
1 files changed, 7 insertions, 102 deletions
diff --git a/src/mathline.c b/src/mathline.c index a7ca296..a0eeac6 100644 --- a/src/mathline.c +++ b/src/mathline.c @@ -1,6 +1,7 @@ #include <math.h> #include "3dc.h" +#include "mathline.h" void ADD_LL(LONGLONGCH *a, LONGLONGCH *b, LONGLONGCH *c); void ADD_LL_PP(LONGLONGCH *c, LONGLONGCH *a); @@ -12,21 +13,13 @@ void EQUALS_LL(LONGLONGCH *a, LONGLONGCH *b); void NEG_LL(LONGLONGCH *a); void ASR_LL(LONGLONGCH *a, int shift); void IntToLL(LONGLONGCH *a, int *b); -int MUL_FIXED(int a, int b); int DIV_FIXED(int a, int b); -#define DIV_INT(a, b) ((a) / (b)) - int NarrowDivide(LONGLONGCH *a, int b); int WideMulNarrowDiv(int a, int b, int c); void RotateVector_ASM(VECTORCH *v, MATRIXCH *m); void RotateAndCopyVector_ASM(VECTORCH *v1, VECTORCH *v2, MATRIXCH *m); -#if 0 -int FloatToInt(float); -#define f2i(a, b) { a = FloatToInt(b); } -#endif - #undef ASM386 #if !defined(ASM386) @@ -450,63 +443,10 @@ __asm__("movl 0(%%esi), %%eax \n\t" #endif } -/* - - Fixed Point Multiply. - - - 16.16 * 16.16 -> 16.16 - or - 16.16 * 0.32 -> 0.32 - - A proper version of this function ought to read - 16.16 * 16.16 -> 32.16 - but this would require a __int64 result - - Algorithm: - - Take the mid 32 bits of the 64 bit result - -*/ - -/* - These functions have been checked for suitability for - a Pentium and look as if they would work adequately. - Might be worth a more detailed look at optimising - them though. -*/ - -int MUL_FIXED(int a, int b) -{ -/* - int retval; - _asm - { - mov eax,a - imul b - shrd eax,edx,16 - mov retval,eax - } -*/ - -#if defined(ASM386) - int retval; -__asm__("imull %2 \n\t" - "shrdl $16, %%edx, %%eax \n\t" - : "=a" (retval) - : "0" (a), "m" (b) - : "%edx", "cc" - ); - return retval; -#else - __int64 aa = (__int64) a; - __int64 bb = (__int64) b; - - __int64 cc = aa * bb; - - return (int) ((cc >> 16) & 0xffffffff); -#endif -} +// +// Fixed Point Multiply - MUL_FIXED +// See mathline.h +// /* @@ -561,17 +501,6 @@ __asm__("cdq \n\t" */ - -/* - - 32/32 division - - This macro is a function on some other platforms - -*/ - -#define DIV_INT(a, b) ((a) / (b)) - /* A Narrowing 64/32 Division @@ -687,31 +616,7 @@ __asm__ volatile return sqrt_temp; #else - return (int) sqrt( (float)A ); -#endif -} - -/* - - This may look ugly (it is) but it is a MUCH faster way to convert "float" into "int" than - the function call "CHP" used by the WATCOM compiler. - -*/ - -volatile float fti_fptmp; -volatile int fti_itmp; - -void FloatToInt() -{ -#if defined(ASM386) -__asm__ volatile - ("flds fti_fptmp \n\t" - "fistpl fti_itmp \n\t" - : - : - : "memory", "cc" - ); -#else - fti_itmp = (int)fti_fptmp; + float fA = A; + return lrintf(sqrtf(fA)); #endif } |
