BSD 2 development
[unix-history] / src / px / 34fun.s
CommitLineData
ed4c4f10
BJ
1/
2/ BUILT IN FUNCTIONS
3/
4_LLIMIT:
5 add $4.,sp
6 return
7_ARGC:
8 mov _argc,-(sp)
9 sxt -(sp)
10 return
11_ARGV:
12 bne 1f
13 mov (lc)+,r3
141:
15 mov (sp)+,r1
16 mov (sp)+,r0
17 blt 9f
18 cmp r0,_argc
19 bge 9f
20 add r0,r0
21 add _argv,r0
22 mov (r0),r0
23 inc r3
24 br 3f
251:
26 movb (r0)+,r2
27 bne 2f
28 dec r0
29 mov $' ,r2
302:
31 movb r2,(r1)+
323:
33 sob r3,1b
34 return
359:
36 mov $EARGV,_perrno
37 error EARGV
38_SCLCK:
39 mov $2,-(sp)
40 br 1f
41_CLCK:
42 clr -(sp)
431:
44 sub $12.,sp
45 mov sp,0f
46 sys indir; 1f
47 mov sp,r0
48 add 12.(sp),r0
49 mov (r0),r0
50 add $14.,sp
51 mul $1000.,r0
52 mov r1,-(sp)
53 mov r0,-(sp)
54 movif (sp)+,fr0
55 mov $HZ,-(sp)
56 sxt -(sp)
57 movif (sp)+,fr1
58 divf fr1,fr0
59 movfi fr0,-(sp)
60 return
61.data
621:
63 sys times; 0:..
64.text
65_DATE:
66_TIME:
67 asr r0
68 bic $!377,r0
69 mov r0,-(sp)
70 jsr pc,_pdattim
71 cmp (sp)+,(sp)+
72 return
73_SEED:
74 mov (sp)+,r0
75 mov (sp)+,r1
76 mov _seed+2,-(sp)
77 mov _seed,-(sp)
78 mov r0,_seed
79 mov r1,_seed+2
80 return
81_RANDOM:
82 movif _seed,fr0
83 mulf _randa,fr0
84 addf _randc,fr0
85 movf fr0,fr2
86 modf _randim,fr2
87 movf fr2,(sp)
88 mulf _randm,fr2
89 movfi fr2,_seed
90 return
91_DISPOSE:
92 tst (sp)
93 beq 1f
94 jsr pc,_free
951:
96 tst (sp)+
97 return
98_NEW:
99 bne 1f
100 mov (lc)+,r3
1011:
102 mov r3,-(sp)
103 jsr pc,_alloc
104 tst (sp)+
105 mov r0,*(sp)+
106 return
107_EXPO:
108 movf (sp)+,fr0
109 movei fr0,-(sp)
110 sxt -(sp)
111 return
112_ATAN:
113 movf (sp)+,fr0
114 jsr pc,atan
115 movf fr0,-(sp)
116 return
117_COS:
118 movf (sp)+,fr0
119 jsr pc,cos
120 movf fr0,-(sp)
121 return
122_EXP:
123 movf (sp)+,fr0
124 jsr pc,exp
125 movf fr0,-(sp)
126 return
127_LN:
128 movf (sp)+,fr0
129 cfcc
130 ble 9f
131 jsr pc,log
132 movf fr0,-(sp)
133 return
1349:
135 mov $ELN,_perrno
136 error ELN
137_SIN:
138 movf (sp)+,fr0
139 jsr pc,sin
140 movf fr0,-(sp)
141 return
142_SQRT:
143 movf (sp)+,fr0
144 cfcc
145 bmi 9f
146 jsr pc,sqrt
147 movf fr0,-(sp)
148 return
1499:
150 mov $ESQRT,_perrno
151 error ESQRT
152_CHR4:
153 tst (sp)+
154 bne 1f
155_CHR2:
156 cmp (sp),$177
157 bhi 1f
158 return
1591:
160 mov $ECHR,_perrno
161 error ECHR
162_ODD4:
163 tst (sp)+
164_ODD2:
165 bic $!1,(sp)
166 return
167_PRED2:
168 dec (sp)
169 return
170_PRED4:
171 sub $1,2(sp)
172 sbc (sp)
173 return
174_PRED24:
175 sub $1,(sp)
176 sxt -(sp)
177 return
178_STLIM:
179 mov (sp)+,r0
180 bge 1f
181 tst (sp)+
182 return
1831:
184 mov (sp)+,r1
185 sub _stcnt+2,r1
186 sbc r0
187 sub _stcnt,r0
188 ashc $0,r0
189 bge 1f
190 mov $ESTLIM,_perrno
191 error ESTLIM
1921:
193 mov r0,_stlim
194 mov r1,_stlim+2
195 return
196_SUCC2:
197 inc (sp)
198 return
199_SUCC4:
200 add $1,2(sp)
201 adc (sp)
202 return
203_SUCC24:
204 add $1,(sp)
205 sxt -(sp)
206 return
207_ROUND:
208 movf (sp)+,fr0
209 cfcc
210 bmi 1f
211 addf $HALF,fr0
212 br 2f
2131:
214 subf $HALF,fr0
2152:
216 movfi fr0,-(sp)
217 return
218_TRUNC:
219 movf (sp)+,fr0
220 movfi fr0,-(sp)
221 return
222_UNDEF:
223 add $8,sp
224 clr -(sp)
225 return
226/
227/ pack(a,i,z)
228/
229/ with: a: array[m..n] of t
230/ z: packed array[u..v] of t
231/
232/ semantics: for j := u to v do
233/ z[j] := a[j-u+i];
234/
235/ need to check:
236/ 1. i >= m
237/ 2. i+(v-u) <= n (i.e. i-m <= (n-m)-(v-u))
238/
239/ on stack: lv(z), lv(a), rv(i) (len 2)
240/
241/ move w(t)*(v-u+1) bytes from lv(a)+w(t)*(i-m) to lv(z)
242/
243_PACK:
244 bne 1f
245 mov (lc)+,r3
2461:
247 mov $pack,reta
248/
249/ check conditions 1 and 2
250/
251pakunp:
252 mov 4(sp),r1
253 sub (lc)+,r1 / m
254 blt 9f
255 cmp r1,(lc)+ / (n-m)-(u-v)
256 bgt 9f
257 mul r3,r1
258 mov (sp)+,r0
259 add (sp)+,r1
260 tst (sp)+
261 mov (lc)+,r3
262 inc r3
263 jmp *reta
264unpack:
265 mov r0,r2
266 mov r1,r0
267 mov r2,r1
268 br pack
2691:
270 movb (r1)+,(r0)+
271pack:
272 sob r3,1b
273 return
274/
275/ unpack(z,a,i)
276/
277/ with: z and a as in pack
278/
279/ semantics: for j := u to v do
280/ a[j-u+i] := z[j]
281/
282_UNPACK:
283 bne 1f
284 mov (lc)+,r3
2851:
286 mov $unpack,reta
287 br pakunp
2889:
289 cmp reta,$pack
290 beq 1f
291 mov $EUNPACK,_perrno
292 error EUNPACK
2931:
294 mov $EPACK,_perrno
295 error EPACK
296_WCLCK:
297 sys time
298 mov r1,-(sp)
299 mov r0,-(sp)
300 return