]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/mathlib/gen/v/norranvx.s
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / v / norranvx.s
1 ;
2 ; $Id$
3 ;
4 ; $Log$
5 ; Revision 1.2  1996/04/26 12:31:51  cernlib
6 ; Correct comment leader and comment/remove cpp ifdef lines
7 ;
8 ; Revision 1.1.1.1  1996/04/01 15:02:53  mclareni
9 ; Mathlib gen
10 ;
11 ;
12 ; Compile this only with:
13 ;#if (defined(CERNLIB_VAXVMS))&&(!defined(CERNLIB_FORTRAN))
14 ;
15  .TITLE  NORRAN
16 ;
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)
21 ;
22 ;     adapted at Wuppertal by H.Forsbach, March 84
23 ;                     last modification : March 84
24 ;
25 ;     FORTRAN external used : RNORTH
26 ;
27 ;     ----------------------------------------------------------------------
28       .PSECT  NORRAN$LOCAL, PIC, CON, REL, LCL, NOSHR, NOEXE, RD, WRT, LONG
29 MCGN: .LONG   ^D12345
30 SRGN: .LONG   ^D01073
31 ;
32 ARGUMENT:       .BLKL   1
33 ;
34 ;     ----------------------------------------------------------------------
35       .PSECT  NORRAN$CONST, PIC, CON, REL, LCL, SHR, NOEXE, RD, NOWRT, LONG
36 ;
37 ;     lookup table for NORRAN
38 ;
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
366 ;
367 ;     ----------------------------------------------------------------------
368 ;
369       .PSECT  NORRAN$CODE, PIC, CON, REL, LCL, SHR, EXE, RD, NOWRT, LONG
370 ;
371       .ENTRY  NORRAN, ^M<R2>
372 ;
373 ;     normal random number generator, FORTRAN callable CALL NORRAN (RANDOM)
374 ;
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
389 ;
390 ;     ----------------------------------------------------------------------
391 ;
392       CLRL    R0              ;\
393       EXTZV   #24, #8, R2, R0 ; if R2 is greater then
394       CMPL    R0, #^X68       ; 68 00 00 00 00 00 go to ND2
395       BGEQ    ND2             ;/
396 ;
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
402       CLRL    R1              ;\
403       MOVW    NTBL[R0], R1    ;- build floating point value from table
404       ADDF3   R1, R2, @4(AP)  ;add two randomnumbers and store as argument
405       RET
406 ;     ----------------------------------------------------------------------
407 ND2:  CMPL    R0, #^XD0       ;  if R2 is greater then
408       BGEQ    ND3             ;  D0 00 00 00 00 go to ND3
409 ;
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
416       CLRL    R1              ;\
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
420       RET
421 ;     ----------------------------------------------------------------------
422 ND3:  CLRL    R0              ;\
423       EXTZV   #20, #12, R2, R0; if R2 is greater then
424       CMPL    R0, #^XE2F      ; E2 F0 00 00 00 go to ND4
425       BGEQ    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
433       CLRL    R1              ;\
434       MOVW    NTBL[R0], R1    ;- build floating point value from table
435       ADDF3   R1, R2, @4(AP)  ;add and store as argument
436       RET
437 ;     ----------------------------------------------------------------------
438 ND4:  CMPL    R0, #^XF5E      ; if R2 is greater then
439       BGEQ    NTTHTL          ; F5 E0 00 00 go to NTTHTL
440 ;
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
448       CLRL    R1              ;\
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
452       RET
453 ;     ----------------------------------------------------------------------
454 NTTHTL:
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
459       RET
460 ;
461 ;     ============================================================
462 ;
463       .ENTRY  UNI, ^M<R2>     ;save reg R2
464 ;
465 ;     UNI : uniform random number generator [0., 1.] for RNORTH
466 ;
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
481 ;
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)
488       RET
489 ;
490 ;     ======================================================================
491 ;
492       .ENTRY  VNI, ^M<R2, R3> ;save reg R2 and R3
493 ;
494 ;     VNI : uniform random number generator [-1., 1.] for RNORTH
495 ;
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
510 ;
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)
519       RET
520 ;
521 ;     ======================================================================
522 ;
523       .ENTRY  NORRIN, ^M<>
524 ;
525 ;     SUBROUTINE NORRIN (MCGN,SRGN)
526 ;     MCGN, SRGN are the starting integers of NORRAN
527 ;
528       MOVL    @4(AP),MCGN
529       MOVL    @8(AP),SRGN
530       RET
531 ;
532 ;     ======================================================================
533 ;
534       .ENTRY  NORRUT, ^M<>
535 ;
536 ;     SUBROUTINE NORRUT (MCGN,SRGN)
537 ;     MCGN, SRGN are the last used interges of NORRAN
538 ;
539       MOVL    MCGN,@4(AP)
540       MOVL    SRGN,@8(AP)
541       RET
542       .END