1577 lines
43 KiB
Plaintext
1577 lines
43 KiB
Plaintext
|*
|
|
|* Single Precision Sin, Cos, Tan, Sincos
|
|
|*
|
|
routine xs.sin w01000000000 las ssub
|
|
; las csla; reg; ; ; ptr5!c_spio4
|
|
; ; ; ; rcssp ptr5; lpreg!0
|
|
call strig; lbsf scmpm csla; reg; ; ;
|
|
routine xs.cos w01000000010 las ssub
|
|
; las csla; reg; ; ; ptr5!c_spio4
|
|
; ; ; ; rcssp ptr5; lpreg!1
|
|
call strig; lbsf scmpm csla; reg; ; ;
|
|
#ifdef STAN
|
|
routine xs.tan w01000000100 las ssub
|
|
; las csla; reg; ; ; ptr5!c_spio4
|
|
; ; ; ; rcssp ptr5; lpreg!2
|
|
call strig; lbsf scmpm csla; reg; ; ;
|
|
#endif
|
|
routine xs.sincos w01001100000 las ssub
|
|
; las csla; reg; ; ; ptr5!c_spio4
|
|
; ; ; ; rcssp ptr5; lpreg!3
|
|
call strig; lbsf scmpm csla; reg; ; ;
|
|
|
|
|
|
|*
|
|
|* Double Precision Sin, Cos, Tan, Sincos
|
|
|*
|
|
routine xd.sin w01000000001 las ssub
|
|
; lam csla; reg; recclk; rcslsw ptr2; lpreg!0
|
|
; lal csla; reg; ; ; ptr5!c_dpio4
|
|
call dtrig; ; ; ; rcsmsw ptr5;
|
|
routine xd.cos w01000000011 las ssub
|
|
; lam csla; reg; recclk; rcslsw ptr2; lpreg!1
|
|
; lal csla; reg; ; ; ptr5!c_dpio4
|
|
call dtrig; ; ; ; rcsmsw ptr5;
|
|
#ifdef DTAN
|
|
routine xd.tan w01000000101 las ssub
|
|
; lam csla; reg; recclk; rcslsw ptr2; lpreg!2
|
|
; lal csla; reg; ; ; ptr5!c_dpio4
|
|
call dtrig; ; ; ; rcsmsw ptr5;
|
|
#endif
|
|
routine xd.sincos w01001100001 las ssub
|
|
; lam csla; reg; recclk; rcslsw ptr2; lpreg!3
|
|
; lal csla; reg; ; ; ptr5!c_dpio4
|
|
call dtrig; ; ; ; rcsmsw ptr5;
|
|
|
|
|
|
|*
|
|
|* Single Precision Sin, Cos, Sincos
|
|
|*
|
|
|* enter with:
|
|
|* comparison of x and spio4 just starting in ALU
|
|
|* lpreg is 0 for sin, 1 for cos, 2 for tan, 3 for sincos
|
|
|*
|
|
strig:
|
|
; ; ; recclk; ;
|
|
; ; ; ; ; ptr5!c_sthreshold
|
|
; ; ; ; rcssp ptr5; ptr5!c_dSCRATCH_0
|
|
; lbsf scmpm csla; reg; ; ptr5;
|
|
; csuxa usp; ; recoe; ramwe rcssp ptr5;
|
|
; ; ; recoe; ramwe ptr5; ptr5!c_spi3o4
|
|
jgt strig.1; woea; ; recclk; rcssp ptr1;
|
|
; ; ; recclk; rcssp ptr5; ptr5!c_dSCRATCH_4
|
|
|* save x in SCRATCH_4 for restoration
|
|
; csuxa usp; ; ; ptr5;
|
|
; csuxa usp; ; recoe; ramwe rcssp ptr5;
|
|
jle strig.2; woea; ; recoe; ramwe ptr5;
|
|
jwerr soberr; woea; ; ; ;
|
|
call strig.ex0; ; ; ; ;
|
|
strig.a:
|
|
jloop0 ssinapprox1;; ; ; ; lpreg-
|
|
jloop0 scosapprox1;; ; ; ; lpreg-
|
|
jloop0 stanapprox1;; ; ; ; lpreg-
|
|
call scosapprox;; ; ; ;
|
|
call swrt4; ; ; ; ;
|
|
call ssinapprox;; dtor; ; ramwe ptr4;
|
|
call swrt1.4; ; ; ; ;
|
|
|
|
swrt1.4:
|
|
|* this is for sincos in case we get an error and have to restore reg4
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr1;
|
|
; woea; dtor; ; ramwe rcssp ptr1;
|
|
call sreturninexact.4;; dtor; ; ramwe ptr1;
|
|
|
|
swrt4:
|
|
| for sincos we need to save ptr4 for possible later restoration
|
|
; ; ; recclk; rcssp ptr4; ptr5!c_dSCRATCH_11
|
|
; ; ; recclk; ptr5;
|
|
; ; ; recoe; ramwe rcssp ptr5;
|
|
; csuxa usp; ; recoe; ramwe ptr5;
|
|
; ; ; ; ptr4;
|
|
rtn; woea; dtor; ; ramwe rcssp ptr4;
|
|
|
|
|
|
strig.2:
|
|
|* abs(x) <= threshhold
|
|
jloop0 ssin0; ; ; ; ; lpreg-
|
|
jloop0 scos0; ; ; ; ; lpreg-
|
|
; ; ; ; ; lpreg-
|
|
stan0:
|
|
ssin0:
|
|
; lf scmp0 csla; ; recclk; rcssp ptr2;
|
|
; ; ; recclk; ptr1;
|
|
; ; ; recoe; ramwe rcssp ptr1;
|
|
jloop0 ssincos0;; ; recoe; ramwe ptr1;
|
|
call wait1; csuxa usp; ; ; ;
|
|
jeq sreturnzerostat;woea; ; ; ;
|
|
call sreturninexact.4;; ; ; ;
|
|
|
|
ssincos0:
|
|
| for sincos we need to save ptr4 for possible later restoration
|
|
; lf scmp0 csla; ; recclk; rcssp ptr4; ptr5!c_dSCRATCH_11
|
|
; ; ; recclk; ptr5;
|
|
; ; ; recoe; ramwe rcssp ptr5;
|
|
; ; ; recoe; ramwe ptr5; ptr5!sone
|
|
; csuxa usp; ; recclk; rcssp ptr5;
|
|
; ; ; recclk; ptr4;
|
|
jeq sreturnzerostat;woea; ; recoe; ramwe rcssp ptr4;
|
|
call sreturninexact.4;; ; recoe; ramwe ptr4;
|
|
|
|
scos0:
|
|
; lf scmp0 csla; ; ; ; ptr5!sone
|
|
; ; ; recclk; rcssp ptr5;
|
|
; ; ; recclk; ptr1;
|
|
; ; ; recoe; ramwe rcssp ptr1;
|
|
call wait1; csuxa usp; ; recoe; ramwe ptr1;
|
|
jeq sreturnexact;woea; ; ; ;
|
|
call sreturninexact;; ; ; ;
|
|
|
|
strig.1:
|
|
|* pi/4 < abs(x)
|
|
call wait1; lbsf scmpm csla; reg; ; ;
|
|
; ; ; ; ; ptr5!c_spi5o4
|
|
; ; ; ; rcssp ptr5; ptr5!c_dSCRATCH_4
|
|
|* save x in SCRATCH_4 for restoration
|
|
; lbs csla; reg; ; ptr5;
|
|
; lf scmp0 csla csuxa usp;; recoe; ramwe rcssp ptr5;
|
|
; ; ; recoe; ramwe ptr5;
|
|
jgt strig.3; woea; ; ; ;
|
|
; ; ; ; ;
|
|
|* pi/4 < abs(x) <= 3*pi/4
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ; ptr5!c_dpio2a
|
|
jge strig.11; woea; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
|
|
|* -pi/4 > x > -3*pi/4
|
|
|* x = (dpio2b + (dx + dpio2a))
|
|
|* ex = (pio2b - (dble(x) - (dx + dpio2a)))
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
call wait1; lblf dadd csla; reg; ; ;
|
|
; ; ; ; ; ptr5!c_dpio2b
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
call wait3; lblf dadd csla csuxa ulsw;; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
| *start dble(x) - (dx+PIO2A)
|
|
; las csla csuxa usp; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lf dsub csla; ; ; ptr5;
|
|
| *save x in c_dSCRATCH_0
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
call wait1; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dpio2b
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
| *start PIO2B - (dble(x) - (dx+PIO2A))
|
|
call wait3; lalf dsub csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
; csuxa usp; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
strig.e:
|
|
| *Note that here (and elsewhere) we can enter and generate a
|
|
| *write enable without a chip select
|
|
jloop0 scosnapprox1;; dtor; ; ramwe ptr5; lpreg-
|
|
jloop0 ssinapprox1;; ; ; ; lpreg-
|
|
jloop0 scotnapprox1;; ; ; ; lpreg-
|
|
|
|
|* sincos
|
|
call ssinapprox;; ; ; ;
|
|
call swrt4; ; ; ; ;
|
|
call scosapprox;; dtor; ; ramwe ptr4;
|
|
call snegx; ; ; ; ;
|
|
call swrt1.4; ; ; ; ;
|
|
|
|
strig.11:
|
|
|* pi/4 < x < 3*pi/4
|
|
|* x = TOREAL(-PIO2B - (PIO2A - dx))
|
|
|* ex = TOREAL(-PIO2B - (dble(x) + (PIO2A - dx)))
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_0
|
|
; lal csla; reg; ; rcssp ptr5;
|
|
; lbs csla; reg; ; ;
|
|
call wait3; lf dsub csla; ; ; ;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpio2b
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
call wait3; lalf dsub csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
; las csla csuxa usp; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lf dadd csla; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
call wait1; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpio2b
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
call wait3; lalf dsub csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
; csuxa usp; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
strig.c:
|
|
jloop0 scosapprox1;; dtor; ; ramwe ptr5; lpreg-
|
|
jloop0 ssinnapprox1;; ; ; ; lpreg-
|
|
jloop0 scotnapprox1;; ; ; ; lpreg-
|
|
|
|
|* sincos
|
|
call ssinapprox;; ; ; ;
|
|
call snegx; ; ; ; ;
|
|
call swrt4; ; ; ; ;
|
|
call scosapprox;; dtor; ; ramwe ptr4;
|
|
call swrt1.4; ; ; ; ;
|
|
|
|
strig.3:
|
|
|* abs(x) > 3*pi/4
|
|
call wait1; lf scmpm csla; ; ; ;
|
|
; ; ; ; ; ptr5!c_stwo19pi
|
|
; ; ; ; rcssp ptr5;
|
|
; lbsf scmp0 csla; reg; ; ;
|
|
call wait1; csuxa usp; ; ; ;
|
|
jgt strig.4; woea; ; ; ;
|
|
|
|
|* 3*pi/4 < abs(x) <= 5*pi/4
|
|
|* x = TOREAL(PIB + (dx + PIA))
|
|
|* ex = TOREAL(PIB - (dble(x) - (dx + PIA)))
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ; ptr5!c_dpia
|
|
jge strig.31; woea; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
|
|
|* -3*pi/4 > x > -5*pi/4
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
call wait1; lblf dadd csla; reg; ; ;
|
|
; ; ; ; ; ptr5!c_dpib
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
call wait3; lblf dadd csla csuxa ulsw;; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
| *start dble(x) - (dx+PIA)
|
|
; las csla csuxa usp; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lf dsub csla; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
call wait1; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dpib
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
| *start PIB - (dble(x) - (dx+PIA))
|
|
; lalf dsub csla; reg; ; ;
|
|
strig.32:
|
|
call wait2; ; ; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
; csuxa usp; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
strig.b:
|
|
strig.d:
|
|
jloop0 ssinnapprox1;; dtor; ; ramwe ptr5; lpreg-
|
|
jloop0 scosnapprox1;; ; ; ; lpreg-
|
|
jloop0 stanapprox1;; ; ; ; lpreg-
|
|
|
|
|* sincos
|
|
call scosapprox;; ; ; ;
|
|
call snegx; ; ; ; ;
|
|
call swrt4; ; ; ; ;
|
|
call ssinapprox;; dtor; ; ramwe ptr4;
|
|
call snegx; ; ; ; ;
|
|
call swrt1.4; ; ; ; ;
|
|
|
|
strig.31:
|
|
|* 3*pi/4 < x < 5*pi/4
|
|
|* x = TOREAL(-PIB + (dx - PIA))
|
|
|* ex = TOREAL(-PIB - (dble(x) - (dx - PIA)))
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
call wait3; lblf dsub csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpib
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
call wait3; lalf dadd csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
; las csla csuxa usp; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lf dsub csla; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
call wait1; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpib
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
jmp strig.32; lam csla; reg; ; rcslsw ptr5;
|
|
; lalf dsub csla; reg; ; ;
|
|
|
|
strig.4:
|
|
|* abs(x) > 5*pi/4
|
|
call wait3; lf scmpm csla; ; ; ;
|
|
call wait1; csuxa usp; ; ; ;
|
|
jgt soberr; woea; ; ; ;
|
|
|* 5*pi/4 < abs(x) <= pi * 2**19
|
|
call ckmode; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_stwoopi
|
|
; lmode3.0 0x0 csla; ; ; rcssp ptr5; ptr5!c_dSCRATCH_0
|
|
; las cslm; reg; ; rcssp ptr5;
|
|
call wait3; lbsf smul cslm; reg; ; ;
|
|
call wait1; csuxm usp; ; ; ;
|
|
call wait3; lasf scvtint csla woem; ; ; ;
|
|
; lalf sfloat csla csuxa ulsw;; ; ;
|
|
; ; ; ; ; ptr5!c_sfourth
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; ;
|
|
; lbs csla csuxa usp; ; ; ; ptr5!c_dSCRATCH_2
|
|
; ; ; ; ptr5;
|
|
; lbsf smul cslm woea; dtor; ; ramwe rcssp ptr5;
|
|
call wait2; ; dtor; ; ramwe ptr5;
|
|
call wait1; csuxm usp; ; ; ;
|
|
call wait3; lasf scvtint csla woem; ; ; ;
|
|
; lalf sfloat csla csuxa ulsw;; ; ;
|
|
; ; ; ; ; ptr5!sfour
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; ;
|
|
call wait1; csuxa usp; ; ; ;
|
|
; lbsf smul cslm woea; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
call wait1; csuxm usp; ; ; ;
|
|
call wait3; lbsf ssub csla woem; ; ; ;
|
|
; csuxa usp; ; ; ; ptr5!c_dSCRATCH_3
|
|
; ; ; ; ptr5;
|
|
|* save qrem
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
; ; dtor; ; ramwe ptr5; ptr5!c_dSCRATCH_2
|
|
; lmode3.0 0x2 csla; ; ; rcssp ptr5; ptr5!c_dpio2a
|
|
; las cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
call wait3; lblf dmul cslm; reg; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla csuxm umsw; reg; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dsub csla woem; ; ; ; ptr5!c_dpio2b
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
; lblf dmul cslm; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_5
|
|
; lal csla csuxa ulsw; ; ; ptr5;
|
|
| *store dx - q * pio2a
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; csuxm umsw; ; ; ; ptr5!c_dSCRATCH_6
|
|
; csuxm ulsw; ; ; ptr5;
|
|
| *store q * pio2b
|
|
; lbm csla woem; dtor; ; ramwe rcsmsw ptr5;
|
|
; lblf dsub csla woem; dtor; ; ramwe rcslsw ptr5;
|
|
call wait2; ; dtor; ; ramwe ptr5;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait2; lalf dcvts csla csuxa ulsw;; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_5
|
|
; lbs csla csuxa usp; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lalf dsub csla; reg; ; ; ptr5!c_dSCRATCH_0
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ptr5;
|
|
| *store x
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_6
|
|
; lal csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
call wait3; lblf dsub csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lalf dcvts csla csuxa ulsw;; ; ;
|
|
; csuxa usp; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; ptr5;
|
|
| *store ex
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
; ; dtor; ; ramwe ptr5; ptr5!c_dSCRATCH_3
|
|
; ; ; ; rcssp ptr5; ptr5!sone
|
|
; lasf scmp0 csla; reg; ; rcssp ptr5;
|
|
call wait2; lbs csla; reg; ; ;
|
|
; lf sadd csla csuxa usp; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
jlt strig.41; woea; ; ; ;
|
|
jeq strig.a; woea; ; ; ;
|
|
; ; ; ; ;
|
|
|* qrem > 0
|
|
call wait3; lf ssub csla; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ;
|
|
jeq strig.c; woea; ; ; ;
|
|
call strig.b; ; ; ; ;
|
|
|
|
strig.41:
|
|
call wait1; csuxa usp; ; ; ;
|
|
jeq strig.e; woea; ; ; ;
|
|
call strig.d; ; ; ; ;
|
|
|
|
snegx:
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
rtn; lasf sneg csla csuxa usp;; ; ;
|
|
|
|
|* set "ex" to 0 for call to approx routines
|
|
strig.ex0:
|
|
; ; ; ; ; ptr5!szero
|
|
; ; ; recclk; rcssp ptr5; ptr5!c_dSCRATCH_1
|
|
; ; ; recclk; ptr5;
|
|
; ; ; recoe; ramwe rcssp ptr5;
|
|
rtn; ; ; recoe; ramwe ptr5;
|
|
|
|
|*
|
|
|* Single Precision Cos Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
scosapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_scos2
|
|
; las cslm csuxm usp; ; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ; lpreg!2
|
|
scos.app.lp:
|
|
; ; ; ; ; ptr5-
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla csuxm usp; reg; ; ; lpreg-
|
|
; ; ; ; ;
|
|
; lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
jloop scos.app.lp;; ; ; ;
|
|
; lbsf smul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; lbsf smul cslm csuxm usp;; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!shalf
|
|
; ; ; ; rcssp ptr5;
|
|
| *start z * .5
|
|
; lbsf smul cslm; reg; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
| * put ca into a reg of ALU
|
|
; las csla woem; ; ; ;
|
|
; ; ; ; rcssp ptr5; ptr5!c_dSCRATCH_1
|
|
; las cslm; reg; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ;
|
|
; csuxm usp; ; ; ; ptr5!c_dSCRATCH_2
|
|
; ; ; ; ptr5;
|
|
| *hold z*HALF in c_dSCRATCH_2 for now
|
|
; woem; dtor; ; ramwe rcssp ptr5;
|
|
; csuxm usp; dtor; ; ramwe ptr5;
|
|
; ; ; ; ;
|
|
| *start ca - ex*x
|
|
; lbsf ssub csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
; ; ; ; rcssp ptr5; ptr5!c_scosthresh
|
|
; las csla; reg; ; rcssp ptr5;
|
|
; lbsf scmp csla; reg; ; ;
|
|
; csuxa usp; ; ; ; ptr5!c_dSCRATCH_3
|
|
; ; ; ; ptr5;
|
|
| *hold ca in c_dSCRATCH_3 for now
|
|
; woea; dtor; ; ramwe rcssp ptr5;
|
|
; csuxa usp; dtor; ; ramwe ptr5;
|
|
; ; ; ; ; ptr5!shalf
|
|
jlt scos.1; woea; ; ; ;
|
|
; ; ; ; rcssp ptr5; ptr5!c_dSCRATCH_3
|
|
|
|
|* z >= scosthresh
|
|
; lbsf ssub csla; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; las csla csuxa usp; ; ; rcssp ptr5;
|
|
; lbsf ssub csla; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!shalf
|
|
; lbs csla csuxa usp; ; ; rcssp ptr5;
|
|
rtn; lasf ssub csla; reg; ; ;
|
|
|
|
|
|
scos.1:
|
|
|* z < scosthresh
|
|
; ; ; ; rcssp ptr5;
|
|
; lbsf ssub csla; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!sone
|
|
; lbs csla csuxa usp; ; ; rcssp ptr5;
|
|
rtn; lasf ssub csla; reg; ; ;
|
|
|
|
|
|
|*
|
|
|* Single Precision Sin Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
ssinapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_ssin2
|
|
| *put z = x*x into a reg of MUL
|
|
; las cslm csuxm usp; ; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ; lpreg!2
|
|
ssin.app.lp:
|
|
; ; ; ; ; ptr5-
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla csuxm usp; reg; ; ; lpreg-
|
|
; ; ; ; ;
|
|
; lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
jloop ssin.app.lp;; ; ; ;
|
|
; lbsf smul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; ;
|
|
; lbsf smul cslm csuxm usp;; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ;
|
|
; lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
rtn; lbsf sadd csla csuxa usp;; ; ;
|
|
|
|
#ifdef STAN
|
|
|*
|
|
|* Single Precision Tan Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
stanapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_stan6
|
|
; las cslm csuxm usp; ; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ; lpreg!6
|
|
stan.app.lp:
|
|
; ; ; ; ; ptr5-
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla csuxm usp; reg; ; ; lpreg-
|
|
; ; ; ; ;
|
|
; lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
jloop stan.app.lp;; ; ; ;
|
|
; lbsf smul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; ;
|
|
; lbsf smul cslm csuxm usp;; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ;
|
|
; lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
rtn; lbsf sadd csla csuxa usp;; ; ;
|
|
|
|
|*
|
|
|* Single Precision Negative Cot Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
scotnapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; rcssp ptr5;
|
|
; lbsf smul cslm; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_stan6
|
|
; las cslm csuxm usp; ; ; rcssp ptr5; ptr5-
|
|
; lbsf smul cslm; reg; ; ; lpreg!6
|
|
scot.app.lp:
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr5; ptr5-
|
|
; las csla csuxm usp; reg; ; ; lpreg-
|
|
; ; ; ; ;
|
|
; lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
jloop scot.app.lp;; ; ; ;
|
|
; lbsf smul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcssp ptr5;
|
|
; las cslm; reg; ; ;
|
|
; lbsf smul cslm csuxm usp;; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
; csuxm usp; ; ; ;
|
|
; ; ; ; ;
|
|
; lbsf sadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
; lbsf sadd csla csuxa usp;; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!smone
|
|
; lbs csla csuxa usp; ; ; rcssp ptr5;
|
|
rtn; lasf sdiv csla; reg; ; ;
|
|
#endif
|
|
|
|
|
|
ssinapprox1:
|
|
call ssinapprox;; ; ; ;
|
|
call salu.inx2; ; ; ; ;
|
|
|
|
ssinnapprox1:
|
|
call ssinapprox;; ; ; ;
|
|
call snegx; ; ; ; ;
|
|
call salu.inx2; ; ; ; ;
|
|
|
|
scosapprox1:
|
|
call scosapprox;; ; ; ;
|
|
call salu.inx2; ; ; ; ;
|
|
|
|
scosnapprox1:
|
|
call scosapprox;; ; ; ;
|
|
call snegx; ; ; ; ;
|
|
call salu.inx2; ; ; ; ;
|
|
|
|
#ifdef STAN
|
|
stanapprox1:
|
|
call stanapprox;; ; ; ;
|
|
call salu.inx2; ; ; ; ;
|
|
|
|
scotnapprox1:
|
|
call scotnapprox;; ; ; ;
|
|
call salu.inx2; ; ; ; ;
|
|
#else
|
|
stanapprox1:
|
|
scotnapprox1:
|
|
call invalid; ; ; ; ;
|
|
#endif
|
|
|
|
ckmode:
|
|
|* make sure rounding mode is the default (2)
|
|
; ; ; ; ; ptr5!c_dmode
|
|
; ; ; ; rcssp ptr5; ptr5!c_dmode_cor
|
|
; las csla; reg; ; rcssp ptr5;
|
|
; lbsf scmp csla; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa usp; ; ; ;
|
|
; ; ; ; ;
|
|
jne oberr; woea; ; ; ;
|
|
rtn; ; ; ; ;
|
|
|
|
|*
|
|
|* Double Precision Sin, Cos, Sincos
|
|
|*
|
|
|* enter with:
|
|
|* reading in of dpio4 ready
|
|
|* lpreg is 0 for sin, 1 for cos, 2 for tan, 3 for sincos
|
|
|*
|
|
dtrig:
|
|
; lbm csla; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_0
|
|
; lblf dcmpm csla; reg; ; ptr5;
|
|
; ; ; recoe; ramwe rcsmsw ptr5;
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
; ; ; recoe; ramwe rcslsw ptr5;
|
|
; csuxa umsw; ; recoe; ramwe ptr5;
|
|
; ; ; recclk; rcsmsw ptr1; ptr5!c_dthreshold
|
|
jgt dtrig.1; woea; ; recclk; rcslsw ptr1;
|
|
; ; ; ; rcsmsw ptr5;
|
|
|* abs(x) < pi/4
|
|
; lbm csla; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_4
|
|
; lblf dcmpm csla; reg; ; ptr5;
|
|
; ; ; recoe; ramwe rcsmsw ptr5;
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
; ; ; recoe; ramwe rcslsw ptr5;
|
|
; csuxa umsw; ; recoe; ramwe ptr5;
|
|
; csuxa ulsw; ; ; ;
|
|
jle dtrig.2; woea; ; ; ;
|
|
jwerr doberr; woea; ; ; ;
|
|
call dtrig.ex0; ; ; ; ;
|
|
dtrig.a:
|
|
jloop0 dsinapprox1;; ; ; ; lpreg-
|
|
jloop0 dcosapprox1;; ; ; ; lpreg-
|
|
jloop0 dtanapprox1;; ; ; ; lpreg-
|
|
call dcosapprox;; ; ; ;
|
|
call dwrt4; ; ; ; ;
|
|
call dsinapprox;; dtor; ; ramwe ptr4;
|
|
call dwrt1.4; ; ; ; ;
|
|
|
|
dwrt4:
|
|
| for sincos we need to save ptr4 for possible later restoration
|
|
; ; ; recclk; rcsmsw ptr4;
|
|
; ; ; recclk; rcslsw ptr4; ptr5!c_dSCRATCH_11
|
|
; ; ; ; ptr5;
|
|
; ; ; recoe; ramwe rcsmsw ptr5;
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
; ; ; recoe; ramwe rcslsw ptr5;
|
|
; csuxa umsw; ; recoe; ramwe ptr5;
|
|
; csuxa ulsw; ; ; ptr4;
|
|
; woea; dtor; ; ramwe rcsmsw ptr4;
|
|
rtn; woea; dtor; ; ramwe rcslsw ptr4;
|
|
|
|
|* This is called for sincos (it knows we have to restore ptr4 if error)
|
|
dwrt1.4:
|
|
call wait1; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ptr1;
|
|
; woea; dtor; ; ramwe rcsmsw ptr1;
|
|
; woea; dtor; ; ramwe rcslsw ptr1;
|
|
call dreturninexact.4;; dtor; ; ramwe ptr1;
|
|
|
|
dtrig.2:
|
|
|* abs(x) <= threshold
|
|
jloop0 dsin0; ; ; ; ; lpreg-
|
|
jloop0 dcos0; ; ; ; ; lpreg-
|
|
; ; ; ; ; lpreg-
|
|
dsin0:
|
|
dtan0:
|
|
; lf dcmp0 csla; ; recclk; rcsmsw ptr2;
|
|
; ; ; recclk; rcslsw ptr2;
|
|
; ; ; ; ptr1;
|
|
; ; ; recoe; ramwe rcsmsw ptr1;
|
|
jloop0 dsincos0;csuxa umsw; ; recoe recclk;ramwe ptr1;
|
|
; ; ; recoe; ramwe rcslsw ptr1;
|
|
jeq dreturnzerostat;woea; ; recoe; ramwe ptr1;
|
|
call dreturninexact.4;; ; ; ;
|
|
|
|
dsincos0:
|
|
| finish up copy that was taking place
|
|
; ; ; recoe; ramwe ptr1;
|
|
| for sincos we need to save ptr4 for possible later restoration
|
|
; ; ; recclk; rcsmsw ptr4;
|
|
; ; ; recclk; rcslsw ptr4; ptr5!c_dSCRATCH_11
|
|
; ; ; ; ptr5;
|
|
; ; ; recoe; ramwe rcsmsw ptr5;
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
; ; ; recoe; ramwe rcslsw ptr5;
|
|
; lf dcmp0 csla; ; recoe; ramwe ptr5; ptr5!done
|
|
; ; ; recclk; rcsmsw ptr5;
|
|
; ; ; recclk; rcslsw ptr5;
|
|
; ; ; ; ptr4;
|
|
; csuxa umsw; ; recoe; ramwe rcsmsw ptr4;
|
|
; ; ; recoe recclk;ramwe ptr4;
|
|
jeq dreturnzerostat;woea; ; recoe; ramwe rcslsw ptr4;
|
|
call dreturninexact.4;; ; recoe; ramwe ptr4;
|
|
|
|
dcos0:
|
|
; lf dcmp0 csla; ; ; ; ptr5!done
|
|
; ; ; recclk; rcsmsw ptr5;
|
|
; ; ; recclk; rcslsw ptr5;
|
|
; ; ; ; ptr1;
|
|
; csuxa umsw; ; recoe; ramwe rcsmsw ptr1;
|
|
; ; ; recoe recclk;ramwe ptr1;
|
|
jeq dreturnexact;woea; ; recoe; ramwe rcslsw ptr1;
|
|
call dreturninexact;; ; recoe; ramwe ptr1;
|
|
|
|
dtrig.1:
|
|
|* abs(x) > pi/4
|
|
; ; ; recclk; rcsmsw ptr1; ptr5!c_dpi3o4
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5; ptr5!c_dpi5o4
|
|
call wait2; lblf dcmpm csla; reg; recclk; rcslsw ptr1;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_4
|
|
; lbl csla; reg; ; ptr5;
|
|
; lf dcmp0 csla csuxa umsw;; recoe; ramwe rcsmsw ptr5;
|
|
; ; ; recoe recclk;ramwe ptr5;
|
|
jgt dtrig.3; woea; ; recoe; ramwe rcslsw ptr5;
|
|
; ; ; recoe; ramwe ptr5; ptr5!c_dtwo19pi
|
|
|* pi/4 < abs(x) <= 3*pi/4
|
|
; csuxa umsw; ; ; ;
|
|
; ; ; ; ; ptr5!c_dpio2a
|
|
jge dtrig.11; woea; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
|
|
|* -pi/4 > x > -3*pi/4
|
|
|* x = (dpio2b + (dx + dpio2a))
|
|
|* ex = (dpio2b - (x - (dx + dpio2a)))
|
|
; lbm csla; reg; ; rcslsw ptr5; ptr5!c_dpio2b
|
|
call wait2; lblf dadd csla; reg; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
call wait3; lblf dadd csla csuxa ulsw;; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lalf dsub csla csuxa ulsw;; ; ptr5;
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dpio2b
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
call wait3; lalf dsub csla; reg; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_1
|
|
; csuxa ulsw; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
dtrig.e:
|
|
jloop0 dcosnapprox1;; ; ; ; lpreg-
|
|
jloop0 dsinapprox1;; ; ; ; lpreg-
|
|
jloop0 dcotnapprox1;; ; ; ; lpreg-
|
|
|
|
|* sincos
|
|
call dsinapprox;; ; ; ;
|
|
call dwrt4; ; ; ; ;
|
|
call dcosapprox;; dtor; ; ramwe ptr4;
|
|
call dnegx; ; ; ; ;
|
|
call dwrt1.4; ; ; ; ;
|
|
|
|
dtrig.11:
|
|
|* pi/4 < x < 3*pi/4
|
|
|* x = (-dpio2b - (dpio2a - dx))
|
|
|* ex = (-dpio2b - (dble(x) + (dpio2a - dx)))
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_0
|
|
; lal csla; reg; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
call wait3; lblf dsub csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpio2b
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
call wait3; lalf dsub csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lalf dadd csla csuxa ulsw;; ; ptr5;
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpio2b
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
call wait3; lalf dsub csla; reg; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_1
|
|
; csuxa ulsw; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
dtrig.c:
|
|
jloop0 dcosapprox1;; dtor; ; ramwe ptr5; lpreg-
|
|
jloop0 dsinnapprox1;; ; ; ; lpreg-
|
|
jloop0 dcotnapprox1;; ; ; ; lpreg-
|
|
|
|
|* sincos
|
|
call dsinapprox;; ; ; ;
|
|
call dnegx; ; ; ; ;
|
|
call dwrt4; ; ; ; ;
|
|
call dcosapprox;; dtor; ; ramwe ptr4;
|
|
call dwrt1.4; ; ; ; ;
|
|
|
|
dtrig.3:
|
|
|* abs(x) > 3*pi/4
|
|
; lf dcmpm csla; ; ; ;
|
|
call wait1; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
; lblf dcmp0 csla; reg; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; ; ; ; ;
|
|
jgt dtrig.4; woea; ; ; ;
|
|
; ; ; ; ; ptr5!c_dpia
|
|
|* 3*pi/4 < abs(x) <= 5*pi/4
|
|
|* x = (dpib + (dx + dpia))
|
|
|* ex = (dpib - (x - (dx + dpia)))
|
|
call wait1; csuxa umsw; ; ; ;
|
|
jge dtrig.31; woea; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
|
|
|* -3*pi/4 > x > -5*pi/4
|
|
; lbm csla; reg; ; rcslsw ptr5; ptr5!c_dpib
|
|
call wait2; lblf dadd csla; reg; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
call wait3; lblf dadd csla csuxa ulsw;; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lalf dsub csla csuxa ulsw;; ; ptr5;
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dpib
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lalf dsub csla; reg; ; ;
|
|
dtrig.32:
|
|
call wait2; ; ; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_1
|
|
; csuxa ulsw; ; ; ptr5;
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
dtrig.b:
|
|
dtrig.d:
|
|
jloop0 dsinnapprox1;; dtor; ; ramwe ptr5; lpreg-
|
|
jloop0 dcosnapprox1;; ; ; ; lpreg-
|
|
jloop0 dtanapprox1;; ; ; ; lpreg-
|
|
|
|
|* sincos
|
|
call dcosapprox;; ; ; ;
|
|
call dnegx; ; ; ; ;
|
|
call dwrt4; ; ; ; ;
|
|
call dsinapprox;; dtor; ; ramwe ptr4;
|
|
call dnegx; ; ; ; ;
|
|
call dwrt1.4; ; ; ; ;
|
|
|
|
dtrig.31:
|
|
|* 3*pi/4 < x < 5*pi/4
|
|
|* x = (-dpib + (dx - dpia))
|
|
|* ex = (-dpib - (x - (dx - dpia)))
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
call wait3; lblf dsub csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpib
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
call wait3; lalf dadd csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lalf dsub csla csuxa ulsw;; ; ptr5;
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dmpib
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
jmp dtrig.32; lam csla; reg; ; rcslsw ptr5;
|
|
; lalf dsub csla; reg; ; ;
|
|
|
|
dtrig.4:
|
|
|* abs(x) > 5*pi/4
|
|
call wait3; lf dcmpm csla; ; ; ;
|
|
call wait1; csuxa umsw; ; ; ;
|
|
jgt doberr; woea; ; ; ;
|
|
|* 5*pi/4 < abs(x) <= pi * 2**19
|
|
call ckmode; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dtwoopi
|
|
; lmode3.0 0x0 csla; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_0
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
call wait5; lblf dmul cslm; reg; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lam csla woem; ; ; ; ptr5!c_dfourth
|
|
call wait3; lalf dcvtint csla woem; ; ; ;
|
|
; lalf dfloat csla csuxa ulsw;; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
; lbl cslm; reg; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_2
|
|
; csuxa ulsw; ; ; ptr5;
|
|
; lam cslm woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; lal cslm woea; dtor; ; ramwe rcslsw ptr5;
|
|
call wait5; lf dmul cslm; dtor; ; ramwe ptr5;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lam csla woem; ; ; ; ptr5!sfour
|
|
call wait3; lalf dcvtint csla woem; ; ; ;
|
|
; lalf dfloat csla csuxa ulsw;; ; rcssp ptr5;
|
|
; las cslm; reg; ; ;
|
|
call wait1; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
; lbm cslm woea; ; ; ; ptr5!c_dSCRATCH_2
|
|
call wait3; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla csuxm umsw; reg; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
call wait3; lblf dsub csla woem; ; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_3
|
|
; csuxa ulsw; ; ; ptr5;
|
|
|* save qrem
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5; ptr5!c_dSCRATCH_2
|
|
; lmode3.0 0x2 csla; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5; ptr5!c_dpio2a
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_0
|
|
call wait3; lblf dmul cslm; reg; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla csuxm umsw; reg; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dsub csla woem; ; ; ; ptr5!c_dpio2b
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
; lblf dmul cslm; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
call wait3; lal csla csuxa ulsw; ; ; ;
|
|
; csuxm umsw; ; ; ; ptr5!c_dSCRATCH_6
|
|
; csuxm ulsw; ; ; ptr5;
|
|
| *store q * pio2b
|
|
; lbm csla woem; dtor; ; ramwe rcsmsw ptr5;
|
|
; lblf dsub csla woem; dtor; ; ramwe rcslsw ptr5;
|
|
call wait2; ; dtor; ; ramwe ptr5;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lblf dsub csla csuxa ulsw;; ; ptr5;
|
|
| *store x
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; lam csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_6
|
|
; lal csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
call wait3; lblf dsub csla; reg; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_1
|
|
; csuxa ulsw; ; ; ptr5;
|
|
| *store ex
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5; ptr5!c_dSCRATCH_3
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5!sone
|
|
; lalf dcmp0 csla; reg; ; rcssp ptr5;
|
|
; lbs csla; reg; ; ;
|
|
call wait1; ; ; ; ;
|
|
; lf dadd csla csuxa umsw;; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
jlt dtrig.41; woea; ; ; ;
|
|
jeq dtrig.a; woea; ; ; ;
|
|
; ; ; ; ;
|
|
|* qrem > 0
|
|
call wait3; lf dsub csla; ; ; ;
|
|
call wait1; csuxa umsw; ; ; ;
|
|
jeq dtrig.c; woea; ; ; ;
|
|
call dtrig.b; ; ; ; ;
|
|
|
|
|* qrem < 0
|
|
dtrig.41:
|
|
call wait1; csuxa umsw; ; ; ;
|
|
jeq dtrig.e; woea; ; ; ;
|
|
call dtrig.d; ; ; ; ;
|
|
|
|
dnegx:
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
rtn; lalf dneg csla csuxa ulsw;; ; ;
|
|
|
|
|* set "ex" to 0 for call to approx routines
|
|
dtrig.ex0:
|
|
| *this takes advantage of the fact that dzero is szero
|
|
; ; ; ; ; ptr5!szero
|
|
; ; ; recclk; rcssp ptr5; ptr5!c_dSCRATCH_1
|
|
; ; ; recclk; ptr5;
|
|
; ; ; recoe; ramwe rcsmsw ptr5;
|
|
; ; ; recoe; ramwe rcslsw ptr5;
|
|
rtn; ; ; recoe; ramwe ptr5;
|
|
|
|
|
|
|*
|
|
|* Double Precision Cos Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
dcosapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
; lblf dmul cslm; reg; ; ; ptr5!c_dcos5
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; lam cslm csuxm umsw; ; ; ;
|
|
; lal cslm csuxm ulsw; ; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5; ptr5-
|
|
; lblf dmul cslm; reg; ; ; lpreg!5
|
|
dcos.app.lp:
|
|
; ; ; ; ; lpreg-
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ; ptr5-
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
jloop dcos.app.lp;lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; lbm cslm csuxm umsw; ; ; ;
|
|
; lblf dmul cslm csuxm ulsw;; ; ; ptr5!shalf
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcssp ptr5;
|
|
| *start z * .5
|
|
; lbsf dmul cslm; reg; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lam csla woem; ; ; ;
|
|
; lal csla woem; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5; ptr5!c_dSCRATCH_1
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
; lblf dmul cslm; reg; ; ;
|
|
; csuxm umsw; ; ; ; ptr5!c_dSCRATCH_2
|
|
; csuxm ulsw; ; ; ptr5;
|
|
| *hold z*HALF in c_dSCRATCH_2 for now
|
|
; woem; dtor; ; ramwe rcsmsw ptr5;
|
|
; woem; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
| *start ca - ex*x
|
|
; lblf dsub csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5!c_dcosthresh
|
|
; lal csla; reg; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
; lblf dcmp csla; reg; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_3
|
|
; csuxa ulsw; ; ; ptr5;
|
|
| *hold ca in c_dSCRATCH_3 for now
|
|
; woea; dtor; ; ramwe rcsmsw ptr5;
|
|
; csuxa umsw woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5; ptr5!shalf
|
|
jlt dcos.1; woea; ; ; ;
|
|
; ; ; ; rcssp ptr5; ptr5!c_dSCRATCH_3
|
|
|
|
|* z >= dcosthresh
|
|
; lbs csla; reg; ; ;
|
|
; lf dsub csla; ; ; ; ptr5!c_dSCRATCH_3
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
; lal csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
; lblf dsub csla; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!shalf
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
rtn; lblf dsub csla csuxa ulsw;; ; ;
|
|
|
|
dcos.1:
|
|
|* z < dcosthresh
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
; lblf dsub csla; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!sone
|
|
; ; ; ; rcssp ptr5;
|
|
; las csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
rtn; lblf dsub csla csuxa ulsw;; ; ;
|
|
|
|
|*
|
|
|* Double Precision Sin Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
dsinapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
; lblf dmul cslm; reg; ; ; ptr5!c_dsin5
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; lam cslm csuxm umsw; ; ; ;
|
|
; lal cslm csuxm ulsw; ; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5; ptr5-
|
|
; lblf dmul cslm; reg; ; ; lpreg!5
|
|
dsin.app.lp:
|
|
; ; ; ; ; lpreg-
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ; ptr5-
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
jloop dsin.app.lp;lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; ;
|
|
; lbm cslm csuxm umsw; ; ; ;
|
|
; lblf dmul cslm csuxm ulsw;; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ;
|
|
; lbm csla csuxa umsw; ; ; ;
|
|
rtn; lblf dadd csla csuxa ulsw;; ; ;
|
|
|
|
|
|
#ifdef DTAN
|
|
|*
|
|
|* Double Precision Tan Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
dtanapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
| *start x * x
|
|
; lblf dmul cslm; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dtanq4
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5-
|
|
; lal csla; reg; ; ;
|
|
; lam cslm csuxm umsw; ; ; ;
|
|
; lal cslm csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dsub csla woem; ; ; ; lpreg!3
|
|
dtan.app.lp1:
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5-
|
|
; lal csla; reg; ; ; lpreg-
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jloop dtan.app.lp1;lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_2
|
|
; csuxa ulsw; ; ; ptr5;
|
|
| *store denominator in c_dSCRATCH_2
|
|
; woea; dtor; ; ramwe rcsmsw ptr5; lpreg!3
|
|
jmp dtan.app.entry;woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5; ptr5!c_dtanp3
|
|
dtan.app.lp2:
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
dtan.app.entry:
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5-
|
|
; lal csla; reg; ; ; lpreg-
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jloop dtan.app.lp2;lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; ;
|
|
; lbm cslm csuxm umsw; ; ; ;
|
|
; lblf dmul cslm csuxm ulsw;; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_1
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lal csla; reg; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_2
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lbm csla; reg; ; rcslsw ptr5;
|
|
; lbl csla; reg; ; ;
|
|
; lam csla csuxa umsw; ; ; ;
|
|
; lalf ddiv csla csuxa ulsw;; ; ; lpreg!28
|
|
dtan.div:
|
|
jloop dtan.div; ; ; ; ;
|
|
; ; ; ; ; lpreg-
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_0
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
rtn; lalf dadd csla; reg; ; ;
|
|
|
|
|
|
|*
|
|
|* Double Precision Negative Cot Approximation
|
|
|*
|
|
|* enter with:
|
|
|* x in c_dSCRATCH_0
|
|
|* ex in c_dSCRATCH_1
|
|
|* exit with:
|
|
|* ALU starting
|
|
|*
|
|
dcotnapprox:
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
| *start x * x
|
|
; lblf dmul cslm; reg; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dtanq4
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5-
|
|
; lal csla; reg; ; ;
|
|
; lam cslm csuxm umsw; ; ; ;
|
|
; lal cslm csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lblf dsub csla woem; ; ; ; lpreg!3
|
|
dcot.app.lp1:
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5-
|
|
; lal csla; reg; ; ; lpreg-
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jloop dcot.app.lp1;lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ; ptr5!c_dSCRATCH_2
|
|
; csuxa ulsw; ; ; ptr5;
|
|
| *store qq in c_dSCRATCH_2
|
|
; woea; dtor; ; ramwe rcsmsw ptr5; lpreg!3
|
|
jmp dcot.app.entry;woea; dtor; ; ramwe rcslsw ptr5;
|
|
; ; dtor; ; ramwe ptr5; ptr5!c_dtanp3
|
|
dcot.app.lp2:
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
dcot.app.entry:
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5; ptr5-
|
|
; lal csla; reg; ; ; lpreg-
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
jloop dcot.app.lp2;lbm csla woem; ; ; ;
|
|
; lblf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxa umsw; ; ; ;
|
|
; csuxa ulsw; ; ; ;
|
|
; lbm cslm woea; ; ; ;
|
|
; lblf dmul cslm woea; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ; ptr5!c_dSCRATCH_0
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; ;
|
|
; lbm cslm csuxm umsw; ; ; ;
|
|
; lblf dmul cslm csuxm ulsw;; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; rcsmsw ptr5;
|
|
; lam cslm; reg; ; rcslsw ptr5;
|
|
; lal cslm; reg; ; rcsmsw ptr5;
|
|
; lbm cslm; reg; ; rcslsw ptr5;
|
|
| *start ex * qq
|
|
; lblf dmul cslm; reg; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lbm csla woem; ; ; ;
|
|
; lbl csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; csuxm umsw; ; ; ;
|
|
; csuxm ulsw; ; ; ;
|
|
; lam csla woem; ; ; ;
|
|
| *start ex*qq + x*z*(...)
|
|
; lalf dadd csla woem; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; ; ; ; ;
|
|
; lbm csla csuxa umsw; ; ; ; ptr5!c_dSCRATCH_2
|
|
; lbl csla csuxa ulsw; ; ; rcsmsw ptr5;
|
|
; lam csla; reg; ; rcslsw ptr5;
|
|
; lalf ddiv csla; reg; ; ; lpreg!28
|
|
dcot.div:
|
|
jloop dcot.div; ; ; ; ;
|
|
; ; ; ; ; lpreg-
|
|
; lam csla csuxa umsw; ; ; ;
|
|
rtn; lalf dneg csla csuxa ulsw;; ; ;
|
|
#endif
|
|
|
|
dsinapprox1:
|
|
call dsinapprox;; ; ; ;
|
|
call dwrt1; ; ; ; ;
|
|
|
|
dsinnapprox1:
|
|
call dsinapprox;; ; ; ;
|
|
call dnegx; ; ; ; ;
|
|
call dwrt1; ; ; ; ;
|
|
|
|
dcosapprox1:
|
|
call dcosapprox;; ; ; ;
|
|
call dwrt1; ; ; ; ;
|
|
|
|
dcosnapprox1:
|
|
call dcosapprox;; ; ; ;
|
|
call dnegx; ; ; ; ;
|
|
call dwrt1; ; ; ; ;
|
|
|
|
#ifdef DTAN
|
|
dtanapprox1:
|
|
call dtanapprox;; ; ; ;
|
|
call dwrt1; ; ; ; ;
|
|
|
|
dcotnapprox1:
|
|
call dcotnapprox;; ; ; ;
|
|
call dwrt1; ; ; ; ;
|
|
#else
|
|
dtanapprox1:
|
|
dcotnapprox1:
|
|
call invalid; ; ; ; ;
|
|
#endif
|