windows-nt/Source/XPSP1/NT/drivers/tpg/hwx/common/inc/math16.h
2020-09-26 16:20:57 +08:00

50 lines
1.1 KiB
C

#ifndef __MATH16_H__
#define __MATH16_H__
#ifdef __cplusplus
extern "C" {
#endif
#define SHFTBITS 16
#define LOWMASK ((1 << SHFTBITS)-1)
#define HGHMASK (~LOWMASK)
#define LOWBITS(x) ((x) & LOWMASK)
#define HGHBITS(x) ((x) & HGHMASK)
#define LSHFT(x) ((x) << SHFTBITS)
#define RSHFT(x) ((x) >> SHFTBITS)
#define PI (3373259427 >> (30-SHFTBITS))
#define TWOPI (PI << 1)
#define PIOVER2 (PI >> 1)
#define Need(dw) (dw & 0xFF000000 ? 32 : (dw & 0x00FF0000 ? 24 : (dw & 0x0000FF00 ? 16 : 8)))
int Div16(int iX,int iY);
int Sigmoid16(int iX);
// Greg's multiplication algorithm:
typedef struct {
unsigned short frac;
short whole;
} FIX1616, *PFIX1616;
#define Mul16(a,b,c) { \
int i1, i2; \
FIX1616 fix1, fix2; \
i1=(a); \
i2=(b); \
fix1 = *(PFIX1616)&i1; \
fix2 = *(PFIX1616)&i2; \
c = (unsigned int)(fix1.frac*fix2.frac) >> 16; \
c += fix1.frac*fix2.whole + fix1.whole*fix2.frac; \
c += (fix1.whole*fix2.whole) << 16; \
}
#ifdef __cplusplus
}
#endif
#endif // __MATH16_H__