URL
https://opencores.org/ocsvn/mlite/mlite/trunk
Subversion Repositories mlite
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 194 to Rev 195
- ↔ Reverse comparison
Rev 194 → Rev 195
/trunk/kernel/math.c
21,6 → 21,11
*--------------------------------------------------------------------*/ |
#include "rtos.h" |
|
//#define USE_SW_MULT |
#if !defined(WIN32) && !defined(USE_SW_MULT) |
#define USE_MULT64 |
#endif |
|
#define PI ((float)3.1415926) |
#define PI_2 ((float)(PI/2.0)) |
#define PI2 ((float)(PI*2.0)) |
100,7 → 105,7
unsigned long a, b, c; |
unsigned long as, af, bs, bf, cs, cf; |
long ae, be, ce; |
#ifdef WIN32 |
#ifndef USE_MULT64 |
unsigned long a2, a1, b2, b1, med1, med2; |
#endif |
unsigned long hi, lo; |
113,7 → 118,7
be = (b >> 23) & 0xff; |
bf = 0x00800000 | (b & 0x007fffff); |
cs = as ^ bs; |
#ifdef WIN32 |
#ifndef USE_MULT64 |
a1 = af & 0xffff; |
a2 = af >> 16; |
b1 = bf & 0xffff; |
149,7 → 154,7
unsigned long a, b, c; |
unsigned long as, af, bs, bf, cs, cf; |
unsigned long a1, b1; |
#if WIN32 |
#ifndef USE_MULT64 |
unsigned long a2, b2, med1, med2; |
#endif |
unsigned long hi, lo; |
169,7 → 174,7
cf = a1 / b1; |
cf <<= 12; //8 |
#if 1 /*non-quick*/ |
#if WIN32 |
#ifndef USE_MULT64 |
a1 = cf & 0xffff; |
a2 = cf >> 16; |
b1 = bf & 0xffff; |
512,6 → 517,79
} |
|
|
/********************************************/ |
//These five functions will only be used if the flag "-mno-mul" is enabled |
#ifdef USE_SW_MULT |
unsigned long __mulsi3(unsigned long a, unsigned long b) |
{ |
unsigned long answer = 0; |
int i; |
for(i = 0; i < 32; ++i) |
{ |
if(b & 1) |
answer += a; |
a <<= 1; |
b >>= 1; |
} |
return answer; |
} |
|
|
static unsigned long DivideMod(unsigned long a, unsigned long b, int doMod) |
{ |
unsigned long upper=a, lower=0; |
int i; |
a = b << 31; |
for(i = 0; i < 32; ++i) |
{ |
lower = lower << 1; |
if(upper >= a && a && b < 2) |
{ |
upper = upper - a; |
lower |= 1; |
} |
a = ((b&2) << 30) | (a >> 1); |
b = b >> 1; |
} |
if(!doMod) |
return lower; |
return upper; |
} |
|
|
unsigned long __udivsi3(unsigned long a, unsigned long b) |
{ |
return DivideMod(a, b, 0); |
} |
|
|
long __divsi3(long a, long b) |
{ |
long answer, negate=0; |
if(a < 0) |
{ |
a = -a; |
negate = !negate; |
} |
if(b < 0) |
{ |
b = -b; |
negate = !negate; |
} |
answer = DivideMod(a, b, 0); |
if(negate) |
answer = -answer; |
return answer; |
} |
|
|
unsigned long __umodsi3(unsigned long a, unsigned long b) |
{ |
return DivideMod(a, b, 1); |
} |
#endif |
|
|
/*************** Test *****************/ |
#ifdef WIN32 |
#include <math.h> |