|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 000004a8 * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _pipe17
6: 6 00000000 _pipe17:
7: 7 00014B14 0000 .word L381
8: 8 00014B16 #
9: 9 00014B16 # #include "evt_defs.h"
10: 10 00014B16 #
11: 11 00014B16 # /*
12: 12 00014B16 # *********************************************************************
13: 13 00014B16 # * FPP PIPELINED EVENTS TEST #17
14: 14 00014B16 # *
15: 15 00014B16 # * This test will execute a large number of ADDF instructions with
16: 16 00014B16 # * clock events active. It will ensure that:
17: 17 00014B16 # * 1. A clock event occurrs during the ADDF sequence, and
18: 18 00014B16 # * 2. the result of the add sequence is correct.
19: 19 00014B16 # *
20: 20 00014B16 # * At each clock interrupt the ADDF's should be stopped and the queue
21: 21 00014B16 # * cleared. If the queue isn't cleared then we'll get too many ADDF
22: 22 00014B16 # * operations run and end up with the wrong result.
23: 23 00014B16 # * The ADDFs will be run with cache misses and with cache hits.
24: 24 00014B16 # * There is a finite chance that the clock event will occur after we
25: 25 00014B16 # * have reset the RTC_OCCURRED flag but before the ADDFs have started
26: 26 00014B16 # * or that it will have occurred after the ADDFs were done but before
27: 27 00014B16 # * we check the flag again. With 128 ADDFs the chance is small but to
28: 28 00014B16 # * be sure, we'll do it all twice. What the hell.
29: 29 00014B16 # * This routine uses the special clock event handler found in the
30: 30 00014B16 # * test initializer.
31: 31 00014B16 # *********************************************************************
32: 32 00014B16 # */
33: 33 00014B16 # pipe17()
34: 34 00014B16 # {
35: 35 00014B16 13 008c jbr L383
36: 36 00014B19 L384:
37: 37 00014B19 # precision = SGL;
38: 38 00014B19 0d 01 effffffff4 movl $1,_precision
39: 39 00014B20 # exp_event = FALSE; /* don't expect fpp events */
40: 40 00014B20 4d efffffffee clrl _exp_event
41: 41 00014B26 # sgl_value_1 = 0x40800000; /* add floating +1.0's */
42: 42 00014B26 0d 8f40800000 efffffffe3 movl $1082130432,_sgl_value_1
43: 43 00014B31 # sgl_expected = 0x44000000; /* expect a floating +128 */
44: 44 00014B31 0d 8f44000000 efffffffd8 movl $1140850688,_sgl_expected
45: 45 00014B3C # i_cache_hit = FALSE; /* run with cache misses */
46: 46 00014B3C 4d efffffffd2 clrl _i_cache_hit
47: 47 00014B42 # test_clock_add(); /* test w/ positive Acc. */
48: 48 00014B42 fe 04 ef0000005f callf $4,_test_clock_add
49: 49 00014B49 # test_clock_add(); /* ...run the test twice */
50: 50 00014B49 fe 04 ef00000058 callf $4,_test_clock_add
51: 51 00014B50 # i_cache_hit = TRUE; /* and run with cache hits */
52: 52 00014B50 0d 01 efffffffbd movl $1,_i_cache_hit
53: 53 00014B57 # test_clock_add(); /* for 2 more times */
54: 54 00014B57 fe 04 ef0000004a callf $4,_test_clock_add
55: 55 00014B5E # test_clock_add();
56: 56 00014B5E fe 04 ef00000043 callf $4,_test_clock_add
57: 57 00014B65 # sgl_value_1 = 0xc0800000; /* add floating -1.0's */
58: 58 00014B65 0d 8fc0800000 efffffffa4 movl $-1065353216,_sgl_value_1
59: 59 00014B70 # sgl_expected = 0xc4000000; /* expect a floating -128 */
60: 60 00014B70 0d 8fc4000000 efffffff99 movl $-1006632960,_sgl_expected
61: 61 00014B7B # i_cache_hit = FALSE; /* run with cache misses */
62: 62 00014B7B 4d efffffff93 clrl _i_cache_hit
63: 63 00014B81 # test_clock_add(); /* test w/ negative Acc. */
64: 64 00014B81 fe 04 ef00000020 callf $4,_test_clock_add
65: 65 00014B88 # test_clock_add(); /* ...run the test twice */
66: 66 00014B88 fe 04 ef00000019 callf $4,_test_clock_add
67: 67 00014B8F # i_cache_hit = TRUE; /* and run with cache hits */
68: 68 00014B8F 0d 01 efffffff7e movl $1,_i_cache_hit
69: 69 00014B96 # test_clock_add(); /* for 2 more times */
70: 70 00014B96 fe 04 ef0000000b callf $4,_test_clock_add
71: 71 00014B9D # test_clock_add();
72: 72 00014B9D fe 04 ef00000004 callf $4,_test_clock_add
73: 73 00014BA4 # }
74: 74 00014BA4 40 ret#2
75: 75 00014BA5 .set L381,0x0
76: 76 00014BA5 L383:
77: 77 00014BA5 13 ff71 jbr L384
78: 78 00014BA8 .data
79: 79 000004a8 * .text
80: 80 00014BA8 .align 1
81: 81 00014BA8 .globl _test_clock_add
82: 82 00014BA8 _test_clock_add:
83: 83 00014BA8 0000 .word L386
84: 84 00014BAA #
85: 85 00014BAA #
86: 86 00014BAA #
87: 87 00014BAA # /****************************************************************************
88: 88 00014BAA # *
89: 89 00014BAA # * Verify that the results of 128 ADDFs is correct.
90: 90 00014BAA # *
91: 91 00014BAA # ****************************************************************************/
92: 92 00014BAA # test_clock_add()
93: 93 00014BAA # {
94: 94 00014BAA 11 67 jbr L388
95: 95 00014BAC L389:
96: 96 00014BAC # asm(".globl test_clock_lp"); /* loop from here on errors */
97: 97 00014BAC .globl test_clock_lp
98: 98 00014BAC # asm("test_clock_lp:");
99: 99 00014BAC test_clock_lp:
100: 100 00014BAC # clock_add(); /* do 128 addf's */
101: 101 00014BAC fe 04 ef00000063 callf $4,_clock_add
102: 102 00014BB3 # if( !rtc_occurred )
103: 103 00014BB3 5d efffffff5b tstl _rtc_occurred
104: 104 00014BB9 21 09 jneq L391
105: 105 00014BBB # who_pulled_the_plug(); /* something is wrong here */
106: 106 00014BBB fe 04 ef000002e2 callf $4,_who_pulled_the_plug
107: 107 00014BC2 # else { /* we got a clock event!! */
108: 108 00014BC2 11 4e jbr L393
109: 109 00014BC4 L391:
110: 110 00014BC4 # asm("stf _sgl_st_acc"); /* store the Accumlator */
111: 111 00014BC4 26 efffffff4a stf _sgl_st_acc
112: 112 00014BCA # if( sgl_st_acc != sgl_expected )
113: 113 00014BCA 1d efffffff44 efffffff3f cmpl _sgl_st_acc,_sgl_expected
114: 114 00014BD5 31 3b jeql L394
115: 115 00014BD7 # {
116: 116 00014BD7 # errcnt++; /* bump the error count */
117: 117 00014BD7 6d efffffff37 incl _errcnt
118: 118 00014BDD # if( prt_error )
119: 119 00014BDD 5d efffffff31 tstl _prt_error
120: 120 00014BE3 31 07 jeql L395
121: 121 00014BE5 # print_clock_er(); /* print the error message */
122: 122 00014BE5 fe 04 ef000001b0 callf $4,_print_clock_er
123: 123 00014BEC # if( halt_flg )
124: 124 00014BEC L395:
125: 125 00014BEC 5d efffffff22 tstl _halt_flg
126: 126 00014BF2 31 09 jeql L397
127: 127 00014BF4 # pipe17_halt( 1 ); /* halt with a code of 1 */
128: 128 00014BF4 dd 01 pushl $1
129: 129 00014BF6 fe 08 ef00000375 callf $8,_pipe17_halt
130: 130 00014BFD # if( loop_on_err ) {
131: 131 00014BFD L397:
132: 132 00014BFD 5d efffffff11 tstl _loop_on_err
133: 133 00014C03 31 0d jeql L399
134: 134 00014C05 # force_loop = TRUE; /* loop on the error */
135: 135 00014C05 0d 01 efffffff08 movl $1,_force_loop
136: 136 00014C0C # asm("jmp test_clock_lp");
137: 137 00014C0C 71 efffffff9a jmp test_clock_lp
138: 138 00014C12 # }
139: 139 00014C12 # } /* end of store error */
140: 140 00014C12 L399:
141: 141 00014C12 # } /* end of clock event found */
142: 142 00014C12 L394:
143: 143 00014C12 L393:
144: 144 00014C12 # }
145: 145 00014C12 40 ret#2
146: 146 00014C13 .set L386,0x0
147: 147 00014C13 L388:
148: 148 00014C13 11 97 jbr L389
149: 149 00014C15 .data
150: 150 000004a8 * .text
151: 151 00014C15 00 .align 1
152: 152 00014C16 .globl _clock_add
153: 153 00014C16 _clock_add:
154: 154 00014C16 0000 .word L400
155: 155 00014C18 #
156: 156 00014C18 #
157: 157 00014C18 #
158: 158 00014C18 #
159: 159 00014C18 #
160: 160 00014C18 #
161: 161 00014C18 # /****************************************************************************
162: 162 00014C18 # *
163: 163 00014C18 # * DO 128 SINGLE PRECISION ADDs
164: 164 00014C18 # *
165: 165 00014C18 # * Run a series of 128 ADDF instructions with the clock enabled. Run the
166: 166 00014C18 # * series untill there was a clock event during the series or we run out
167: 167 00014C18 # * of patience. -It takes a while to run out of patience!!
168: 168 00014C18 # * If we are running with instruction cache misses then bump the Code Cache
169: 169 00014C18 # * Key each time through.
170: 170 00014C18 # *
171: 171 00014C18 # ****************************************************************************/
172: 172 00014C18 # clock_add()
173: 173 00014C18 # {
174: 174 00014C18 13 017e jbr L402
175: 175 00014C1B L403:
176: 176 00014C1B # clock_retrys = 1000000; /* allow 1 million retrys */
177: 177 00014C1B 0d 8f000f4240 effffffeee movl $1000000,_clock_retrys
178: 178 00014C26 # asm(".globl clock_add_lp"); /* loop from here till RTC */
179: 179 00014C26 .globl clock_add_lp
180: 180 00014C26 # asm("clock_add_lp:");
181: 181 00014C26 clock_add_lp:
182: 182 00014C26 # if( !i_cache_hit ) {
183: 183 00014C26 5d effffffee8 tstl _i_cache_hit
184: 184 00014C2C 21 25 jneq L404
185: 185 00014C2E # if( ++Codek >= 255 ) { /* get next key, key = max? */
186: 186 00014C2E 6d effffffee0 incl _Codek
187: 187 00014C34 0d effffffeda 50 movl _Codek,r0
188: 188 00014C3B 1d 50 8900ff cmpl r0,$255
189: 189 00014C40 91 0a jlss L405
190: 190 00014C42 # Codek = 1; /* reset the cache key */
191: 191 00014C42 0d 01 effffffecb movl $1,_Codek
192: 192 00014C49 # asm("mtpr $1,$23"); /* and purge the cache */
193: 193 00014C49 ad 01 17 mtpr $1,$23
194: 194 00014C4C # };
195: 195 00014C4C L405:
196: 196 00014C4C # asm("mtpr _Codek,$13"); /* Set the new cache key */
197: 197 00014C4C ad effffffec2 0d mtpr _Codek,$13
198: 198 00014C53 # };
199: 199 00014C53 L404:
200: 200 00014C53 # asm("clrl r0"); /* get a floating '0.0' */
201: 201 00014C53 4d 50 clrl r0
202: 202 00014C55 # asm("ldf r0"); /* clear the accumulator */
203: 203 00014C55 06 50 ldf r0
204: 204 00014C57 # asm("bispsw $0x60"); /* enable ovfl, undfl evts */
205: 205 00014C57 8b 8860 bispsw $0x60
206: 206 00014C5A # asm("mtpr $1,$8"); /* lower IPL -enable clock */
207: 207 00014C5A ad 01 08 mtpr $1,$8
208: 208 00014C5D # asm("nop");
209: 209 00014C5D 10 nop
210: 210 00014C5E # asm("movl _sgl_value_1,r6"); /* get the operand */
211: 211 00014C5E 0d effffffeb0 56 movl _sgl_value_1,r6
212: 212 00014C65 # asm("clrl _rtc_occurred"); /* clear clock event flag */
213: 213 00014C65 4d effffffea9 clrl _rtc_occurred
214: 214 00014C6B #
215: 215 00014C6B # /*
216: 216 00014C6B # * Now do 128 ADDF instructions
217: 217 00014C6B # */
218: 218 00014C6B # asm("addf r6"); /* ADDF #001 */
219: 219 00014C6B c6 56 addf r6
220: 220 00014C6D # asm("addf r6"); /* ADDF #002 */
221: 221 00014C6D c6 56 addf r6
222: 222 00014C6F # asm("addf r6"); /* ADDF #003 */
223: 223 00014C6F c6 56 addf r6
224: 224 00014C71 # asm("addf r6"); /* ADDF #004 */
225: 225 00014C71 c6 56 addf r6
226: 226 00014C73 # asm("addf r6"); /* ADDF #005 */
227: 227 00014C73 c6 56 addf r6
228: 228 00014C75 # asm("addf r6"); /* ADDF #006 */
229: 229 00014C75 c6 56 addf r6
230: 230 00014C77 # asm("addf r6"); /* ADDF #007 */
231: 231 00014C77 c6 56 addf r6
232: 232 00014C79 # asm("addf r6"); /* ADDF #008 */
233: 233 00014C79 c6 56 addf r6
234: 234 00014C7B # asm("addf r6"); /* ADDF #009 */
235: 235 00014C7B c6 56 addf r6
236: 236 00014C7D # asm("addf r6"); /* ADDF #010 */
237: 237 00014C7D c6 56 addf r6
238: 238 00014C7F # asm("addf r6"); /* ADDF #011 */
239: 239 00014C7F c6 56 addf r6
240: 240 00014C81 # asm("addf r6"); /* ADDF #012 */
241: 241 00014C81 c6 56 addf r6
242: 242 00014C83 # asm("addf r6"); /* ADDF #013 */
243: 243 00014C83 c6 56 addf r6
244: 244 00014C85 # asm("addf r6"); /* ADDF #014 */
245: 245 00014C85 c6 56 addf r6
246: 246 00014C87 # asm("addf r6"); /* ADDF #015 */
247: 247 00014C87 c6 56 addf r6
248: 248 00014C89 # asm("addf r6"); /* ADDF #016 */
249: 249 00014C89 c6 56 addf r6
250: 250 00014C8B # asm("addf r6"); /* ADDF #017 */
251: 251 00014C8B c6 56 addf r6
252: 252 00014C8D # asm("addf r6"); /* ADDF #018 */
253: 253 00014C8D c6 56 addf r6
254: 254 00014C8F # asm("addf r6"); /* ADDF #019 */
255: 255 00014C8F c6 56 addf r6
256: 256 00014C91 # asm("addf r6"); /* ADDF #020 */
257: 257 00014C91 c6 56 addf r6
258: 258 00014C93 # asm("addf r6"); /* ADDF #021 */
259: 259 00014C93 c6 56 addf r6
260: 260 00014C95 # asm("addf r6"); /* ADDF #022 */
261: 261 00014C95 c6 56 addf r6
262: 262 00014C97 # asm("addf r6"); /* ADDF #023 */
263: 263 00014C97 c6 56 addf r6
264: 264 00014C99 # asm("addf r6"); /* ADDF #024 */
265: 265 00014C99 c6 56 addf r6
266: 266 00014C9B # asm("addf r6"); /* ADDF #025 */
267: 267 00014C9B c6 56 addf r6
268: 268 00014C9D # asm("addf r6"); /* ADDF #026 */
269: 269 00014C9D c6 56 addf r6
270: 270 00014C9F # asm("addf r6"); /* ADDF #027 */
271: 271 00014C9F c6 56 addf r6
272: 272 00014CA1 # asm("addf r6"); /* ADDF #028 */
273: 273 00014CA1 c6 56 addf r6
274: 274 00014CA3 # asm("addf r6"); /* ADDF #029 */
275: 275 00014CA3 c6 56 addf r6
276: 276 00014CA5 # asm("addf r6"); /* ADDF #030 */
277: 277 00014CA5 c6 56 addf r6
278: 278 00014CA7 # asm("addf r6"); /* ADDF #031 */
279: 279 00014CA7 c6 56 addf r6
280: 280 00014CA9 # asm("addf r6"); /* ADDF #032 */
281: 281 00014CA9 c6 56 addf r6
282: 282 00014CAB # asm("addf r6"); /* ADDF #033 */
283: 283 00014CAB c6 56 addf r6
284: 284 00014CAD # asm("addf r6"); /* ADDF #034 */
285: 285 00014CAD c6 56 addf r6
286: 286 00014CAF # asm("addf r6"); /* ADDF #035 */
287: 287 00014CAF c6 56 addf r6
288: 288 00014CB1 # asm("addf r6"); /* ADDF #036 */
289: 289 00014CB1 c6 56 addf r6
290: 290 00014CB3 # asm("addf r6"); /* ADDF #037 */
291: 291 00014CB3 c6 56 addf r6
292: 292 00014CB5 # asm("addf r6"); /* ADDF #038 */
293: 293 00014CB5 c6 56 addf r6
294: 294 00014CB7 # asm("addf r6"); /* ADDF #039 */
295: 295 00014CB7 c6 56 addf r6
296: 296 00014CB9 # asm("addf r6"); /* ADDF #040 */
297: 297 00014CB9 c6 56 addf r6
298: 298 00014CBB # asm("addf r6"); /* ADDF #041 */
299: 299 00014CBB c6 56 addf r6
300: 300 00014CBD # asm("addf r6"); /* ADDF #042 */
301: 301 00014CBD c6 56 addf r6
302: 302 00014CBF # asm("addf r6"); /* ADDF #043 */
303: 303 00014CBF c6 56 addf r6
304: 304 00014CC1 # asm("addf r6"); /* ADDF #044 */
305: 305 00014CC1 c6 56 addf r6
306: 306 00014CC3 # asm("addf r6"); /* ADDF #045 */
307: 307 00014CC3 c6 56 addf r6
308: 308 00014CC5 # asm("addf r6"); /* ADDF #046 */
309: 309 00014CC5 c6 56 addf r6
310: 310 00014CC7 # asm("addf r6"); /* ADDF #047 */
311: 311 00014CC7 c6 56 addf r6
312: 312 00014CC9 # asm("addf r6"); /* ADDF #048 */
313: 313 00014CC9 c6 56 addf r6
314: 314 00014CCB # asm("addf r6"); /* ADDF #049 */
315: 315 00014CCB c6 56 addf r6
316: 316 00014CCD # asm("addf r6"); /* ADDF #050 */
317: 317 00014CCD c6 56 addf r6
318: 318 00014CCF # asm("addf r6"); /* ADDF #051 */
319: 319 00014CCF c6 56 addf r6
320: 320 00014CD1 # asm("addf r6"); /* ADDF #052 */
321: 321 00014CD1 c6 56 addf r6
322: 322 00014CD3 # asm("addf r6"); /* ADDF #053 */
323: 323 00014CD3 c6 56 addf r6
324: 324 00014CD5 # asm("addf r6"); /* ADDF #054 */
325: 325 00014CD5 c6 56 addf r6
326: 326 00014CD7 # asm("addf r6"); /* ADDF #055 */
327: 327 00014CD7 c6 56 addf r6
328: 328 00014CD9 # asm("addf r6"); /* ADDF #056 */
329: 329 00014CD9 c6 56 addf r6
330: 330 00014CDB # asm("addf r6"); /* ADDF #057 */
331: 331 00014CDB c6 56 addf r6
332: 332 00014CDD # asm("addf r6"); /* ADDF #058 */
333: 333 00014CDD c6 56 addf r6
334: 334 00014CDF # asm("addf r6"); /* ADDF #059 */
335: 335 00014CDF c6 56 addf r6
336: 336 00014CE1 # asm("addf r6"); /* ADDF #060 */
337: 337 00014CE1 c6 56 addf r6
338: 338 00014CE3 # asm("addf r6"); /* ADDF #061 */
339: 339 00014CE3 c6 56 addf r6
340: 340 00014CE5 # asm("addf r6"); /* ADDF #062 */
341: 341 00014CE5 c6 56 addf r6
342: 342 00014CE7 # asm("addf r6"); /* ADDF #063 */
343: 343 00014CE7 c6 56 addf r6
344: 344 00014CE9 # asm("addf r6"); /* ADDF #064 */
345: 345 00014CE9 c6 56 addf r6
346: 346 00014CEB # asm("addf r6"); /* ADDF #065 */
347: 347 00014CEB c6 56 addf r6
348: 348 00014CED # asm("addf r6"); /* ADDF #066 */
349: 349 00014CED c6 56 addf r6
350: 350 00014CEF # asm("addf r6"); /* ADDF #067 */
351: 351 00014CEF c6 56 addf r6
352: 352 00014CF1 # asm("addf r6"); /* ADDF #068 */
353: 353 00014CF1 c6 56 addf r6
354: 354 00014CF3 # asm("addf r6"); /* ADDF #069 */
355: 355 00014CF3 c6 56 addf r6
356: 356 00014CF5 # asm("addf r6"); /* ADDF #070 */
357: 357 00014CF5 c6 56 addf r6
358: 358 00014CF7 # asm("addf r6"); /* ADDF #071 */
359: 359 00014CF7 c6 56 addf r6
360: 360 00014CF9 # asm("addf r6"); /* ADDF #072 */
361: 361 00014CF9 c6 56 addf r6
362: 362 00014CFB # asm("addf r6"); /* ADDF #073 */
363: 363 00014CFB c6 56 addf r6
364: 364 00014CFD # asm("addf r6"); /* ADDF #074 */
365: 365 00014CFD c6 56 addf r6
366: 366 00014CFF # asm("addf r6"); /* ADDF #075 */
367: 367 00014CFF c6 56 addf r6
368: 368 00014D01 # asm("addf r6"); /* ADDF #076 */
369: 369 00014D01 c6 56 addf r6
370: 370 00014D03 # asm("addf r6"); /* ADDF #077 */
371: 371 00014D03 c6 56 addf r6
372: 372 00014D05 # asm("addf r6"); /* ADDF #078 */
373: 373 00014D05 c6 56 addf r6
374: 374 00014D07 # asm("addf r6"); /* ADDF #079 */
375: 375 00014D07 c6 56 addf r6
376: 376 00014D09 # asm("addf r6"); /* ADDF #080 */
377: 377 00014D09 c6 56 addf r6
378: 378 00014D0B # asm("addf r6"); /* ADDF #081 */
379: 379 00014D0B c6 56 addf r6
380: 380 00014D0D # asm("addf r6"); /* ADDF #082 */
381: 381 00014D0D c6 56 addf r6
382: 382 00014D0F # asm("addf r6"); /* ADDF #083 */
383: 383 00014D0F c6 56 addf r6
384: 384 00014D11 # asm("addf r6"); /* ADDF #084 */
385: 385 00014D11 c6 56 addf r6
386: 386 00014D13 # asm("addf r6"); /* ADDF #085 */
387: 387 00014D13 c6 56 addf r6
388: 388 00014D15 # asm("addf r6"); /* ADDF #086 */
389: 389 00014D15 c6 56 addf r6
390: 390 00014D17 # asm("addf r6"); /* ADDF #087 */
391: 391 00014D17 c6 56 addf r6
392: 392 00014D19 # asm("addf r6"); /* ADDF #088 */
393: 393 00014D19 c6 56 addf r6
394: 394 00014D1B # asm("addf r6"); /* ADDF #089 */
395: 395 00014D1B c6 56 addf r6
396: 396 00014D1D # asm("addf r6"); /* ADDF #090 */
397: 397 00014D1D c6 56 addf r6
398: 398 00014D1F # asm("addf r6"); /* ADDF #091 */
399: 399 00014D1F c6 56 addf r6
400: 400 00014D21 # asm("addf r6"); /* ADDF #092 */
401: 401 00014D21 c6 56 addf r6
402: 402 00014D23 # asm("addf r6"); /* ADDF #093 */
403: 403 00014D23 c6 56 addf r6
404: 404 00014D25 # asm("addf r6"); /* ADDF #094 */
405: 405 00014D25 c6 56 addf r6
406: 406 00014D27 # asm("addf r6"); /* ADDF #095 */
407: 407 00014D27 c6 56 addf r6
408: 408 00014D29 # asm("addf r6"); /* ADDF #096 */
409: 409 00014D29 c6 56 addf r6
410: 410 00014D2B # asm("addf r6"); /* ADDF #097 */
411: 411 00014D2B c6 56 addf r6
412: 412 00014D2D # asm("addf r6"); /* ADDF #098 */
413: 413 00014D2D c6 56 addf r6
414: 414 00014D2F # asm("addf r6"); /* ADDF #099 */
415: 415 00014D2F c6 56 addf r6
416: 416 00014D31 # asm("addf r6"); /* ADDF #100 */
417: 417 00014D31 c6 56 addf r6
418: 418 00014D33 # asm("addf r6"); /* ADDF #101 */
419: 419 00014D33 c6 56 addf r6
420: 420 00014D35 # asm("addf r6"); /* ADDF #102 */
421: 421 00014D35 c6 56 addf r6
422: 422 00014D37 # asm("addf r6"); /* ADDF #103 */
423: 423 00014D37 c6 56 addf r6
424: 424 00014D39 # asm("addf r6"); /* ADDF #104 */
425: 425 00014D39 c6 56 addf r6
426: 426 00014D3B # asm("addf r6"); /* ADDF #105 */
427: 427 00014D3B c6 56 addf r6
428: 428 00014D3D # asm("addf r6"); /* ADDF #106 */
429: 429 00014D3D c6 56 addf r6
430: 430 00014D3F # asm("addf r6"); /* ADDF #107 */
431: 431 00014D3F c6 56 addf r6
432: 432 00014D41 # asm("addf r6"); /* ADDF #108 */
433: 433 00014D41 c6 56 addf r6
434: 434 00014D43 # asm("addf r6"); /* ADDF #109 */
435: 435 00014D43 c6 56 addf r6
436: 436 00014D45 # asm("addf r6"); /* ADDF #110 */
437: 437 00014D45 c6 56 addf r6
438: 438 00014D47 # asm("addf r6"); /* ADDF #111 */
439: 439 00014D47 c6 56 addf r6
440: 440 00014D49 # asm("addf r6"); /* ADDF #112 */
441: 441 00014D49 c6 56 addf r6
442: 442 00014D4B # asm("addf r6"); /* ADDF #113 */
443: 443 00014D4B c6 56 addf r6
444: 444 00014D4D # asm("addf r6"); /* ADDF #114 */
445: 445 00014D4D c6 56 addf r6
446: 446 00014D4F # asm("addf r6"); /* ADDF #115 */
447: 447 00014D4F c6 56 addf r6
448: 448 00014D51 # asm("addf r6"); /* ADDF #116 */
449: 449 00014D51 c6 56 addf r6
450: 450 00014D53 # asm("addf r6"); /* ADDF #117 */
451: 451 00014D53 c6 56 addf r6
452: 452 00014D55 # asm("addf r6"); /* ADDF #118 */
453: 453 00014D55 c6 56 addf r6
454: 454 00014D57 # asm("addf r6"); /* ADDF #119 */
455: 455 00014D57 c6 56 addf r6
456: 456 00014D59 # asm("addf r6"); /* ADDF #120 */
457: 457 00014D59 c6 56 addf r6
458: 458 00014D5B # asm("addf r6"); /* ADDF #121 */
459: 459 00014D5B c6 56 addf r6
460: 460 00014D5D # asm("addf r6"); /* ADDF #122 */
461: 461 00014D5D c6 56 addf r6
462: 462 00014D5F # asm("addf r6"); /* ADDF #123 */
463: 463 00014D5F c6 56 addf r6
464: 464 00014D61 # asm("addf r6"); /* ADDF #124 */
465: 465 00014D61 c6 56 addf r6
466: 466 00014D63 # asm("addf r6"); /* ADDF #125 */
467: 467 00014D63 c6 56 addf r6
468: 468 00014D65 # asm("addf r6"); /* ADDF #126 */
469: 469 00014D65 c6 56 addf r6
470: 470 00014D67 # asm("addf r6"); /* ADDF #127 */
471: 471 00014D67 c6 56 addf r6
472: 472 00014D69 # asm("addf r6"); /* ADDF #128 */
473: 473 00014D69 c6 56 addf r6
474: 474 00014D6B # /*
475: 475 00014D6B # * Thank god that's over with!!! now raise the IPL
476: 476 00014D6B # */
477: 477 00014D6B #
478: 478 00014D6B # asm("mtpr $0x1f,$8"); /* disable clock events */
479: 479 00014D6B ad 1f 08 mtpr $0x1f,$8
480: 480 00014D6E # if( ( force_loop ) ||
481: 481 00014D6E # ( (clock_retrys-- ) && /* keep trying to get */
482: 482 00014D6E # (!rtc_occurred) ) ) /* a clock event */
483: 483 00014D6E 5d effffffda0 tstl _force_loop
484: 484 00014D74 21 19 jneq L9999
485: 485 00014D76 0d effffffd98 50 movl _clock_retrys,r0
486: 486 00014D7D 7d effffffd91 decl _clock_retrys
487: 487 00014D83 5d 50 tstl r0
488: 488 00014D85 31 0e jeql L406
489: 489 00014D87 5d effffffd87 tstl _rtc_occurred
490: 490 00014D8D 21 06 jneq L406
491: 491 00014D8F L9999:
492: 492 00014D8F # asm("jmp clock_add_lp");;
493: 493 00014D8F 71 effffffe91 jmp clock_add_lp
494: 494 00014D95 L406:
495: 495 00014D95 # asm("bicpsw $0x60"); /* disable ovfl & undfl */
496: 496 00014D95 9b 8860 bicpsw $0x60
497: 497 00014D98 # }
498: 498 00014D98 40 ret#2
499: 499 00014D99 .set L400,0x0
500: 500 00014D99 L402:
501: 501 00014D99 13 fe7f jbr L403
502: 502 00014D9C .data
503: 503 000004a8 * .text
504: 504 00014D9C .align 1
505: 505 00014D9C .globl _print_clock_er
506: 506 00014D9C _print_clock_er:
507: 507 00014D9C 0000 .word L407
508: 508 00014D9E #
509: 509 00014D9E #
510: 510 00014D9E #
511: 511 00014D9E #
512: 512 00014D9E #
513: 513 00014D9E # /****************************************************************************
514: 514 00014D9E # * Report an Bad Result Error
515: 515 00014D9E # *
516: 516 00014D9E # * Cycle: xx. EVT test xx. subtest xx. wrong ADDF result with Clock Events
517: 517 00014D9E # * Testing clock event during 128 ADDF's. -instruction cache {hits / misses}
518: 518 00014D9E # * operand = xxxxxxxx, result = xxxxxxxx, expected = xxxxxxxx
519: 519 00014D9E # ****************************************************************************/
520: 520 00014D9E # print_clock_er()
521: 521 00014D9E # {
522: 522 00014D9E 13 0100 jbr L409
523: 523 00014DA1 L410:
524: 524 00014DA1 # if( !error ) { /* 1st error? */
525: 525 00014DA1 5d effffffd6d tstl _error
526: 526 00014DA7 21 14 jneq L411
527: 527 00014DA9 # writes(" \n"); /* start a new print line */
528: 528 00014DA9 .data 1
529: 529 000004a8 * L413:
530: 530 000004a8 * 200A00 .ascii " \12\0"
531: 531 000004ab * .text
532: 532 00014DA9 dd 8f000004a8 pushl $L413
533: 533 00014DAF fe 08 effffffd5e callf $8,_writes
534: 534 00014DB6 # error = TRUE;
535: 535 00014DB6 0d 01 effffffd57 movl $1,_error
536: 536 00014DBD # }
537: 537 00014DBD # writes("Cycle: ");
538: 538 00014DBD L411:
539: 539 00014DBD .data 1
540: 540 000004ab * L414:
541: 541 000004ab * 4379636C653A2000 .ascii "Cycle: \0"
542: 542 000004b3 * .text
543: 543 00014DBD dd 8f000004ab pushl $L414
544: 544 00014DC3 fe 08 effffffd4a callf $8,_writes
545: 545 00014DCA # writed( cycle );
546: 546 00014DCA dd effffffd44 pushl _cycle
547: 547 00014DD0 fe 08 effffffd3d callf $8,_writed
548: 548 00014DD7 # writes(" EVT test ");
549: 549 00014DD7 .data 1
550: 550 000004b3 * L416:
551: 551 000004b3 * 202045565420746573742000 .ascii " EVT test \0"
552: 552 000004bf * .text
553: 553 00014DD7 dd 8f000004b3 pushl $L416
554: 554 00014DDD fe 08 effffffd30 callf $8,_writes
555: 555 00014DE4 # writed( test_no );
556: 556 00014DE4 dd effffffd2a pushl _test_no
557: 557 00014DEA fe 08 effffffd23 callf $8,_writed
558: 558 00014DF1 # writes(". subtest ");
559: 559 00014DF1 .data 1
560: 560 000004bf * L417:
561: 561 000004bf * 2E20737562746573742000 .ascii ". subtest \0"
562: 562 000004ca * .text
563: 563 00014DF1 dd 8f000004bf pushl $L417
564: 564 00014DF7 fe 08 effffffd16 callf $8,_writes
565: 565 00014DFE # writed( subtest );
566: 566 00014DFE dd effffffd10 pushl _subtest
567: 567 00014E04 fe 08 effffffd09 callf $8,_writed
568: 568 00014E0B # writes(". wrong ADDF result with Clock Events\n");
569: 569 00014E0B .data 1
570: 570 000004ca * L418:
571: 571 000004ca * 2E202077726F6E67204144444 .ascii ". wrong ADDF result with Clock Events\12\0"
572: 620726573756C742077697468
573: 20436C6F636B204576656E747
574: 30A00
575: 572 000004f2 * .text
576: 573 00014E0B dd 8f000004ca pushl $L418
577: 574 00014E11 fe 08 effffffcfc callf $8,_writes
578: 575 00014E18 # writes(
579: 576 00014E18 # "Testing clock event during 128 ADDF's with instruction cache ");
580: 577 00014E18 .data 1
581: 578 000004f2 * L419:
582: 579 000004f2 * 54657374696E6720636C6F636 .ascii "Testing clock event during 128 ADDF's with instruction cache \0"
583: B206576656E7420647572696E
584: 6720313238204144444627732
585: 07769746820696E7374727563
586: 74696F6E2063616368652000
587: 580 00000530 * .text
588: 581 00014E18 dd 8f000004f2 pushl $L419
589: 582 00014E1E fe 08 effffffcef callf $8,_writes
590: 583 00014E25 # if( i_cache_hit )
591: 584 00014E25 5d effffffce9 tstl _i_cache_hit
592: 585 00014E2B 31 0f jeql L420
593: 586 00014E2D # writes("hits\n");
594: 587 00014E2D .data 1
595: 588 00000530 * L421:
596: 589 00000530 * 686974730A00 .ascii "hits\12\0"
597: 590 00000536 * .text
598: 591 00014E2D dd 8f00000530 pushl $L421
599: 592 00014E33 fe 08 effffffcda callf $8,_writes
600: 593 00014E3A # else
601: 594 00014E3A 11 0d jbr L422
602: 595 00014E3C L420:
603: 596 00014E3C # writes("misses\n");
604: 597 00014E3C .data 1
605: 598 00000536 * L423:
606: 599 00000536 * 6D69737365730A00 .ascii "misses\12\0"
607: 600 0000053e * .text
608: 601 00014E3C dd 8f00000536 pushl $L423
609: 602 00014E42 fe 08 effffffccb callf $8,_writes
610: 603 00014E49 L422:
611: 604 00014E49 # writes("operand = ");
612: 605 00014E49 .data 1
613: 606 0000053e * L424:
614: 607 0000053e * 6F706572616E64203D2000 .ascii "operand = \0"
615: 608 00000549 * .text
616: 609 00014E49 dd 8f0000053e pushl $L424
617: 610 00014E4F fe 08 effffffcbe callf $8,_writes
618: 611 00014E56 # write32h( sgl_value_1 ); /* write the operand */
619: 612 00014E56 dd effffffcb8 pushl _sgl_value_1
620: 613 00014E5C fe 08 effffffcb1 callf $8,_write32h
621: 614 00014E63 # writes(", result = ");
622: 615 00014E63 .data 1
623: 616 00000549 * L426:
624: 617 00000549 * 2C2020726573756C74203D200 .ascii ", result = \0"
625: 0
626: 618 00000556 * .text
627: 619 00014E63 dd 8f00000549 pushl $L426
628: 620 00014E69 fe 08 effffffca4 callf $8,_writes
629: 621 00014E70 # write32h( sgl_st_acc );
630: 622 00014E70 dd effffffc9e pushl _sgl_st_acc
631: 623 00014E76 fe 08 effffffc97 callf $8,_write32h
632: 624 00014E7D # writes(", expected = ");
633: 625 00014E7D .data 1
634: 626 00000556 * L427:
635: 627 00000556 * 2C20206578706563746564203 .ascii ", expected = \0"
636: D2000
637: 628 00000565 * .text
638: 629 00014E7D dd 8f00000556 pushl $L427
639: 630 00014E83 fe 08 effffffc8a callf $8,_writes
640: 631 00014E8A # write32h( sgl_expected );
641: 632 00014E8A dd effffffc84 pushl _sgl_expected
642: 633 00014E90 fe 08 effffffc7d callf $8,_write32h
643: 634 00014E97 # writec('\n');
644: 635 00014E97 dd 0a pushl $10
645: 636 00014E99 fe 08 effffffc74 callf $8,_writec
646: 637 00014EA0 # }
647: 638 00014EA0 40 ret#2
648: 639 00014EA1 .set L407,0x0
649: 640 00014EA1 L409:
650: 641 00014EA1 13 fefd jbr L410
651: 642 00014EA4 .data
652: 643 000004a8 * .text
653: 644 00014EA4 .align 1
654: 645 00014EA4 .globl _who_pulled_the_plug
655: 646 00014EA4 _who_pulled_the_plug:
656: 647 00014EA4 0000 .word L429
657: 648 00014EA6 #
658: 649 00014EA6 #
659: 650 00014EA6 #
660: 651 00014EA6 # /****************************************************************************
661: 652 00014EA6 # * Report that no clock events were seen
662: 653 00014EA6 # *
663: 654 00014EA6 # * Cycle: xx. EVT test xx. subtest xx. no Clock Events were detected
664: 655 00014EA6 # * Testing clock event during 128 ADDF's. -instruction cache {hits / misses}
665: 656 00014EA6 # ****************************************************************************/
666: 657 00014EA6 # who_pulled_the_plug()
667: 658 00014EA6 # {
668: 659 00014EA6 13 00c5 jbr L431
669: 660 00014EA9 L432:
670: 661 00014EA9 # if( prt_error )
671: 662 00014EA9 5d effffffc65 tstl _prt_error
672: 663 00014EAF 21 03 13 00a8 jeql L433
673: 664 00014EB4 # {
674: 665 00014EB4 # if( !error ) { /* 1st error? */
675: 666 00014EB4 5d effffffc5a tstl _error
676: 667 00014EBA 21 14 jneq L434
677: 668 00014EBC # writes(" \n"); /* start a new print line */
678: 669 00014EBC .data 1
679: 670 00000565 * L435:
680: 671 00000565 * 200A00 .ascii " \12\0"
681: 672 00000568 * .text
682: 673 00014EBC dd 8f00000565 pushl $L435
683: 674 00014EC2 fe 08 effffffc4b callf $8,_writes
684: 675 00014EC9 # error = TRUE;
685: 676 00014EC9 0d 01 effffffc44 movl $1,_error
686: 677 00014ED0 # }
687: 678 00014ED0 # writes("Cycle: ");
688: 679 00014ED0 L434:
689: 680 00014ED0 .data 1
690: 681 00000568 * L436:
691: 682 00000568 * 4379636C653A2000 .ascii "Cycle: \0"
692: 683 00000570 * .text
693: 684 00014ED0 dd 8f00000568 pushl $L436
694: 685 00014ED6 fe 08 effffffc37 callf $8,_writes
695: 686 00014EDD # writed( cycle );
696: 687 00014EDD dd effffffc31 pushl _cycle
697: 688 00014EE3 fe 08 effffffc2a callf $8,_writed
698: 689 00014EEA # writes(" EVT test ");
699: 690 00014EEA .data 1
700: 691 00000570 * L437:
701: 692 00000570 * 202045565420746573742000 .ascii " EVT test \0"
702: 693 0000057c * .text
703: 694 00014EEA dd 8f00000570 pushl $L437
704: 695 00014EF0 fe 08 effffffc1d callf $8,_writes
705: 696 00014EF7 # writed( test_no );
706: 697 00014EF7 dd effffffc17 pushl _test_no
707: 698 00014EFD fe 08 effffffc10 callf $8,_writed
708: 699 00014F04 # writes(". subtest ");
709: 700 00014F04 .data 1
710: 701 0000057c * L438:
711: 702 0000057c * 2E20737562746573742000 .ascii ". subtest \0"
712: 703 00000587 * .text
713: 704 00014F04 dd 8f0000057c pushl $L438
714: 705 00014F0A fe 08 effffffc03 callf $8,_writes
715: 706 00014F11 # writed( subtest );
716: 707 00014F11 dd effffffbfd pushl _subtest
717: 708 00014F17 fe 08 effffffbf6 callf $8,_writed
718: 709 00014F1E # writes(". No Clock Events were detected\n");
719: 710 00014F1E .data 1
720: 711 00000587 * L439:
721: 712 00000587 * 2E20204E6F20436C6F636B204 .ascii ". No Clock Events were detected\12\0"
722: 576656E747320776572652064
723: 657465637465640A00
724: 713 000005a9 * .text
725: 714 00014F1E dd 8f00000587 pushl $L439
726: 715 00014F24 fe 08 effffffbe9 callf $8,_writes
727: 716 00014F2B # writes(
728: 717 00014F2B # "\nTesting clock event during 128 ADDF's with instruction cache ");
729: 718 00014F2B .data 1
730: 719 000005a9 * L440:
731: 720 000005a9 * 0A54657374696E6720636C6F6 .ascii "\12Testing clock event during 128 ADDF's with instruction cache \0"
732: 36B206576656E742064757269
733: 6E67203132382041444446277
734: 3207769746820696E73747275
735: 6374696F6E206361636865200
736: 0
737: 721 000005e8 * .text
738: 722 00014F2B dd 8f000005a9 pushl $L440
739: 723 00014F31 fe 08 effffffbdc callf $8,_writes
740: 724 00014F38 # if( i_cache_hit )
741: 725 00014F38 5d effffffbd6 tstl _i_cache_hit
742: 726 00014F3E 31 0f jeql L441
743: 727 00014F40 # writes("hits\n");
744: 728 00014F40 .data 1
745: 729 000005e8 * L442:
746: 730 000005e8 * 686974730A00 .ascii "hits\12\0"
747: 731 000005ee * .text
748: 732 00014F40 dd 8f000005e8 pushl $L442
749: 733 00014F46 fe 08 effffffbc7 callf $8,_writes
750: 734 00014F4D # else
751: 735 00014F4D 11 0d jbr L443
752: 736 00014F4F L441:
753: 737 00014F4F # writes("misses\n");
754: 738 00014F4F .data 1
755: 739 000005ee * L444:
756: 740 000005ee * 6D69737365730A00 .ascii "misses\12\0"
757: 741 000005f6 * .text
758: 742 00014F4F dd 8f000005ee pushl $L444
759: 743 00014F55 fe 08 effffffbb8 callf $8,_writes
760: 744 00014F5C L443:
761: 745 00014F5C # }
762: 746 00014F5C # if( halt_flg )
763: 747 00014F5C L433:
764: 748 00014F5C 5d effffffbb2 tstl _halt_flg
765: 749 00014F62 31 09 jeql L445
766: 750 00014F64 # pipe17_halt( 2 ); /* halt with code = 2 */
767: 751 00014F64 dd 02 pushl $2
768: 752 00014F66 fe 08 ef00000005 callf $8,_pipe17_halt
769: 753 00014F6D # }
770: 754 00014F6D L445:
771: 755 00014F6D 40 ret#2
772: 756 00014F6E .set L429,0x0
773: 757 00014F6E L431:
774: 758 00014F6E 13 ff38 jbr L432
775: 759 00014F71 .data
776: 760 000004a8 * .text
777: 761 00014F71 00 .align 1
778: 762 00014F72 .globl _pipe17_halt
779: 763 00014F72 _pipe17_halt:
780: 764 00014F72 0000 .word L446
781: 765 00014F74 #
782: 766 00014F74 #
783: 767 00014F74 #
784: 768 00014F74 #
785: 769 00014F74 #
786: 770 00014F74 # /****************************************************************************
787: 771 00014F74 # * halt on error routine
788: 772 00014F74 # ****************************************************************************/
789: 773 00014F74 # pipe17_halt( code )
790: 774 00014F74 # int code; /* error code to halt with */
791: 775 00014F74 # {
792: 776 00014F74 11 42 jbr L448
793: 777 00014F76 L449:
794: 778 00014F76 # err_code = code;
795: 779 00014F76 0d ad04 effffffb96 movl 4(fp),_err_code
796: 780 00014F7E # asm("movl _test_no,r0"); /* r0 = test number */
797: 781 00014F7E 0d effffffb90 50 movl _test_no,r0
798: 782 00014F85 # asm("movl _subtest,r1"); /* r1 = subtest number */
799: 783 00014F85 0d effffffb89 51 movl _subtest,r1
800: 784 00014F8C # asm("movl _err_code,r2"); /* r2 = error code */
801: 785 00014F8C 0d effffffb82 52 movl _err_code,r2
802: 786 00014F93 # asm("movl _cycle,r3"); /* r3 = cycle count */
803: 787 00014F93 0d effffffb7b 53 movl _cycle,r3
804: 788 00014F9A # asm("movl _sgl_value_1,r4"); /* r4 = operand used */
805: 789 00014F9A 0d effffffb74 54 movl _sgl_value_1,r4
806: 790 00014FA1 # asm("movl _sgl_st_acc,r5"); /* r5 = final value */
807: 791 00014FA1 0d effffffb6d 55 movl _sgl_st_acc,r5
808: 792 00014FA8 # asm("movl _sgl_expected,r6"); /* r6 = expected value */
809: 793 00014FA8 0d effffffb66 56 movl _sgl_expected,r6
810: 794 00014FAF # asm("movl _i_cache_hit,r7"); /* r7 = 1 if cache hits */
811: 795 00014FAF 0d effffffb5f 57 movl _i_cache_hit,r7
812: 796 00014FB6 # asm("halt"); /* HALT ... */
813: 797 00014FB6 00 halt
814: 798 00014FB7 # }
815: 799 00014FB7 40 ret#2
816: 800 00014FB8 .set L446,0x0
817: 801 00014FB8 L448:
818: 802 00014FB8 11 bc jbr L449
819: 803 00014FBA .data
820: 804 000004a8 * #
821: 805 000004a8 * #
822: 805 000004a8 * #
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.