Research V5 development
[unix-history] / usr / c / c0t.s
CommitLineData
64cc8cd0
DR
1/ assure fake printf (no floating)
2
3.globl fltused; fltused = 0
4
5/ convert stream to number; result is type.
6/ value in cval or fcval
7
8fpp = 1
9
10.globl _getnum
11
12.globl _peekc
13.globl _getchar
14.globl _cval
15.globl _fcval
16.globl _error
17
18_getnum:
19 .if fpp
20 movif $10.,fr3
21 clrf fr0
22 .endif
23 clr nfract
24 clr totdig
25 clr decpt
26 clr _cval
27 mov 2(sp),base
28 mov r2,-(sp)
291:
30 jsr r5,getdig
31 br 2f
32 .if fpp
33 mulf fr3,fr0
34 movif r0,fr1
35 addf fr1,fr0
36 .endif
37 inc nfract
38 br 1b
392:
40 tst decpt
41 bne 1f
42 clr nfract
43 cmp r0,$'.
44 bne 1f
45 mov pc,decpt
46 br 1b
471:
48 tst totdig
49 beq 1f
50 cmp r0,$'e
51 bne 1f
52 clr -(sp)
53 clr _cval
54 mov pc,decpt
55 clr _cval
56 mov $10.,base
57 jsr pc,_getchar
58 cmp r0,$'+
59 beq 2f
60 cmp r0,$'-
61 bne 3f
62 inc (sp)
63 br 2f
643:
65 mov r0,_peekc
662:
67 jsr r5,getdig
68 br 2f
69 br 2b
702:
71 tst (sp)+
72 beq 2f
73 neg _cval
742:
75 sub _cval,nfract
761:
77 mov r0,_peekc
78 tst totdig
79 bne 1f
80 mov $39.,r0 / "." operator
819:
82 mov (sp)+,r2
83 rts pc
841:
85 tst decpt
86 bne 1f
87 mov $21.,r0 / fixed constant
88 br 9b
891:
90 .if fpp
91 movif $1,fr2
92 mov nfract,r2
93 mov r2,-(sp)
94 beq 2f
95 bgt 1f
96 neg r2
971:
98 mulf fr3,fr2
99 sob r2,1b
1002:
101 tst (sp)+
102 ble 1f
103 divf fr2,fr0
104 br 2f
1051:
106 mulf fr2,fr0
1072:
108 mov $_fcval,r0
109 movf fr0,(r0)
110 tst (r0)+
111 tst (r0)+
112 bne 1f
113 tst (r0)+
114 bne 1f
115 tst (r0)+
116 bne 1f
117 mov $24.,r0
118 mov _fcval,_cval
119 br 9b
1201:
121 mov $23.,r0
122 br 9b
123 .endif
124 .if 1-fpp
125 mov $fperr,-(sp)
126 jsr pc,_error
127 tst (sp)+
128 mov $21.,r0
129 br 9b
130fperr: <No floating point!\0>; .even
131 .endif
132
133getdig:
134 mov _peekc,r0
135 beq 1f
136 clr _peekc
137 br 2f
1381:
139 jsr pc,_getchar
1402:
141 sub $'0,r0
142 cmp r0,$9.
143 bhi 1f
144 inc totdig
145 mov _cval,r1
146 mul base,r1
147 add r0,r1
148 mov r1,_cval
149 tst (r5)+
150 rts r5
1511:
152 add $'0,r0
153 rts r5
154
155.bss
156base: .=.+2
157nfract: .=.+2
158decpt: .=.+2
159totdig: .=.+2