home *** CD-ROM | disk | FTP | other *** search
- ldfps = 170100^tst
- stfps = 170200^tst
- /
- .globl atan, _atan
- .globl atan2, _atan2
- /
- / floating-point arctangent
- /
- / atan replaces the value in fr0 by its arctangent
- / in the range [-pi/2,pi/2].
- /
- / atan2 places in fr0 the arctangent of fr0/fr1
- / in the range [-pi,pi].
- /
- / there are no error exits
- /
- / coefficients are #5076 from Hart & Cheney.
- /
- /
-
- _atan:
- mov r5,-(sp)
- mov sp,r5
- movf 4(r5),fr0
- jsr pc,atan
- br 1f
-
- _atan2:
- mov r5,-(sp)
- mov sp,r5
- movf 4(r5),fr0
- movf 12.(r5),fr1
- jsr pc,atan2
- 1:
- mov (sp)+,r5
- rts pc
- atan:
- jsr r0,save
- tstf fr0
- cfcc
- blt 1f
- jsr pc,satan
- br ret
- 1:
- negf fr0
- jsr pc,satan
- negf fr0
- br ret
- /
- atan2:
- jsr r0,save
- clr -(sp)
- tstf fr0
- cfcc
- bge 1f
- inc (sp)
- negf fr0
- 1:
- tstf fr1
- cfcc
- beq 2f
- bgt 1f
- add $2,(sp)
- negf fr1
- 1:
- divf fr1,fr0
- jsr pc,satan
- br 1f
- 2:
- movf pi2,fr0
- 1:
- bit $2,(sp)
- beq 1f
- negf fr0
- addf pi2,fr0
- addf pi2,fr0
- 1:
- bit $1,(sp)+
- beq 1f
- negf fr0
- 1:
-
- ret:
- ldfps (sp)+
- movf (sp)+,fr3
- movf (sp)+,fr2
- movf (sp)+,fr1
- mov (sp)+,r0
- rts pc
-
- save:
- movf fr1,-(sp)
- movf fr2,-(sp)
- movf fr3,-(sp)
- stfps -(sp)
- ldfps $40200 / DP, no interrupt
- jmp (r0)
-
- satan:
- cmpf sq2m1,fr0
- cfcc
- bge arctan
- cmpf sq2p1,fr0
- cfcc
- bgt 1f
- movf one,fr1
- divf fr0,fr1
- movf fr1,fr0
- jsr pc,arctan
- negf fr0
- addf pi2,fr0
- rts pc
- 1:
- movf fr0,fr1
- subf one,fr0
- addf one,fr1
- divf fr1,fr0
- jsr pc,arctan
- addf pi4,fr0
- rts pc
- arctan:
- mov $p4p,r0
- mov $4,-(sp)
- movf fr0,fr3
- mulf fr3,fr3
- movf *(r0)+,fr1
- 1:
- mulf fr3,fr1
- addf *(r0)+,fr1
- dec (sp)
- bne 1b
- mov $4,(sp)
- movf fr3,fr2
- br 2f
- 1:
- mulf fr3,fr2
- 2:
- addf *(r0)+,fr2
- dec (sp)
- bne 1b
- tst (sp)+
- divf fr2,fr1
- mulf fr1,fr0
- rts pc
-
- .data
-
- p4p:
- p4;p3;p2;p1;p0
- q3;q2;q1;p0
-
- one: 40200;0;0;0
- pi2: 40311;7732;121041;64302
- pi4: 40111;7732;121041;64302
-
- sq2p1: 40432
- 101171
- 114774
- 167461
-
- sq2m1: 37724
- 11714
- 147747
- 74621
-
- p4: 37442
- 145026
- 75504
- 15621
- p3: 40725
- 21566
- 115517
- 50305
- p2: 41443
- 160206
- 172714
- 25441
- p1: 41632
- 172223
- 76027
- 56645
- p0: 41462
- 25125
- 6152
- 126064
- q3: 41170
- 10112
- 141724
- 64324
- q2: 41573
- 53776
- 25372
- 71522
- q1: 41670
- 123114
- 51576
- 75020
-
- / one = 1.00000 00000 00000 00000 d0
- / sq2p1=2.41421 35623 73095 04880 d0
- / sq2m1= .41421 35623 73095 04880 d0
- / pi2 = 1.57079 63267 94896 61923 d0
- / p4 = .15897 40288 48230 7048 d0
- / p3 = .66605 79017 00926 2658 d1
- / p2 = .40969 26483 21022 5637 d2
- / p1 = .77477 68771 92042 0862 d2
- / p0 = .44541 34005 92906 8032 d2
- / q4 = .10000 00000 00000 0000 d1
- / q3 = .15503 97755 14219 8753 d2
- / q2 = .62835 93051 10323 7683 d2
- / q1 = .92324 80107 23009 7484 d2
- / q0 = .44541 34005 92906 8044 d2
-