LALPulsar  6.1.0.1-c9a8ef6
SinCosLUT.i File Reference

Go to the source code of this file.

Macros

#define SINCOS_TRIM_X(y, x)   y = x - rintf(x) + 1.0;
 
#define SINCOS_ADDS   402653184.0
 
#define SINCOS_MASK1   0xFFFFFF
 
#define SINCOS_MASK2   0x003FFF
 
#define SINCOS_SHIFT   14
 
#define SINCOS_LUT_RES   1024 /* should be multiple of 4 */
 
#define SINCOS_PROLOG
 
#define SINCOS_STEP1(x)   sincosUX.asreal = x + SINCOS_ADDS;
 
#define SINCOS_STEP2   sincosI = sincosUX.as2int.intval & SINCOS_MASK1;
 
#define SINCOS_STEP3   sincosN = sincosUX.as2int.intval & SINCOS_MASK2;
 
#define SINCOS_STEP4   sincosI = sincosI >> SINCOS_SHIFT;
 
#define SINCOS_STEP5(s)   *s = sincosLUTbase[sincosI] + sincosN * sincosLUTdiff[sincosI];
 
#define SINCOS_STEP6(c)   *c = cosLUTbase[sincosI] + sincosN * cosLUTdiff[sincosI];
 
#define SINCOS_EPILOG(s, c, x)
 
#define RAX   "eax"
 
#define RDX   "edx"
 
#define RDI   "edi"
 
#define PAX   "%%"RAX
 
#define PDX   "%%"RDX
 
#define PDI   "%%"RDI
 
#define SINCOS_FLD   "fldl"
 
#define SINCOS_TRIM_P0A(alpha)
 
#define SINCOS_TRIM_P0B(alpha)
 
#define SINCOS_P0(alpha)
 
#define SINCOS_P1
 
#define SINCOS_P2
 
#define SINCOS_P3
 
#define SINCOS_P4
 
#define SINCOS_P4A
 
#define SINCOS_P5(sin)
 
#define SINCOS_P6(cos)
 
#define SINCOS_REGISTERS   RAX,RDX,RDI,"st","st(1)","st(2)","cc"
 

Variables

UNUSED REAL4 sincosLUTbase [SINCOS_LUT_RES+SINCOS_LUT_RES/4]
 
UNUSED REAL4 sincosLUTdiff [SINCOS_LUT_RES+SINCOS_LUT_RES/4]
 
static const UNUSED REAL4cosLUTbase = sincosLUTbase + (SINCOS_LUT_RES/4)
 
static const UNUSED REAL4cosLUTdiff = sincosLUTdiff + (SINCOS_LUT_RES/4)
 
static UNUSED INT4 sincosI
 
static UNUSED INT4 sincosN
 
union {
   REAL8   asreal
 
   struct {
      INT4   intval
 
      INT4   dummy
 
   }   as2int
 
sincosUX
 

Macro Definition Documentation

◆ SINCOS_TRIM_X

#define SINCOS_TRIM_X (   y,
  x 
)    y = x - rintf(x) + 1.0;

Definition at line 85 of file SinCosLUT.i.

◆ SINCOS_ADDS

#define SINCOS_ADDS   402653184.0

Definition at line 97 of file SinCosLUT.i.

◆ SINCOS_MASK1

#define SINCOS_MASK1   0xFFFFFF

Definition at line 98 of file SinCosLUT.i.

◆ SINCOS_MASK2

#define SINCOS_MASK2   0x003FFF

Definition at line 99 of file SinCosLUT.i.

◆ SINCOS_SHIFT

#define SINCOS_SHIFT   14

Definition at line 100 of file SinCosLUT.i.

◆ SINCOS_LUT_RES

#define SINCOS_LUT_RES   1024 /* should be multiple of 4 */

Definition at line 101 of file SinCosLUT.i.

◆ SINCOS_PROLOG

#define SINCOS_PROLOG

Definition at line 135 of file SinCosLUT.i.

◆ SINCOS_STEP1

#define SINCOS_STEP1 (   x)    sincosUX.asreal = x + SINCOS_ADDS;

Definition at line 136 of file SinCosLUT.i.

◆ SINCOS_STEP2

#define SINCOS_STEP2   sincosI = sincosUX.as2int.intval & SINCOS_MASK1;

Definition at line 137 of file SinCosLUT.i.

◆ SINCOS_STEP3

#define SINCOS_STEP3   sincosN = sincosUX.as2int.intval & SINCOS_MASK2;

Definition at line 138 of file SinCosLUT.i.

◆ SINCOS_STEP4

#define SINCOS_STEP4   sincosI = sincosI >> SINCOS_SHIFT;

Definition at line 139 of file SinCosLUT.i.

◆ SINCOS_STEP5

#define SINCOS_STEP5 (   s)    *s = sincosLUTbase[sincosI] + sincosN * sincosLUTdiff[sincosI];

Definition at line 140 of file SinCosLUT.i.

◆ SINCOS_STEP6

#define SINCOS_STEP6 (   c)    *c = cosLUTbase[sincosI] + sincosN * cosLUTdiff[sincosI];

Definition at line 141 of file SinCosLUT.i.

◆ SINCOS_EPILOG

#define SINCOS_EPILOG (   s,
  c,
  x 
)

Definition at line 142 of file SinCosLUT.i.

◆ RAX

#define RAX   "eax"

Definition at line 156 of file SinCosLUT.i.

◆ RDX

#define RDX   "edx"

Definition at line 157 of file SinCosLUT.i.

◆ RDI

#define RDI   "edi"

Definition at line 158 of file SinCosLUT.i.

◆ PAX

#define PAX   "%%"RAX

Definition at line 160 of file SinCosLUT.i.

◆ PDX

#define PDX   "%%"RDX

Definition at line 161 of file SinCosLUT.i.

◆ PDI

#define PDI   "%%"RDI

Definition at line 162 of file SinCosLUT.i.

◆ SINCOS_FLD

#define SINCOS_FLD   "fldl"

Definition at line 167 of file SinCosLUT.i.

◆ SINCOS_TRIM_P0A

#define SINCOS_TRIM_P0A (   alpha)
Value:
SINCOS_FLD " %[" #alpha "] \n\t" /* st: alpha */ \
"fistpll %[tmp] \n\t" /* tmp=(INT8)(round((alpha)) */ \
"fld1 \n\t" /* st: 1.0 */ \
"fildll %[tmp] \n\t" /* st: 1.0;(round((alpha))*/
#define SINCOS_FLD
Definition: SinCosLUT.i:167
double alpha

Definition at line 171 of file SinCosLUT.i.

◆ SINCOS_TRIM_P0B

#define SINCOS_TRIM_P0B (   alpha)
Value:
"fsubrp %%st,%%st(1) \n\t" /* st: 1.0 -round(alpha) */ \
"faddl %[" #alpha "] \n\t" /* st: alpha -round(alpha)+1.0*/ \
"faddl %[sincos_adds] \n\t" /* ..continue lin. sin/cos as lebow */ \
"fstpl %[tmp] \n\t"

Definition at line 177 of file SinCosLUT.i.

◆ SINCOS_P0

#define SINCOS_P0 (   alpha)
Value:
SINCOS_FLD " %[" #alpha "] \n\t" /*st:alpha */ \
"faddl %[sincos_adds] \n\t" /*st:alpha+A */ \
"fstpl %[tmp] \n\t"

Definition at line 184 of file SinCosLUT.i.

◆ SINCOS_P1

#define SINCOS_P1
Value:
"mov %[tmp],"PAX" \n\t" /* alpha +A ->eax (ix)*/ \
"mov "PAX","PDX" \n\t" /* n = ix & SINCOS_MASK2 */ \
"and $0x3fff,"PAX" \n\t"
#define PAX
Definition: SinCosLUT.i:160
#define PDX
Definition: SinCosLUT.i:161

Definition at line 189 of file SinCosLUT.i.

◆ SINCOS_P2

#define SINCOS_P2
Value:
"mov "PAX",%[tmp] \n\t" \
"mov %[scd], "PAX" \n\t" \
"and $0xffffff,"PDX" \n\t" /* i = ix & SINCOS_MASK1;*/

Definition at line 193 of file SinCosLUT.i.

◆ SINCOS_P3

#define SINCOS_P3
Value:
"fildl %[tmp] \n\t" \
"sar $0xe,"PDX" \n\t" /* i = i >> SINCOS_SHIFT;*/

Definition at line 197 of file SinCosLUT.i.

◆ SINCOS_P4

#define SINCOS_P4
Value:
"fld %%st \n\t" /* st: n; n; */ \
"fmuls ("PAX","PDX",4) \n\t" \
"mov %[scb], "PDI" \n\t"
#define PDI
Definition: SinCosLUT.i:162

Definition at line 200 of file SinCosLUT.i.

◆ SINCOS_P4A

#define SINCOS_P4A
Value:
/* P4 w/o doubling, used when P6 is not */ \
"fmuls ("PAX","PDX",4) \n\t" \
"mov %[scb], "PDI" \n\t"

Definition at line 204 of file SinCosLUT.i.

◆ SINCOS_P5

#define SINCOS_P5 (   sin)
Value:
"fadds ("PDI","PDX",4) \n\t" /* st: sincosLUTbase[i]+n*sincosLUTdiff[i]; n*/ \
"add $0x100,"PDX" \n\t" /* edx+=SINCOS_LUT_RES/4*/ \
"fstps %[" #sin "] \n\t" /* (*sin)=sincosLUTbase[i]+n*sincosLUTdiff[i]*/

Definition at line 207 of file SinCosLUT.i.

◆ SINCOS_P6

#define SINCOS_P6 (   cos)
Value:
"fmuls ("PAX","PDX",4) \n\t" \
"fadds ("PDI","PDX",4) \n\t" \
"fstps %[" #cos "] \n\t" /* (*cos)=cosbase[i]+n*cosdiff[i];*/

Definition at line 211 of file SinCosLUT.i.

◆ SINCOS_REGISTERS

#define SINCOS_REGISTERS   RAX,RDX,RDI,"st","st(1)","st(2)","cc"

Definition at line 216 of file SinCosLUT.i.

Variable Documentation

◆ sincosLUTbase

UNUSED REAL4 sincosLUTbase[SINCOS_LUT_RES+SINCOS_LUT_RES/4]
extern

Definition at line 40 of file SinCosLUT.c.

◆ sincosLUTdiff

UNUSED REAL4 sincosLUTdiff[SINCOS_LUT_RES+SINCOS_LUT_RES/4]
extern

Definition at line 41 of file SinCosLUT.c.

◆ cosLUTbase

const UNUSED REAL4* cosLUTbase = sincosLUTbase + (SINCOS_LUT_RES/4)
static

Definition at line 107 of file SinCosLUT.i.

◆ cosLUTdiff

const UNUSED REAL4* cosLUTdiff = sincosLUTdiff + (SINCOS_LUT_RES/4)
static

Definition at line 108 of file SinCosLUT.i.

◆ sincosI

UNUSED INT4 sincosI
static

Definition at line 112 of file SinCosLUT.i.

◆ sincosN

UNUSED INT4 sincosN
static

Definition at line 112 of file SinCosLUT.i.

◆ asreal

REAL8 asreal

Definition at line 116 of file SinCosLUT.i.

◆ intval

INT4 intval

Definition at line 122 of file SinCosLUT.i.

◆ dummy

INT4 dummy

Definition at line 123 of file SinCosLUT.i.

◆ 

struct { ... } as2int

◆ 

UNUSED { ... } sincosUX