5 ; Revision 1.2 1996/04/26 12:31:51 cernlib
6 ; Correct comment leader and comment/remove cpp ifdef lines
8 ; Revision 1.1.1.1 1996/04/01 15:02:53 mclareni
12 ; Compile this only with:
13 ;#if (defined(CERNLIB_VAXVMS))&&(!defined(CERNLIB_FORTRAN))
17 ; Normal random number generator for VAX 11-780
18 ; rewritten from CERN IBM 370 version
19 ; with the IBM-Randomnumbersequence
20 ; two parameter version (MCGN,SRGN)
22 ; adapted at Wuppertal by H.Forsbach, March 84
23 ; last modification : March 84
25 ; FORTRAN external used : RNORTH
27 ; ----------------------------------------------------------------------
28 .PSECT NORRAN$LOCAL, PIC, CON, REL, LCL, NOSHR, NOEXE, RD, WRT, LONG
34 ; ----------------------------------------------------------------------
35 .PSECT NORRAN$CONST, PIC, CON, REL, LCL, SHR, NOEXE, RD, NOWRT, LONG
37 ; lookup table for NORRAN
39 NTBL: .WORD ^X0000 ; Floating point : 0.00000
40 .WORD ^X3E80 ; Floating point : 0.06250
41 .WORD ^X3F00 ; Floating point : 0.12500
42 .WORD ^X3F00 ; Floating point : 0.12500
43 .WORD ^X3F40 ; Floating point : 0.18750
44 .WORD ^X3F40 ; Floating point : 0.18750
45 .WORD ^X3F40 ; Floating point : 0.18750
46 .WORD ^X3F40 ; Floating point : 0.18750
47 .WORD ^X3F80 ; Floating point : 0.25000
48 .WORD ^X3F80 ; Floating point : 0.25000
49 .WORD ^X3F80 ; Floating point : 0.25000
50 .WORD ^X3F80 ; Floating point : 0.25000
51 .WORD ^X3F80 ; Floating point : 0.25000
52 .WORD ^X4010 ; Floating point : 0.56250
53 .WORD ^X4020 ; Floating point : 0.62500
54 .WORD ^X4020 ; Floating point : 0.62500
55 .WORD ^X4020 ; Floating point : 0.62500
56 .WORD ^X4020 ; Floating point : 0.62500
57 .WORD ^X4020 ; Floating point : 0.62500
58 .WORD ^X4060 ; Floating point : 0.87500
59 .WORD ^X4060 ; Floating point : 0.87500
60 .WORD ^X4060 ; Floating point : 0.87500
61 .WORD ^X4090 ; Floating point : 1.12500
62 .WORD ^X40B8 ; Floating point : 1.43750
63 .WORD ^X0000 ; Floating point : 0.00000
64 .WORD ^X0000 ; Floating point : 0.00000
65 .WORD ^X0000 ; Floating point : 0.00000
66 .WORD ^X0000 ; Floating point : 0.00000
67 .WORD ^X0000 ; Floating point : 0.00000
68 .WORD ^X3E80 ; Floating point : 0.06250
69 .WORD ^X3E80 ; Floating point : 0.06250
70 .WORD ^X3E80 ; Floating point : 0.06250
71 .WORD ^X3E80 ; Floating point : 0.06250
72 .WORD ^X3E80 ; Floating point : 0.06250
73 .WORD ^X3F00 ; Floating point : 0.12500
74 .WORD ^X3F00 ; Floating point : 0.12500
75 .WORD ^X3F00 ; Floating point : 0.12500
76 .WORD ^X3F00 ; Floating point : 0.12500
77 .WORD ^X3F40 ; Floating point : 0.18750
78 .WORD ^X3F40 ; Floating point : 0.18750
79 .WORD ^X3F80 ; Floating point : 0.25000
80 .WORD ^X3FA0 ; Floating point : 0.31250
81 .WORD ^X3FA0 ; Floating point : 0.31250
82 .WORD ^X3FA0 ; Floating point : 0.31250
83 .WORD ^X3FA0 ; Floating point : 0.31250
84 .WORD ^X3FA0 ; Floating point : 0.31250
85 .WORD ^X3FC0 ; Floating point : 0.37500
86 .WORD ^X3FC0 ; Floating point : 0.37500
87 .WORD ^X3FC0 ; Floating point : 0.37500
88 .WORD ^X3FC0 ; Floating point : 0.37500
89 .WORD ^X3FC0 ; Floating point : 0.37500
90 .WORD ^X3FE0 ; Floating point : 0.43750
91 .WORD ^X3FE0 ; Floating point : 0.43750
92 .WORD ^X3FE0 ; Floating point : 0.43750
93 .WORD ^X3FE0 ; Floating point : 0.43750
94 .WORD ^X3FE0 ; Floating point : 0.43750
95 .WORD ^X4000 ; Floating point : 0.50000
96 .WORD ^X4000 ; Floating point : 0.50000
97 .WORD ^X4000 ; Floating point : 0.50000
98 .WORD ^X4000 ; Floating point : 0.50000
99 .WORD ^X4000 ; Floating point : 0.50000
100 .WORD ^X4010 ; Floating point : 0.56250
101 .WORD ^X4010 ; Floating point : 0.56250
102 .WORD ^X4010 ; Floating point : 0.56250
103 .WORD ^X4010 ; Floating point : 0.56250
104 .WORD ^X4030 ; Floating point : 0.68750
105 .WORD ^X4030 ; Floating point : 0.68750
106 .WORD ^X4030 ; Floating point : 0.68750
107 .WORD ^X4030 ; Floating point : 0.68750
108 .WORD ^X4040 ; Floating point : 0.75000
109 .WORD ^X4040 ; Floating point : 0.75000
110 .WORD ^X4040 ; Floating point : 0.75000
111 .WORD ^X4040 ; Floating point : 0.75000
112 .WORD ^X4050 ; Floating point : 0.81250
113 .WORD ^X4050 ; Floating point : 0.81250
114 .WORD ^X4050 ; Floating point : 0.81250
115 .WORD ^X4050 ; Floating point : 0.81250
116 .WORD ^X4060 ; Floating point : 0.87500
117 .WORD ^X4070 ; Floating point : 0.93750
118 .WORD ^X4070 ; Floating point : 0.93750
119 .WORD ^X4070 ; Floating point : 0.93750
120 .WORD ^X4080 ; Floating point : 1.00000
121 .WORD ^X4080 ; Floating point : 1.00000
122 .WORD ^X4080 ; Floating point : 1.00000
123 .WORD ^X4088 ; Floating point : 1.06250
124 .WORD ^X4088 ; Floating point : 1.06250
125 .WORD ^X4088 ; Floating point : 1.06250
126 .WORD ^X4090 ; Floating point : 1.12500
127 .WORD ^X4090 ; Floating point : 1.12500
128 .WORD ^X4098 ; Floating point : 1.18750
129 .WORD ^X4098 ; Floating point : 1.18750
130 .WORD ^X40A0 ; Floating point : 1.25000
131 .WORD ^X40A0 ; Floating point : 1.25000
132 .WORD ^X40A8 ; Floating point : 1.31250
133 .WORD ^X40A8 ; Floating point : 1.31250
134 .WORD ^X40B0 ; Floating point : 1.37500
135 .WORD ^X40B0 ; Floating point : 1.37500
136 .WORD ^X40B8 ; Floating point : 1.43750
137 .WORD ^X40C0 ; Floating point : 1.50000
138 .WORD ^X40C8 ; Floating point : 1.56250
139 .WORD ^X40D0 ; Floating point : 1.62500
140 .WORD ^X40D8 ; Floating point : 1.68750
141 .WORD ^X40E0 ; Floating point : 1.75000
142 .WORD ^X40E8 ; Floating point : 1.81250
143 .WORD ^X3FA0 ; Floating point : 0.31250
144 .WORD ^X3FA0 ; Floating point : 0.31250
145 .WORD ^X3FA0 ; Floating point : 0.31250
146 .WORD ^X3FA0 ; Floating point : 0.31250
147 .WORD ^X3FA0 ; Floating point : 0.31250
148 .WORD ^X3FA0 ; Floating point : 0.31250
149 .WORD ^X3FA0 ; Floating point : 0.31250
150 .WORD ^X3FA0 ; Floating point : 0.31250
151 .WORD ^X3FA0 ; Floating point : 0.31250
152 .WORD ^X3FA0 ; Floating point : 0.31250
153 .WORD ^X3FC0 ; Floating point : 0.37500
154 .WORD ^X3FC0 ; Floating point : 0.37500
155 .WORD ^X3FC0 ; Floating point : 0.37500
156 .WORD ^X3FC0 ; Floating point : 0.37500
157 .WORD ^X3FC0 ; Floating point : 0.37500
158 .WORD ^X3FC0 ; Floating point : 0.37500
159 .WORD ^X3FC0 ; Floating point : 0.37500
160 .WORD ^X3FE0 ; Floating point : 0.43750
161 .WORD ^X3FE0 ; Floating point : 0.43750
162 .WORD ^X3FE0 ; Floating point : 0.43750
163 .WORD ^X3FE0 ; Floating point : 0.43750
164 .WORD ^X3FE0 ; Floating point : 0.43750
165 .WORD ^X4000 ; Floating point : 0.50000
166 .WORD ^X4000 ; Floating point : 0.50000
167 .WORD ^X4030 ; Floating point : 0.68750
168 .WORD ^X4030 ; Floating point : 0.68750
169 .WORD ^X4030 ; Floating point : 0.68750
170 .WORD ^X4030 ; Floating point : 0.68750
171 .WORD ^X4030 ; Floating point : 0.68750
172 .WORD ^X4030 ; Floating point : 0.68750
173 .WORD ^X4030 ; Floating point : 0.68750
174 .WORD ^X4030 ; Floating point : 0.68750
175 .WORD ^X4030 ; Floating point : 0.68750
176 .WORD ^X4040 ; Floating point : 0.75000
177 .WORD ^X4040 ; Floating point : 0.75000
178 .WORD ^X4040 ; Floating point : 0.75000
179 .WORD ^X4040 ; Floating point : 0.75000
180 .WORD ^X4040 ; Floating point : 0.75000
181 .WORD ^X4050 ; Floating point : 0.81250
182 .WORD ^X4070 ; Floating point : 0.93750
183 .WORD ^X4070 ; Floating point : 0.93750
184 .WORD ^X4070 ; Floating point : 0.93750
185 .WORD ^X4070 ; Floating point : 0.93750
186 .WORD ^X4070 ; Floating point : 0.93750
187 .WORD ^X4070 ; Floating point : 0.93750
188 .WORD ^X4070 ; Floating point : 0.93750
189 .WORD ^X4070 ; Floating point : 0.93750
190 .WORD ^X4070 ; Floating point : 0.93750
191 .WORD ^X4070 ; Floating point : 0.93750
192 .WORD ^X4080 ; Floating point : 1.00000
193 .WORD ^X4080 ; Floating point : 1.00000
194 .WORD ^X4080 ; Floating point : 1.00000
195 .WORD ^X4080 ; Floating point : 1.00000
196 .WORD ^X4080 ; Floating point : 1.00000
197 .WORD ^X4080 ; Floating point : 1.00000
198 .WORD ^X4080 ; Floating point : 1.00000
199 .WORD ^X4088 ; Floating point : 1.06250
200 .WORD ^X4088 ; Floating point : 1.06250
201 .WORD ^X4088 ; Floating point : 1.06250
202 .WORD ^X4098 ; Floating point : 1.18750
203 .WORD ^X4098 ; Floating point : 1.18750
204 .WORD ^X4098 ; Floating point : 1.18750
205 .WORD ^X4098 ; Floating point : 1.18750
206 .WORD ^X4098 ; Floating point : 1.18750
207 .WORD ^X4098 ; Floating point : 1.18750
208 .WORD ^X4098 ; Floating point : 1.18750
209 .WORD ^X4098 ; Floating point : 1.18750
210 .WORD ^X4098 ; Floating point : 1.18750
211 .WORD ^X4098 ; Floating point : 1.18750
212 .WORD ^X4098 ; Floating point : 1.18750
213 .WORD ^X4098 ; Floating point : 1.18750
214 .WORD ^X40A0 ; Floating point : 1.25000
215 .WORD ^X40A0 ; Floating point : 1.25000
216 .WORD ^X40A0 ; Floating point : 1.25000
217 .WORD ^X40A0 ; Floating point : 1.25000
218 .WORD ^X40A0 ; Floating point : 1.25000
219 .WORD ^X40A0 ; Floating point : 1.25000
220 .WORD ^X40A0 ; Floating point : 1.25000
221 .WORD ^X40A0 ; Floating point : 1.25000
222 .WORD ^X40A0 ; Floating point : 1.25000
223 .WORD ^X40A8 ; Floating point : 1.31250
224 .WORD ^X40A8 ; Floating point : 1.31250
225 .WORD ^X40A8 ; Floating point : 1.31250
226 .WORD ^X40A8 ; Floating point : 1.31250
227 .WORD ^X40A8 ; Floating point : 1.31250
228 .WORD ^X40B0 ; Floating point : 1.37500
229 .WORD ^X40B0 ; Floating point : 1.37500
230 .WORD ^X40C0 ; Floating point : 1.50000
231 .WORD ^X40C0 ; Floating point : 1.50000
232 .WORD ^X40C0 ; Floating point : 1.50000
233 .WORD ^X40C0 ; Floating point : 1.50000
234 .WORD ^X40C0 ; Floating point : 1.50000
235 .WORD ^X40C0 ; Floating point : 1.50000
236 .WORD ^X40C0 ; Floating point : 1.50000
237 .WORD ^X40C0 ; Floating point : 1.50000
238 .WORD ^X40C0 ; Floating point : 1.50000
239 .WORD ^X40C0 ; Floating point : 1.50000
240 .WORD ^X40C0 ; Floating point : 1.50000
241 .WORD ^X40C0 ; Floating point : 1.50000
242 .WORD ^X40C0 ; Floating point : 1.50000
243 .WORD ^X40C8 ; Floating point : 1.56250
244 .WORD ^X40C8 ; Floating point : 1.56250
245 .WORD ^X40C8 ; Floating point : 1.56250
246 .WORD ^X40C8 ; Floating point : 1.56250
247 .WORD ^X40C8 ; Floating point : 1.56250
248 .WORD ^X40C8 ; Floating point : 1.56250
249 .WORD ^X40C8 ; Floating point : 1.56250
250 .WORD ^X40C8 ; Floating point : 1.56250
251 .WORD ^X40C8 ; Floating point : 1.56250
252 .WORD ^X40C8 ; Floating point : 1.56250
253 .WORD ^X40D0 ; Floating point : 1.62500
254 .WORD ^X40D0 ; Floating point : 1.62500
255 .WORD ^X40D0 ; Floating point : 1.62500
256 .WORD ^X40D0 ; Floating point : 1.62500
257 .WORD ^X40D0 ; Floating point : 1.62500
258 .WORD ^X40D0 ; Floating point : 1.62500
259 .WORD ^X40D0 ; Floating point : 1.62500
260 .WORD ^X40D8 ; Floating point : 1.68750
261 .WORD ^X40D8 ; Floating point : 1.68750
262 .WORD ^X40D8 ; Floating point : 1.68750
263 .WORD ^X40D8 ; Floating point : 1.68750
264 .WORD ^X40D8 ; Floating point : 1.68750
265 .WORD ^X40E0 ; Floating point : 1.75000
266 .WORD ^X40E0 ; Floating point : 1.75000
267 .WORD ^X40F0 ; Floating point : 1.87500
268 .WORD ^X40F0 ; Floating point : 1.87500
269 .WORD ^X40F0 ; Floating point : 1.87500
270 .WORD ^X40F0 ; Floating point : 1.87500
271 .WORD ^X40F0 ; Floating point : 1.87500
272 .WORD ^X40F0 ; Floating point : 1.87500
273 .WORD ^X40F0 ; Floating point : 1.87500
274 .WORD ^X40F0 ; Floating point : 1.87500
275 .WORD ^X40F0 ; Floating point : 1.87500
276 .WORD ^X40F0 ; Floating point : 1.87500
277 .WORD ^X40F0 ; Floating point : 1.87500
278 .WORD ^X40F0 ; Floating point : 1.87500
279 .WORD ^X40F0 ; Floating point : 1.87500
280 .WORD ^X40F0 ; Floating point : 1.87500
281 .WORD ^X40F0 ; Floating point : 1.87500
282 .WORD ^X40F8 ; Floating point : 1.93750
283 .WORD ^X40F8 ; Floating point : 1.93750
284 .WORD ^X40F8 ; Floating point : 1.93750
285 .WORD ^X40F8 ; Floating point : 1.93750
286 .WORD ^X40F8 ; Floating point : 1.93750
287 .WORD ^X40F8 ; Floating point : 1.93750
288 .WORD ^X40F8 ; Floating point : 1.93750
289 .WORD ^X40F8 ; Floating point : 1.93750
290 .WORD ^X40F8 ; Floating point : 1.93750
291 .WORD ^X40F8 ; Floating point : 1.93750
292 .WORD ^X40F8 ; Floating point : 1.93750
293 .WORD ^X40F8 ; Floating point : 1.93750
294 .WORD ^X40F8 ; Floating point : 1.93750
295 .WORD ^X4100 ; Floating point : 2.00000
296 .WORD ^X4100 ; Floating point : 2.00000
297 .WORD ^X4100 ; Floating point : 2.00000
298 .WORD ^X4100 ; Floating point : 2.00000
299 .WORD ^X4100 ; Floating point : 2.00000
300 .WORD ^X4100 ; Floating point : 2.00000
301 .WORD ^X4100 ; Floating point : 2.00000
302 .WORD ^X4100 ; Floating point : 2.00000
303 .WORD ^X4100 ; Floating point : 2.00000
304 .WORD ^X4100 ; Floating point : 2.00000
305 .WORD ^X4100 ; Floating point : 2.00000
306 .WORD ^X4100 ; Floating point : 2.00000
307 .WORD ^X4104 ; Floating point : 2.06250
308 .WORD ^X4104 ; Floating point : 2.06250
309 .WORD ^X4104 ; Floating point : 2.06250
310 .WORD ^X4104 ; Floating point : 2.06250
311 .WORD ^X4104 ; Floating point : 2.06250
312 .WORD ^X4104 ; Floating point : 2.06250
313 .WORD ^X4104 ; Floating point : 2.06250
314 .WORD ^X4104 ; Floating point : 2.06250
315 .WORD ^X4104 ; Floating point : 2.06250
316 .WORD ^X4104 ; Floating point : 2.06250
317 .WORD ^X4108 ; Floating point : 2.12500
318 .WORD ^X4108 ; Floating point : 2.12500
319 .WORD ^X4108 ; Floating point : 2.12500
320 .WORD ^X4108 ; Floating point : 2.12500
321 .WORD ^X4108 ; Floating point : 2.12500
322 .WORD ^X4108 ; Floating point : 2.12500
323 .WORD ^X4108 ; Floating point : 2.12500
324 .WORD ^X4108 ; Floating point : 2.12500
325 .WORD ^X4108 ; Floating point : 2.12500
326 .WORD ^X410C ; Floating point : 2.18750
327 .WORD ^X410C ; Floating point : 2.18750
328 .WORD ^X410C ; Floating point : 2.18750
329 .WORD ^X410C ; Floating point : 2.18750
330 .WORD ^X410C ; Floating point : 2.18750
331 .WORD ^X410C ; Floating point : 2.18750
332 .WORD ^X410C ; Floating point : 2.18750
333 .WORD ^X410C ; Floating point : 2.18750
334 .WORD ^X4110 ; Floating point : 2.25000
335 .WORD ^X4110 ; Floating point : 2.25000
336 .WORD ^X4110 ; Floating point : 2.25000
337 .WORD ^X4110 ; Floating point : 2.25000
338 .WORD ^X4110 ; Floating point : 2.25000
339 .WORD ^X4110 ; Floating point : 2.25000
340 .WORD ^X4110 ; Floating point : 2.25000
341 .WORD ^X4114 ; Floating point : 2.31250
342 .WORD ^X4114 ; Floating point : 2.31250
343 .WORD ^X4114 ; Floating point : 2.31250
344 .WORD ^X4114 ; Floating point : 2.31250
345 .WORD ^X4114 ; Floating point : 2.31250
346 .WORD ^X4114 ; Floating point : 2.31250
347 .WORD ^X4118 ; Floating point : 2.37500
348 .WORD ^X4118 ; Floating point : 2.37500
349 .WORD ^X4118 ; Floating point : 2.37500
350 .WORD ^X4118 ; Floating point : 2.37500
351 .WORD ^X4118 ; Floating point : 2.37500
352 .WORD ^X411C ; Floating point : 2.43750
353 .WORD ^X411C ; Floating point : 2.43750
354 .WORD ^X411C ; Floating point : 2.43750
355 .WORD ^X411C ; Floating point : 2.43750
356 .WORD ^X4120 ; Floating point : 2.50000
357 .WORD ^X4120 ; Floating point : 2.50000
358 .WORD ^X4120 ; Floating point : 2.50000
359 .WORD ^X4124 ; Floating point : 2.56250
360 .WORD ^X4124 ; Floating point : 2.56250
361 .WORD ^X4124 ; Floating point : 2.56250
362 .WORD ^X4128 ; Floating point : 2.62500
363 .WORD ^X4128 ; Floating point : 2.62500
364 .WORD ^X412C ; Floating point : 2.68750
365 .WORD ^X412C ; Floating point : 2.68750
367 ; ----------------------------------------------------------------------
369 .PSECT NORRAN$CODE, PIC, CON, REL, LCL, SHR, EXE, RD, NOWRT, LONG
371 .ENTRY NORRAN, ^M<R2>
373 ; normal random number generator, FORTRAN callable CALL NORRAN (RANDOM)
375 MOVL SRGN,R0 ;move SRGN -> R0
376 MOVL R0,R1 ;move R0 -> R1
377 EXTZV #15,#17,R1,R2 ;\
378 MOVL R2,R1 ;_shift right R1 -> R1 (15 bits)
379 XORL2 R1,R0 ;exclusive or of R1,R0 -> R0
380 MOVL R0,R1 ;move R0 -> R1
381 EXTZV #0,#15,R1,R2 ;\
382 ROTL #17,R2,R1 ;_shift left R1 -> R1 (17 bits)
383 XORL2 R1,R0 ;exclusive or of R1,R0 -> R0
384 MOVL R0,SRGN ;save the new SRGN
385 MOVL MCGN,R2 ;get MCGN -> R2
386 MULL2 #^D69069,R2 ;69069*R2 -> R2
387 MOVL R2,MCGN ;save new MCGN
388 XORL2 R0,R2 ;exclusive or of R0 [SRGN], R1 [MCGN] -> R2
390 ; ----------------------------------------------------------------------
393 EXTZV #24, #8, R2, R0 ; if R2 is greater then
394 CMPL R0, #^X68 ; 68 00 00 00 00 00 go to ND2
397 EXTZV #0,#24,R2,R1 ;mantissa into R1
398 CVTLF R1,R2 ;mantissa to VAX-floating
399 EXTZV #7,#5,R2,R1 ;get normalization shift
400 ADDL2 #^X64,R1 ;add 128-excess and ajust
401 INSV R1,#7,#8,R2 ;pack exponent into R2
403 MOVW NTBL[R0], R1 ;- build floating point value from table
404 ADDF3 R1, R2, @4(AP) ;add two randomnumbers and store as argument
406 ; ----------------------------------------------------------------------
407 ND2: CMPL R0, #^XD0 ; if R2 is greater then
408 BGEQ ND3 ; D0 00 00 00 00 go to ND3
410 SUBL2 #^X68, R0 ;subtract to fit into table
411 EXTZV #0,#24,R2,R1 ;mantissa into R1
412 CVTLF R1,R2 ;mantissa to VAX-floating
413 EXTZV #7,#5,R2,R1 ;get normalization shift
414 ADDL2 #^X64,R1 ;add 128-excess and ajust
415 INSV R1,#7,#8,R2 ;pack exponent into R2
417 MOVW NTBL[R0], R1 ;- build floating point from NTBL
418 ADDF2 R1, R2 ;add table value and random number
419 MNEGF R2, @4(AP) ;negate it and write onto argument
421 ; ----------------------------------------------------------------------
423 EXTZV #20, #12, R2, R0; if R2 is greater then
424 CMPL R0, #^XE2F ; E2 F0 00 00 00 go to ND4
426 SUBL2 #^XCE8, R0 ;subtract to fit into table
427 EXTZV #0,#20,R2,R1 ;mantissa into R1
428 ROTL #4, R1, R1 ;shift 4 bits
429 CVTLF R1,R2 ;mantissa to VAX-floating
430 EXTZV #7,#5,R2,R1 ;get normalization shift
431 ADDL2 #^X64,R1 ;add 128-excess and ajust
432 INSV R1,#7,#8,R2 ;pack exponent into R2
434 MOVW NTBL[R0], R1 ;- build floating point value from table
435 ADDF3 R1, R2, @4(AP) ;add and store as argument
437 ; ----------------------------------------------------------------------
438 ND4: CMPL R0, #^XF5E ; if R2 is greater then
439 BGEQ NTTHTL ; F5 E0 00 00 go to NTTHTL
441 SUBL2 #^XE17, R0 ;subtract to fit into table
442 EXTZV #0,#20,R2,R1 ;mantissa into R1
443 ROTL #4, R1, R1 ;shift 4 bits
444 CVTLF R1,R2 ;mantissa to VAX-floating
445 EXTZV #7,#5,R2,R1 ;get normalization shift
446 ADDL2 #^X64,R1 ;add 128-excess and ajust
447 INSV R1,#7,#8,R2 ;pack exponent into R2
449 MOVW NTBL[R0], R1 ;- build floating point value from table
450 ADDF2 R1, R2 ;add two random numbers
451 MNEGF R2, @4(AP) ;negate and store as argument
453 ; ----------------------------------------------------------------------
455 MOVL R2, ARGUMENT ;save random digits as argument for RNORTH
456 PUSHAL ARGUMENT ;push address onto stack
457 CALLS #1, G^RNORTH ;call RNORTH
458 MOVL R0, @4(AP) ;move result onto argument of NORRAN
461 ; ============================================================
463 .ENTRY UNI, ^M<R2> ;save reg R2
465 ; UNI : uniform random number generator [0., 1.] for RNORTH
467 MOVL SRGN,R0 ;move SRGN -> R0
468 MOVL R0,R1 ;move R0 -> R1
469 EXTZV #15,#17,R1,R2 ;\
470 MOVL R2,R1 ;_shift right R1 -> R1 (15 bits)
471 XORL2 R1,R0 ;exclusive or of R1,R0 -> R0
472 MOVL R0,R1 ;move R0 -> R1
473 EXTZV #0,#15,R1,R2 ;\
474 ROTL #17,R2,R1 ;_shift left R1 -> R1 (17 bits)
475 XORL2 R1,R0 ;exclusive or of R1,R0 -> R0
476 MOVL R0,SRGN ;save the new SRGN
477 MOVL MCGN,R2 ;get MCGN -> R2
478 MULL2 #^D69069,R2 ;69069*R2 -> R2
479 MOVL R2,MCGN ;save new MCGN
480 XORL2 R0,R2 ;exclusive or of R0 [SRGN], R1 [MCGN] -> R2
482 EXTZV #8,#24,R2,R1 ;mantissa into R1
483 CVTLF R1,R2 ;mantissa to VAX-floating
484 EXTZV #7,#5,R2,R1 ;get normalization shift
485 ADDL2 #^X68,R1 ;add 128-excess and ajust
486 INSV R1,#7,#8,R2 ;pack exponent into R2
487 MOVL R2,R0 ;copy onto R0 (RNDM2)
490 ; ======================================================================
492 .ENTRY VNI, ^M<R2, R3> ;save reg R2 and R3
494 ; VNI : uniform random number generator [-1., 1.] for RNORTH
496 MOVL SRGN,R0 ;move SRGN -> R0
497 MOVL R0,R1 ;move R0 -> R1
498 EXTZV #15,#17,R1,R2 ;\
499 MOVL R2,R1 ;_shift right R1 -> R1 (15 bits)
500 XORL2 R1,R0 ;exclusive or of R1,R0 -> R0
501 MOVL R0,R1 ;move R0 -> R1
502 EXTZV #0,#15,R1,R2 ;\
503 ROTL #17,R2,R1 ;_shift left R1 -> R1 (17 bits)
504 XORL2 R1,R0 ;exclusive or of R1,R0 -> R0
505 MOVL R0,SRGN ;save the new SRGN
506 MOVL MCGN,R2 ;get MCGN -> R2
507 MULL2 #^D69069,R2 ;69069*R2 -> R2
508 MOVL R2,MCGN ;save new MCGN
509 XORL2 R0,R2 ;exclusive or of R0 [SRGN], R1 [MCGN] -> R2
511 EXTZV #7,#24,R2,R1 ;mantissa into R1
512 EXTZV #31,#1,R2,R3 ;sign into R3
513 CVTLF R1,R2 ;mantissa to VAX-floating
514 EXTZV #7,#5,R2,R1 ;get normalization shift
515 ADDL2 #^X68,R1 ;add 128-excess and ajust
516 INSV R1,#7,#8,R2 ;pack exponent into R2
517 INSV R3,#15,#1,R2 ;pack sign into R2
518 MOVL R2,R0 ;copy onto R0 (RNDM2)
521 ; ======================================================================
525 ; SUBROUTINE NORRIN (MCGN,SRGN)
526 ; MCGN, SRGN are the starting integers of NORRAN
532 ; ======================================================================
536 ; SUBROUTINE NORRUT (MCGN,SRGN)
537 ; MCGN, SRGN are the last used interges of NORRAN