BSD 2 development
[unix-history] / src / px / 30atof.s
CommitLineData
ed4c4f10
BJ
1/ C library -- ascii to floating
2
3/ f = atof(p)
4/ char *p;
5
6ldfps = 170100^tst
7stfps = 170200^tst
8
9.globl _atof
10
11.globl csv, cret
12
13_atof:
14 jsr r5,csv
15 stfps -(sp)
16 ldfps $200
17 movf fr1,-(sp)
18 clr -(sp)
19 clrf fr0
20 clr r2
21 mov 4(r5),r3
221:
23 movb (r3)+,r0
24 cmp $' ,r0
25 beq 1b
26 cmpb r0,$'-
27 bne 2f
28 inc (sp)
291:
30 movb (r3)+,r0
312:
32 sub $'0,r0
33 cmp r0,$9.
34 bhi 2f
35 jsr pc,digit
36 br 1b
37 inc r2
38 br 1b
392:
40 cmpb r0,$'.-'0
41 bne 2f
421:
43 movb (r3)+,r0
44 sub $'0,r0
45 cmp r0,$9.
46 bhi 2f
47 jsr pc,digit
48 dec r2
49 br 1b
502:
51 cmpb r0,$'E-'0
52 beq 3f
53 cmpb r0,$'e-'0
54 bne 1f
553:
56 clr r4
57 clr r1
58 cmpb (r3),$'-
59 bne 3f
60 inc r4
61 inc r3
623:
63 movb (r3)+,r0
64 sub $'0,r0
65 cmp r0,$9.
66 bhi 3f
67 mul $10.,r1
68 add r0,r1
69 br 3b
703:
71 tst r4
72 bne 3f
73 neg r1
743:
75 sub r1,r2
761:
77 movf $one,fr1
78 mov r2,-(sp)
79 beq 2f
80 bgt 1f
81 neg r2
821:
83 cmp r2,$38.
84 blos 1f
85 clrf fr0
86 tst (sp)+
87 bmi out
88 movf $huge,fr0
89 br out
901:
91 mulf $ten,fr1
92 sob r2,1b
932:
94 tst (sp)+
95 bge 1f
96 divf fr1,fr0
97 br 2f
981:
99 mulf fr1,fr0
100 cfcc
101 bvc 2f
102 movf $huge,fr0
1032:
104out:
105 tst (sp)+
106 beq 1f
107 negf fr0
1081:
109 movf (sp)+,fr1
110 ldfps (sp)+
111 jmp cret
112/
113/
114digit:
115 cmpf $big,fr0
116 cfcc
117 blt 1f
118 mulf $ten,fr0
119 movif r0,fr1
120 addf fr1,fr0
121 rts pc
1221:
123 add $2,(sp)
124 rts pc
125/
126/
127one = 40200
128ten = 41040
129big = 56200
130huge = 77777