home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-09-21 | 18.2 KB | 1,118 lines |
- ; s.ylib : routines for math functions
- ;
- ; Copyright (C) 1993 Claus Vohwinkel
- ;
- ; This program is free software; you can redistribute it and/or modify
- ; it under the terms of the GNU General Public License as published by
- ; the Free Software Foundation; either version 2 of the License , or
- ; (at your option) any later version.
- ;
- ; This program is distributed in the hope that it will be useful,
- ; but WITHOUT ANY WARRANTY; without even the implied warranty of
- ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ; GNU General Public License for more details.
- ;
- ; You should have received a copy of the GNU General Public License
- ; along with this program; see the file COPYING. If not, write to
- ; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- ;
- ; You may contact the author by:
- ; e-mail: vohwinkel@vxdesy.desy.de
- ; us-mail: Claus Vohwinkel
- ; SCRI/FSU
- ; 400 Science Library
- ; Tallahassee, FL 32306
- ;
- ;
-
- GET FPINSTR
-
-
- yceil STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- URDEP F0,F0
- NRME F0,F0
- MOVS PC,R14
-
- yfloor STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- URDEM F0,F0
- NRME F0,F0
- MOVS PC,R14
-
-
- yfmod STMFD SP!,{R0-R3}
- LDFD F1,[SP,#8]
- TEQ R2,#0
- MNFMIE F1,F1
- LDFD F0,[SP],#16
- DVFEZ F2,F0,F1
- URDEZ F2,F2
- NRME F2,F2
- MUFE F1,F1,F2
- SUFE F0,F0,F1
- MOVS PC,R14
-
- ymodf STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- URDEZ F1,F0
- NRME F1,F1
- SUFE F0,F0,F1
- STFD F1,[R2]
- MOVS PC,R14
-
-
- yacos STMFD SP!,{R14}
- BL yasin
- LDFE F1,PIO2
- SUFE F0,F1,F0
- LDMFD SP!,{PC}^
-
- ONE_O_SQT2S DCFS 0.707106781
-
- yasin STMFD SP!,{R0,R1,R14}
- LDFD F0,[SP]
- MUFE F0,F0,F0
- RSFE F0,F0,#1
- BL ysqrtf
- LDFD F1,[SP]
- LDFS F2,ONE_O_SQT2S
- ABSE F3,F1
- CMF F3,F2
- BGT yasin1
- DVFE F0,F1,F0
- ADD SP,SP,#8
- LDMFD SP!,{R14}
- B yatanf
- yasin1 DVFE F0,F0,F3
- BL yatanf
- LDMFD SP!,{R0,R1,R14}
- LDFE F1,PIO2
- SUFE F0,F1,F0
- TEQ R0,#0
- MNFMIE F0,F0
- MOVS PC,R14
-
-
-
-
-
- yatan2 STMFD SP!,{R0-R3}
- LDFD F0,[SP],#8
- LDFD F1,[SP],#8
- BIC R0,R0,#&40000000
- ORR R0,R0,R2,LSR #1
- BIC R0,R0,#&20000000
- ABSE F2,F0
- ABSE F3,F1
- CMF F2,F3
- DVFLEE F0,F2,F3
- DVFGTE F0,F3,F2 ; REVERSE ORDER
- ORRGT R0,R0,#&20000000
- STMFD SP!,{R0,R14}
- BL yatanf
- LDMFD SP!,{R0,R14}
- TST R0,#&20000000
- LDFNEE F1,PIO2
- SUFNEE F0,F1,F0
- MOVS R0,R0,LSL #1
- LDFMIE F1,PI
- SUFMIE F0,F1,F0
- MNFCSE F0,F0
- MOVS PC,R14
-
-
- PI & &00004000
- & &C90FDAA2
- & &2168C235
-
-
- yatanf
- MFS F0,1,[SP,#-12]!
- LDMFD SP!,{R0-R2}
- TEQ R0,#0
- MNFMIE F0,F0
- BIC R2,R0,#&FF000000
- SUB R2,R2,#&3F00
- SUB R2,R2,#&FF
- MOVS R1,R1,LSL #2 ; WE SKIP THE FIRST DIGIT WHICH IS IMPLIED TO BE ONE.
- ADC R2,R2,R2
- B yatanx
-
- ; ------------------------
-
- yatan
- STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
-
- MOV R2,R0,LSL #1
- TEQ R0,#0
- MNFMIE F0,F0 ; WE MUST KEEP R0 FOR SIGN
- MOV R2,R2,LSR #20
- SUB R2,R2,#&FE
- SUB R2,R2,#&700
- yatanx CMP R2,#7
- MOVGE R3,#24
- BGE BOK ; WE ARE IN HIGHEST SECTOR
- RSB R2,R2,#6
- MOV R2,R2,LSL #2 ; * 4
- CMP R2,#32
- LDRLT R3,MASK1
- SUBGE R2,R2,#32
- LDRGE R3,MASK2
- MOV R3,R3,LSR R2
- TST R3,#8
- AND R3,R3,#7
- ADD R3,R3,R3,LSL #1 ; * 3
- BEQ BOK ; THE BOUND IS OK
- ADR R2,COFFS1
- ADD R2,R2,R3,LSL #2
- MFL F1,1,[R2],#0
- CMF F0,F1
- ADDGT R3,R3,#3
- BOK SUBS R3,R3,#3 ; WE MUST KEEP R3 FOR LATER ADDITION OF ATAN(X_I)
- BMI NOCORR
- ; R3 IS LOWER BOUND*3 = 0.. 3*7
- ; TO R3 BELONGS TAN(2*(R3/3+1)*PI/32)
- ADR R2,COFFS2
- ADD R2,R2,R3,LSL #2
- MFL F1,1,[R2],#0
- MUFE F2,F1,F1
- ADFE F0,F1,F0
- ADFE F2,F2,#1
- DVFE F0,F2,F0
- SUFE F0,F1,F0
- NOCORR
- ; WE HAVE THE NEW ARG IN F0
- ADR R1,ATCO6
- MUFE F1,F0,F0
- MFL F2,2,[R1],#24
- MOV R2,#4
- MUFE F2,F2,F1
- ADFE F2,F2,F3
- ATA2
- MUFE F2,F2,F1
- MFL F3,1,[R1],#12
- SUBS R2,R2,#1
- ADFE F2,F2,F3
- BPL ATA2
- TEQ R3,#0
- ADRPL R2,COFFS3
- MUFE F0,F0,F2
- ADDPL R2,R2,R3,LSL #2
- LFMPL F1,1,[R2],#0
- ADFPLE F0,F0,F1
- TEQ R0,#0
- MNFMIE F0,F0
- MOVS PC,R14
-
-
- ATCO6 & &00003FFB
- & &98FCA17B
- & &0B4B4F14
- ZCO5 & &80003FFB
- & &BA1F194D
- & &4CBA52FF
- ZCO4 & &00003FFB
- & &E38E1ED0
- & &E5D5B014
- ZCO3 & &80003FFC
- & &92492486
- & &F9EEBEA5
- ZCO2 & &00003FFC
- & &CCCCCCCC
- & &C8200EE7
- ZCO1 & &80003FFD
- & &AAAAAAAA
- & &AAAA4DE2
- ZCO0 & &00003FFE
- & &FFFFFFFF
- & &FFFFFFFF
-
-
- MASK1 & &BCD6E77F ; CONTAINS MASKS FOR EXP -5 0 5 1 15 2 25 3
- ; B C D 6 E 7 7 F
- MASK2 & &0081192A ; -45 -4 -35 -3 -25 -2 -15 -1
- ; 0 0 8 1 1 9 2 A
- COFFS1 ;TAN( (2*I+1)*PI/32) I = 0..7
- & &00003FFB
- & &C9B5DC62
- & &D96D1310
- & &00003FFD
- & &9B5041AA
- & &E31EDE29
- & &00003FFE
- & &88D5B8C8
- & &41A75C35
- & &00003FFE
- & &D2180157
- & &21427E59
- & &00003FFF
- & &9BF7EC6C
- & &3B03EF3C
- & &00003FFF
- & &EF789DB9
- & &E0A03110
- & &00004000
- & &D2FACF48
- & &3006E648
- & &00004002
- & &A27362CA
- & &D7EE626A
- COFFS2 ; 1/TAN(2*(I+1)*PI/32) I = 0..7
- & &00004001
- & &A0DFF712
- & &123B8845
- & &00004000
- & &9A827999
- & &FCEF3242
- & &00003FFF
- & &BF90C712
- & &D3A30A83
- & &00003FFF
- & &80000000
- & &00000000
- & &00003FFE
- & &AB0DC155
- & &BFCC82F5
- & &00003FFD
- & &D413CCCF
- & &E7799212
- & &00003FFC
- & &CBAFAF02
- & &A98AC03E
- & &00000000
- & &00000000
- & &00000000
- COFFS3 ; (I+1)*PI/16 I = 0..7
- & &00003FFC
- & &C90FDAA2
- & &2168C235
- & &00003FFD
- & &C90FDAA2
- & &2168C235
- & &00003FFE
- & &96CBE3F9
- & &990E91A8
- & &00003FFE
- & &C90FDAA2
- & &2168C235
- & &00003FFE
- & &FB53D14A
- & &A9C2F2C2
- & &00003FFF
- & &96CBE3F9
- & &990E91A8
- & &00003FFF
- & &AFEDDF4D
- & &DD3BA9EE
- PIO2 & &00003FFF
- & &C90FDAA2
- & &2168C235
-
-
- FSQINV TEQ R0,#&80000000
- TEQEQ R2,#0
- TEQEQ R3,#0
- ADD SP,SP,#12
- MOVEQS PC,R14
- TST R0,#&80000000
- MOVEQS R1,R0,LSL #2
- SQTNEE F0,F0
- MOVNES PC,R14
- BIC R0,R0,#&C0000000
- FD1 MOVS R3,R3,LSL #1
- ADCS R2,R2,R2
- SUB R0,R0,#1
- BPL FD1
- MOV R1,#&3F00
- ADD R1,R1,#&FF
- STMFD SP!,{R1,R2,R3}
- MFL F0,1,[SP],#12
- SUB R2,R0,R1
- B SQA
-
- FZER1 TEQ R0,#0
- TEQEQ R2,#0
- TEQEQ R3,#0
- ADD SP,SP,#12
- MOVEQS PC,R14
- MNFE F0,#1 ; if we arrive here, something is screwed
- SQTE F0,F0
- MOVS PC,R14
-
- ysqrtf MFS F0,1,[SP,#-12]!
- LDMIA SP,{R0,R2,R3}
- TST R0,#&C0000000
- BNE FSQINV
- MOV R1,#&3F00
- ADD R1,R1,#&FF
- STMIA SP,{R1}
- TEQ R2,#0
- BPL FZER1
- MFL F0,1,[SP],#12
- SUB R2,R0,R1
- B SQA
-
- ysqrt
- MOVS R2,R0,ASR #20
- BMI SQINVALID
- MOV R3,#&FF
- ORR R3,R3,#&300
- BEQ SQZER_OR_DEN
- BIC R0,R0,R2,LSL #20
- ORR R0,R0,R3,LSL #20
- EOR IP,R2,R3
- TEQ IP,#&400
- BEQ SQOVERFL_OR_NAN ; THIS MEANS WE HAVE INFINITY OR A NAN ON INPUT
- SQ1 STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- SUB R2,R2,R3 ; NEW EXPONENT CORRECTION * 2
-
- SQA MOV R0,#2
- ADR R1,SQCO3
- LDFS F1,[R1],#4
- SQ2
- FMLS F1,F1,F0
- LDFS F2,[R1],#4
- SUBS R0,R0,#1
- ADFE F1,F1,F2
- BPL SQ2
-
- MUFE F2,F1,F1 ; Y0^2
- MOVS R0,R2,ROR #1
- ADDMI R1,R1,#12
- ADFE F3,F2,F0 ; Z = Y0^2 + X
- MUFE F0,F0,F2 ; X*Y0^2
- LDMNEIA R1,{R0,R1,R3}
- MUFE F2,F3,#0.5 ; 0.5*Z
- ADDNE R0,R0,R2,ASR #1
- MUFE F1,F1,F3 ; Y0*Z
- STMNEFD SP!,{R0,R1,R3}
- MUFE F2,F2,F2 ; 1/4*Z^2
- LDFNEE F3,[SP],#12
- ADFE F0,F0,F2
- MUFNEE F0,F0,F3
- DVFE F0,F0,F1
- MOVS PC,R14
-
-
- SQCO3 DCFS 0.0249374292634
- SQCO2 DCFS -0.182747647015
- SQCO1 DCFS 0.787923250524
- SQCO0 DCFS 0.369956381214
- SO & &00003FFF
- & &80000000
- & &00000000
- SX & &00003FFF
- & &B504F333
- & &F9DE6484
-
-
- SQZER_OR_DEN ;
- TEQ R0,#0
- TEQEQ R1,#0
- MVFEQE F0,#0
- MOVEQS PC,R14 ; input was zero
- MOV R2,#1
- SQNORM MOVS R1,R1,LSL #1
- ADC R0,R0,R0
- SUB R2,R2,#1
- TST R0,#&100000
- BEQ SQNORM
- SQNORM1
- ORR R0,R0,R3,LSL #20
- B SQ1
-
- SQINVALID TEQ R0,#&80000000
- TEQEQ R1,#0
- MNFEQE F0,#0
- MOVEQS PC,R14
- B CALL_SUP
-
- SQOVERFL_OR_NAN ORR R0,R0,#&40000000
- CALL_SUP STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- SQTE F0,F0
- MOVS PC,R14
-
-
- ycosh
- BIC R0,R0,#&80000000
- STMFD SP!,{R0,R14}
- BL yexp
- LDMFD SP!,{R0,R14}
- SUB R0,R0,#&40000000
- CMP R0,#&00400000
- RDFLTE F1,F0,#1
- ADFLTE F0,F0,F1
- MUFE F0,F0,#0.5
- MOVS PC,R14
-
- ysinh BIC R2,R0,#&80000000
- SUB R2,R2,#&3F000000
- CMP R2,#&00E00000
- BLT SINHSERIES
- STMFD SP!,{R0,R14}
- BIC R0,R0,#&80000000
- BL yexp
- LDMFD SP!,{R0,R14}
- TEQ R0,#0
- BIC R0,R0,#&80000000
- MNFMIE F0,F0
- SUB R0,R0,#&40000000
- CMP R0,#&00400000
- RDFLTE F1,F0,#1
- SUFLTE F0,F0,F1
- MUFE F0,F0,#0.5
- MOVS PC,R14
-
- SINHSERIES STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- ADR R1,SINH6
- MFL F2,2,[R1],#24
- MUFE F1,F0,F0
- MOV R0,#3
- MUFE F2,F2,F1
- ADFE F2,F2,F3
- SH2
- MUFE F2,F2,F1
- MFL F3,1,[R1],#12
- SUBS R0,R0,#1
- ADFE F2,F2,F3
- BPL SH2
- MUFE F2,F2,F1
- ADFE F2,F2,#1
- MUFE F0,F0,F2
- MOVS PC,R14
-
- SINH6
- & &00003FDE ; 1.6125990519570001E-10
- & &B14EA0C8
- & &7EE9052D
- & &00003FE5 ; 2.5051878502386569E-08
- & &D731A9D6
- & &0661E200
- & &00003FEC ; 2.7557319615149193E-06
- & &B8EF1D56
- & &C0BD5B2B
- & &00003FF2 ; 0.00019841269840928372
- & &D00D00CF
- & &FD9FF161
- & &00003FF8 ; 0.0083333333333334755
- & &88888888
- & &888B16B0
- & &00003FFC ; 0.16666666666666666
- & &AAAAAAAA
- & &AAAAAA08
-
- ytanh
- MOV R2,R0,LSR #20
- MOV R2,R2,LSL #20
- BIC R2,R2,#&80000000
- SUB R2,R2,#&3F000000
- SUB R2,R2,#&00F00000
- TEQ R2, #&40000000
- BEQ TANH3
- CMN R2,#&00300000
- BLT TANHSERIES
- CMP R2,#&00500000
- BLT TANH2
- TEQ R0,#0
- MVFPLE F0,#1
- MNFMIE F0,#1
- MOVS PC,R14
- TANH2 STMFD SP!,{R14}
- ADD R0,R0,#&00100000
- BL yexp
- ADFE F1,F0,#1
- SUFE F0,F0,#1
- DVFE F0,F0,F1
- LDMFD SP!,{PC}^
-
- TANH3 MOVS R2,R0,LSL #12
- TEQEQ R1,#0
- BNE TANH4
- TEQ R0,#0
- MVFPLE F0,#1
- MNFMIE F0,#1
- MOVS PC,R14
- TANH4 STMFD SP!,{R0,R1} ; we have a NaN
- LDFD F0,[SP],#8
- EXPE F0,F0
- MOVS PC,R14
-
- TWO_O_LN2 & &00004000
- & &B8AA3B29
- & &5C17F0BC
-
- TANHSERIES
- STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- LDFE F1,TWO_O_LN2
- MUFE F0,F0,F1
-
- ADR R3,EXM1COFFS
- MUFE F1,F0,F0
- ; CALCULATE P
- MFL F2,2,[R3],#24 ; P2,P1
- MUFE F2,F2,F1
- ADFE F2,F2,F3
- MUFE F2,F2,F1
- MFL F3,1,[R3],#12 ; P0
- ADFE F2,F2,F3
- MUFE F0,F0,F2 ; x * P
- MFL F2,2,[R3],#24 ;Q1 Q0
- ADFE F2,F1,F2
- MUFE F2,F2,F1
- ADFE F2,F2,F3 ; Q
- DVFE F0,F0,F2
- MOVS PC,R14
-
-
- EXM1COFFS ; P2 P1 P0 Q1 Q0
- & &00003FF9 ; 0.023094321272953855
- & &BD304D52
- & &E6A303D0
- & &00004003 ; 20.201700006953125
- & &A19D14E4
- & &ABBBB271
- & &00004009 ; 1513.8641730465356
- & &BD3BA74E
- & &3B9E90C8
- & &00004006 ; 233.17823205143102
- & &E92DA09D
- & &9FFECB3E
- & &0000400B ; 4368.0886700674173
- & &8880B598
- & &A6FD8544
-
-
- exm1 STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- BIC R2,R0,#&80000000
- SUB R2,R2,#&3F000000
- LDFE F1,LOG2E
- CMP R2,#&00D00000
- BGE EXM1L
- MUFE F0,F0,F1
- exm1y
- ADR R3,EXM1COFFS
- MUFE F1,F0,F0
- ; CALCULATE P
- MFL F2,2,[R3],#24 ; P2,P1
- MUFE F2,F2,F1
- ADFE F2,F2,F3
- MUFE F2,F2,F1
- MFL F3,1,[R3],#12 ; P0
- ADFE F2,F2,F3
- MUFE F0,F0,F2 ; x * P
- MFL F2,2,[R3],#24 ;Q1 Q0
- ADFE F2,F1,F2
- MUFE F2,F2,F1
- ADFE F2,F2,F3 ; Q
- SUFE F1,F2,F0 ; Q - xP
- MUFE F0,F0,#2 ; 2 x P
- DVFE F0,F0,F1
- MOVS PC,R14
-
- EXM1L STMFD SP!,{R14}
- BL yexpf
- SUFE F0,F0,#1
- LDMFD SP!,{PC}^
-
- ; ----------
-
- ypow TEQ R0,#0
- BMI POWNEG
- TEQEQ R1,#0
- BEQ POWZER
- STMFD SP!,{R2,R3,R14}
- LDFD F0,[SP]
- URDE F1,F0
- NRME F1,F1
- SUFE F1,F0,F1
- CMF F1,#0
- BNE POWUSU
- ABSE F1,F0
- LDFS F2,POTRESH
- CMF F1,F2
- BGT POWUSU
-
- FIXE R2,F0
- STMIA SP,{R0,R1}
- LDFD F1,[SP],#12 ; WE KILL R14 ON STACK AS WELL
- TEQ R2,#0
- BEQ PPZ
- MVFE F0,#1
- TEQ R2,#0
- MOVEQS PC,R14
- RDFMIE F1,F1,#1
- RSBMI R2,R2,#0
-
- POWLOOP MOVS R2,R2,LSR #1
- MUFCSE F0,F0,F1
- MOVEQS PC,R14
- MUFE F1,F1,F1
- B POWLOOP
-
- PPZ CMF F1,#0
- ADFVSE F0,F1,#0 ; RETURN IF nan
- MOVVSS PC,R14
- SUB IP,R0,#&0FF00000
- TEQ IP,#&70000000
- BEQ PAWX ; +- INF ** 0
- MVFE F0,#1
- MOVS PC,R14
-
-
- POWNEG
- STMFD SP!,{R0,R1}
- LDFD F2,[SP],#8
- CMF F2,#0
- BVS PNAN
- MOVS IP,R2
- RDFMIE F0,F2,#1
- MVFPLE F0,F2
- BICMIS IP,IP,#&80000000
- TEQEQ R3,#0
- BEQ PMZ
- MVFE F1,F0
- MOV R0,IP,LSL #12
- MOV IP,IP,LSR #20
- SUB IP,IP,#&FF
- TEQ IP,#&700
- BEQ PF1 ; INF OR NAN
- SUBS IP,IP,#&300
- BMI PF1 ; .. fraction
- ORR R0,R0,R3,LSR #20
- MOV R1,R3,LSL #12
- BEQ PN2
- PN1 MUFE F0,F0,F0
- TEQ R0,#0
- MUFMIE F0,F0,F1
- MOVS R1,R1,LSL #1
- ADCS R0,R0,R0
- SUBS IP,IP,#1
- BNE PN1
- PN2 TEQ R0,#0
- TEQEQ R1,#0
- MOVEQS PC,R14
-
- PF1 MVFE F0,F2 ; original first arg
- STMFD SP!,{R2,R3}
- LDFD F1,[SP],#8 ; original scnd arg
- POWE F0,F0,F1
- MOVS PC,R14
-
- PMZ ; handle (-x)^0
- BICS IP,R0,#&80000000
- TEQEQ R1,#0
- BEQ PAWX ; (-0)^0
- MOVS IP,IP,LSR #20
- SUBS IP,IP,#&FF
- TEQ IP,#&700
- BEQ PAWX
- MVFE F0,#1
- MOVS PC,R14
-
- POWZER ; handle 0 ^ X
- STMFD SP!,{R2,R3}
- LDFD F0,[SP],#8
- CMF F0,#0
- ADFVSE F0,F0,#1
- MOVVS PC,R14
- BEQ PAWX
- MVFE F0,#0
- RDFMIE F0,F0,#1
- MOVS PC,R14
-
- PAWX ; supply an invalid operation
- MNFE F0,#1
- LOGE F0,F0
- MOVS PC,R14
-
- PNAN STMFD SP!,{R2,R3}
- LDFD F1,[SP],#8
- ADFE F0,F1,F2
- MOVS PC,R14
-
- POWUSU BL ylog
- LDFD F1,[SP],#8
- MUFE F0,F0,F1
- LDMFD SP!,{R14}
- B yexpf
-
- POTRESH DCFS 65000.0
-
-
-
-
- twotox STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- twotoxf LDFS F2,TOVT
- ABSE F1,F0
- CMF F1,F2
- ADR R3,P2
- BMI YEXPZ
- B OVER_UNDER
-
-
- yexp
- STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- yexpf LDFS F2,OVT
- ABSE F3,F0
- ADR R3,LOG2E
- MFL F1,1,[R3],#12
- CMF F3,F2
- MUFE F0,F0,F1
- BPL OVER_UNDER
- YEXPZ URDE F1,F0
- NRME F1,F1
-
- FIXE R2,F1
-
- SUFE F0,F0,F1
- ; -1/2 <= F0 <= 1/2
- MUFE F1,F0,F0
- ; CALCULATE P
- MFL F2,2,[R3],#24 ; P2,P1
- MUFE F2,F2,F1
- ADFE F2,F2,F3
- MUFE F2,F2,F1
- MFL F3,1,[R3],#12 ; P0
- ADFE F2,F2,F3
- MUFE F0,F0,F2
- MFL F2,2,[R3],#24 ;Q1 Q0
- ADFE F2,F1,F2
- MUFE F2,F2,F1
- ADFE F2,F2,F3
- SUFE F1,F2,F0
- ADFE F0,F0,F2
- DVFE F0,F0,F1
- TEQ R2,#0
-
-
- MOVEQS PC,R14
- CMP R2,#&4000
- BGE OVERFL
- ADD R0,R2,#&FF
- ADDS R0,R0,#&3F00
- MOV R1,#&80000000
- MOV R2,#0
- BLE DENORM_OR_ZER
- EX2 STMFD SP!,{R0,R1,R2}
- MFL F3,1,[SP],#12
- MUFE F0,F0,F3
- MOVS PC,R14
-
- TOVT DCFS 16448.0
- OVT DCFS 11400.0
- LOG2E & &00003FFF
- & &B8AA3B29
- & &5C17F0BC
- P2 & &00003FF9
- & &BD2E42AB
- & &70BDAA7B
- P1 & &00004003
- & &A19DD498
- & &9F60DB06
- P0 & &00004009
- & &BD3D047F
- & &734DBD67
- Q1 & &00004006
- & &E92F287A
- & &E89542C1
- Q0 & &0000400B
- & &8881B17C
- & &3A652AD2
-
-
- DENORM_OR_ZER
- RSB IP,R0,#1
- MOV R3,#&80000000
- MOV R1,R3,LSR IP
- SUBS IP,IP,#32
- MOVPL R2,R3,LSR IP
- B EX2
-
- OVER_UNDER
- BVS ENAN
- CMF F0,#0
- MVFLTE F0,#0
- MOVLTS PC,R14
- ; we would need 2**f0 at this point but we have an overflow so we dont care
- EXPE F0,F0
- MOVS PC,R14
- OVERFL
- LDFS F0,TOVT
- EXPE F0,F0
- MOVS PC,R14
-
- ENAN ADFE F0,F0,#0
- MOVS PC,R14
-
- ; -----------------------------------------------------------
-
-
- ylog10 STMFD SP!,{R14}
- BL ylog
- LDFE F1,L10E
- MUFE F0,F0,F1
- LDMFD SP!,{PC}^
- L10E & &00003FFD
- & &DE5BD8A9
- & &37287195
-
- ylog
- LDFD F1,SQX2
- MOVS R2,R0,ASR #20
- BMI LSUP
- MOV R3,#&FF
- ORR R3,R3,#&300
- BEQ LGZER_OR_DEN
- BIC R0,R0,R2,LSL #20
- ORR R0,R0,R3,LSL #20
- SUB R2,R2,R3
- TEQ R2,#&400 ; INFINITY OR NAN AS INPUT
- BEQ LSUP1
- LN1 STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
-
- ; F0 IS NOW BETWEEN 1 AND 2
- ; F1 CONTAINS SQRT2
- ; R2 IS ORIGINAL EXPONENT
- CMF F0,F1
- MUFGTE F0,F0,#0.5
- ADDGT R2,R2,#1
- ; WE NEED NOW F0 = (F0-1)/(1+F0)
- SUFE F1,F0,#1
- ADFE F2,F0,#1
- ADR R1,LGCO7
- DVFE F0,F1,F2
- MFL F2,2,[R1],#24
- MUFE F1,F0,F0
- MOV R0,#5
- MUFE F2,F2,F1
- ADFE F2,F2,F3
- LG2
- MUFE F2,F2,F1
- MFL F3,1,[R1],#12
- SUBS R0,R0,#1
- ADFE F2,F2,F3
- BPL LG2
- TEQ R2,#0
- MUFE F0,F0,F2
- FLTNEE F1,R2
- MOVEQS PC,R14
- LFM F3,1,[R1],#12
- MUFE F1,F1,F3
- ADFE F0,F0,F1
- MOVS PC,R14
-
- SQX2 DCFD 1.41421356237309504880
- LGCO7 & &00003FFC
- & &98AA3FC1
- & &56F198AE
- ZCO6 & &00003FFC
- & &9CB03E62
- & &9FC48DB6
- & &00003FFC
- & &BA34901A
- & &A65F3672
- & &00003FFC
- & &E38E20BB
- & &67572CF5
- & &00003FFD
- & &924924AD
- & &BBFE1303
- & &00003FFD
- & &CCCCCCCC
- & &ABC1FB26
- & &00003FFE
- & &AAAAAAAA
- & &AAB39730
- & &00003FFF
- & &FFFFFFFF
- & &FFFFFF4C
- LOG2 & &00003FFE
- & &B17217F7
- & &D1CF79AC
-
-
- LGZER_OR_DEN ;
- TEQ R0,#0
- TEQEQ R1,#0
- MVFEQE F0,#0
- BEQ LSP1 ; input was zero
- RSB R2,R3,#1
- LGNORM MOVS R1,R1,LSL #1
- ADC R0,R0,R0
- SUB R2,R2,#1
- TST R0,#&100000
- BEQ LGNORM
- LGNORM1
- ORR R0,R0,R3,LSL #20
- B LN1
-
- LSUP1 ADD R0,R0,#&40000000
- LSUP STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- LSP1 LGNE F0,F0
- MOVS PC,R14
-
-
- ycos STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- ADR R1,sCO8
- MFL F1,1,[R1,#-12]
- MUFE F0,F1,F0
- RSFE F0,F0,#0.5
- B YSIN1
-
- ysin STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- ADR R1,sCO8
- MFL F1,1,[R1,#-12]
- MUFE F0,F1,F0
- YSIN1 MOV R0,R0,LSL #1
- CMP R0,#&83000000
- URDE F1,F0
- MOV R0,#7
- NRME F1,F1
- BHI INVARG
- FIXE R2,F1
- SUFE F0,F0,F1
- SIN1 TST R2,#1
- MUFE F1,F0,F0
- MFL F2,1,[R1],#12
- MNFNEE F0,F0
- SIN2
- MUFE F2,F2,F1
- MFL F3,1,[R1],#12
- SUBS R0,R0,#1
- ADFE F2,F2,F3
- BPL SIN2
- MUFE F0,F0,F2
- MOVS PC,R14
-
- INVARG
- CMF F0,#0
- BVS SINAN
- SUFE F0,F0,F1
- MUFE F1,F1,#0.5 ; = -1 -.5 0 .5 1
- URDE F2,F1
- NRME F2,F2 ; = -1 -1/0 0 0/1 1
- SUFE F1,F1,F2 ; = 0 +-.5 0 +-.5 0
- MUFE F1,F1,#2 ; = 0 +-1 0 +-1 0
- FIXE R2,F1
- B SIN1
-
-
- OPI & &00003FFD ; 1/PI
- & &A2F9836E
- & &4E44152A
- sCO8 & &00003FEA
- & &CE789708
- & &343B50C6
- sCO7 & &80003FEF
- & &B7BC195F
- & &5A69B150
- sCO6 & &00003FF3
- & &F479AB60
- & &12957FD1
- sCO5 & &80003FF7
- & &F183A6E1
- & &E13B382E
- sCO4 & &00003FFB
- & &A83C1A42
- & &75F16822
- sCO3 & &80003FFE
- & &99696673
- & &137E85C4
- sCO2 & &00004000
- & &A335E33B
- & &AD531C80
- sCO1 & &80004001
- & &A55DE731
- & &2DF290FD
- sCO0 & &00004000
- & &C90FDAA2
- & &2168C231
-
- SINAN ADFE F0,F0,#0
- MOVS PC,R14
- ; ------------------
- ytan STMFD SP!,{R0,R1}
- LDFD F0,[SP],#8
- LDFE F1,OPI
- MUFE F0,F1,F0
- URDE F1,F0
- NRME F1,F1
- SUFE F0,F0,F1
- LDFS F1,ONE_O_FOUR
- MOV R2,#0
- CMF F0,F1
- RSFGTE F0,F0,#0.5
- MOVGT R2,#1
- CNF F0,F1
- MNFLTE F0,F0
- SUFLTE F0,F0,#0.5
- MOVLT R2,#1
- MUFE F1,F0,F0
- ADR R1,TANCOFFS ; 4286 P3 P2 P1 P0 Q3 Q2 Q1 Q0
- LDFE F2,[R1],#12
- MOV R0,#2
- TAN2
- MUFE F2,F2,F1
- LDFE F3,[R1],#12
- SUBS R0,R0,#1
- ADFE F2,F2,F3
- BPL TAN2
- MUFE F0,F0,F2 ; x*P
- LDFE F2,[R1],#12
- MOV R0,#2
- ADFE F2,F1,F2 ; x^2 + q(3)
- TAN3
- MUFE F2,F2,F1
- LDFE F3,[R1],#12
- SUBS R0,R0,#1
- ADFE F2,F2,F3
- BPL TAN3
- TST R2,#1
- DVFEQE F0,F0,F2
- DVFNEE F0,F2,F0
- MOVS PC,R14
-
-
- ONE_O_FOUR DCFS 0.25
- TANCOFFS
- & &80004002 ; -2 -45.649319438665628
- & &B698E731
- & &E6E763D6
- & &00004006 ; -6 14189.854252761779
- & &DDB76AC1
- & &3C696C66
- & &80004008 ; -a -895888.44006768044
- & &DAB9070A
- & &84687642
- & &00004008 ; -e 10888600.437281687
- & &A625986F
- & &F1B1530C
- & &80004004 ; -4 -1014.6561902528854
- & &FDA9FF05
- & &67062D0D
- & &00004008 ; -8 135382.71280511908
- & &8435AD9E
- & &995CBB7B
- & &80004008 ; -c -3991309.518035165
- & &F39C3612
- & &77CF7200
- & &00004006 ; -10 13863796.663567629
- & &D38B74A9
- & &DF9171F3
-
-
- END
-