|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 00000a60 * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _expf
6: 6 00000000 _expf:
7: 7 00020B5C 0000 .word L215
8: 8 00020B5E # #include "fpp_defs.h"
9: 9 00020B5E #
10: 10 00020B5E #
11: 11 00020B5E #
12: 12 00020B5E # /***************************************************************************
13: 13 00020B5E # *
14: 14 00020B5E # * EXPF - SINGLE PRECISION FLOATING POINT EXPF FUNCTION TEST
15: 15 00020B5E # *
16: 16 00020B5E # * EXPF TEST MONITOR
17: 17 00020B5E # *
18: 18 00020B5E # *****************************************************************************/
19: 19 00020B5E # expf()
20: 20 00020B5E # {
21: 21 00020B5E 11 4f jbr L217
22: 22 00020B60 L218:
23: 23 00020B60 # asm(".globl _expf_t");
24: 24 00020B60 .globl _expf_t
25: 25 00020B60 # asm("_expf_t:"); /* entry address */
26: 26 00020B60 _expf_t:
27: 27 00020B60 # if( ( cycle == 1 ) && ( prt_hdrs ) ) /* print headers on 1st pass */
28: 28 00020B60 1d effffffff6 01 cmpl _cycle,$1
29: 29 00020B67 21 15 jneq L219
30: 30 00020B69 5d efffffffed tstl _prt_hdrs
31: 31 00020B6F 31 0d jeql L219
32: 32 00020B71 # {
33: 33 00020B71 # writes(" EXPF");
34: 34 00020B71 .data 1
35: 35 00000a60 * L221:
36: 36 00000a60 * 204558504600 .ascii " EXPF\0"
37: 37 00000a66 * .text
38: 38 00020B71 dd 8f00000a60 pushl $L221
39: 39 00020B77 fe 08 efffffffde callf $8,_writes
40: 40 00020B7E # }
41: 41 00020B7E # expf_1(); /* test expf with delay */
42: 42 00020B7E L219:
43: 43 00020B7E fe 04 ef0000002d callf $4,_expf_1
44: 44 00020B85 # expf_2(); /* test expf */
45: 45 00020B85 fe 04 ef00000198 callf $4,_expf_2
46: 46 00020B8C # expf_3(); /* register corruption */
47: 47 00020B8C fe 04 ef000002f1 callf $4,_expf_3
48: 48 00020B93 # expf_4(); /* test the PSL */
49: 49 00020B93 fe 04 ef000004d4 callf $4,_expf_4
50: 50 00020B9A # expf_5(); /* pipelined entry */
51: 51 00020B9A fe 04 ef0000067d callf $4,_expf_5
52: 52 00020BA1 # expf_6(); /* pipelined exit */
53: 53 00020BA1 fe 04 ef000007d2 callf $4,_expf_6
54: 54 00020BA8 # asm("jmp *return"); /* return to the test monitor */
55: 55 00020BA8 71 ffffffffae jmp *return
56: 56 00020BAE # }
57: 57 00020BAE 40 ret#2
58: 58 00020BAF .set L215,0x0
59: 59 00020BAF L217:
60: 60 00020BAF 11 af jbr L218
61: 61 00020BB1 .data
62: 62 00000a60 * .text
63: 63 00020BB1 00 .align 1
64: 64 00020BB2 .globl _expf_1
65: 65 00020BB2 _expf_1:
66: 66 00020BB2 0000 .word L228
67: 67 00020BB4 #
68: 68 00020BB4 #
69: 69 00020BB4 #
70: 70 00020BB4 # /***************************************************************************
71: 71 00020BB4 # *
72: 72 00020BB4 # * SUBTEST 1 - EXPF
73: 73 00020BB4 # *
74: 74 00020BB4 # ***************************************************************************/
75: 75 00020BB4 # expf_1()
76: 76 00020BB4 # {
77: 77 00020BB4 13 016a jbr L230
78: 78 00020BB7 L231:
79: 79 00020BB7 # #define DELAY 10 /* wait 20 ticks between EXPF & STF */
80: 80 00020BB7 # force_loop = FALSE; /* clear the LOOP flag */
81: 81 00020BB7 4d efffffff9f clrl _force_loop
82: 82 00020BBD # subtest = 1;
83: 83 00020BBD 0d 01 efffffff98 movl $1,_subtest
84: 84 00020BC4 # index = 0;
85: 85 00020BC4 4d efffffff92 clrl _index
86: 86 00020BCA # do
87: 87 00020BCA L234:
88: 88 00020BCA # {
89: 89 00020BCA # sgl_ld_acc = expf_1_data[index].ld; /* get the operand */
90: 90 00020BCA 0d efffffff8c 50 movl _index,r0
91: 91 00020BD1 48 03 50 50 shll $3,r0,r0
92: 92 00020BD5 0d e000000000 efffffff7c movl _expf_1_data(r0),_sgl_ld_acc
93: 93 00020BE0 # sgl_expected = expf_1_data[index].exp; /* get expected results */
94: 94 00020BE0 0d efffffff76 50 movl _index,r0
95: 95 00020BE7 48 03 50 50 shll $3,r0,r0
96: 96 00020BEB 0d e000000004 efffffff66 movl _expf_1_data+4(r0),_sgl_expected
97: 97 00020BF6 # sgl_dummy1 = DELAY;
98: 98 00020BF6 0d 0a efffffff5f movl $10,_sgl_dummy1
99: 99 00020BFD # /*
100: 100 00020BFD # * If LOOP ON ERROR is set, this is the loop for this subtest.
101: 101 00020BFD # * The force loop flag is set after the first error.
102: 102 00020BFD # */
103: 103 00020BFD # asm("_expf_1_lp1:");
104: 104 00020BFD _expf_1_lp1:
105: 105 00020BFD # asm("movl _sgl_ld_acc,r4"); /* set the data to load */
106: 106 00020BFD 0d efffffff59 54 movl _sgl_ld_acc,r4
107: 107 00020C04 # asm("ldf r4"); /* load the accumulator */
108: 108 00020C04 06 54 ldf r4
109: 109 00020C06 # asm("movl _sgl_dummy1,r0"); /* get the delay factor */
110: 110 00020C06 0d efffffff50 50 movl _sgl_dummy1,r0
111: 111 00020C0D # asm("expf"); /* get ACC.s' exponent */
112: 112 00020C0D 55 expf
113: 113 00020C0E # asm("1:");
114: 114 00020C0E 1:
115: 115 00020C0E # asm("decl r0"); /* delay to let the EXPF */
116: 116 00020C0E 7d 50 decl r0
117: 117 00020C10 # asm("bgtr 1b"); /* instruction finish */
118: 118 00020C10 41 fc bgtr 1b
119: 119 00020C12 # asm("stf r5"); /* store the result */
120: 120 00020C12 26 55 stf r5
121: 121 00020C14 # if( force_loop )
122: 122 00020C14 5d efffffff42 tstl _force_loop
123: 123 00020C1A 31 02 jeql L235
124: 124 00020C1C # asm("brb _expf_1_lp1");; /* loop on the error */
125: 125 00020C1C 11 df brb _expf_1_lp1
126: 126 00020C1E L235:
127: 127 00020C1E # /*
128: 128 00020C1E # * end error loop
129: 129 00020C1E # */
130: 130 00020C1E # asm("movl r5,_sgl_st_acc"); /* save the result */
131: 131 00020C1E 0d 55 efffffff37 movl r5,_sgl_st_acc
132: 132 00020C25 # if( sgl_st_acc != sgl_expected ) /* COMPARE the values */
133: 133 00020C25 1d efffffff31 efffffff2c cmpl _sgl_st_acc,_sgl_expected
134: 134 00020C30 21 03 13 00d2 jeql L236
135: 135 00020C35 # {
136: 136 00020C35 # errcnt++; /* bump the error count */
137: 137 00020C35 6d efffffff21 incl _errcnt
138: 138 00020C3B # if ( prt_error )
139: 139 00020C3B 5d efffffff1b tstl _prt_error
140: 140 00020C41 21 03 13 009b jeql L237
141: 141 00020C46 # {
142: 142 00020C46 # writes(" \n"); /* start a new print line */
143: 143 00020C46 .data 1
144: 144 00000a66 * L238:
145: 145 00000a66 * 200A00 .ascii " \12\0"
146: 146 00000a69 * .text
147: 147 00020C46 dd 8f00000a66 pushl $L238
148: 148 00020C4C fe 08 efffffff09 callf $8,_writes
149: 149 00020C53 # writes("cycle: ");
150: 150 00020C53 .data 1
151: 151 00000a69 * L239:
152: 152 00000a69 * 6379636C653A2000 .ascii "cycle: \0"
153: 153 00000a71 * .text
154: 154 00020C53 dd 8f00000a69 pushl $L239
155: 155 00020C59 fe 08 effffffefc callf $8,_writes
156: 156 00020C60 # writed( cycle );
157: 157 00020C60 dd effffffef6 pushl _cycle
158: 158 00020C66 fe 08 effffffeef callf $8,_writed
159: 159 00020C6D # writes(" EXPF test ");
160: 160 00020C6D .data 1
161: 161 00000a71 * L241:
162: 162 00000a71 * 2020204558504620746573742 .ascii " EXPF test \0"
163: 000
164: 163 00000a7f * .text
165: 164 00020C6D dd 8f00000a71 pushl $L241
166: 165 00020C73 fe 08 effffffee2 callf $8,_writes
167: 166 00020C7A # writed( test_no );
168: 167 00020C7A dd effffffedc pushl _test_no
169: 168 00020C80 fe 08 effffffed5 callf $8,_writed
170: 169 00020C87 # writes(", subtest 1 (delayed store) - BAD FINAL ACC\n");
171: 170 00020C87 .data 1
172: 171 00000a7f * L242:
173: 172 00000a7f * 2C20737562746573742031202 .ascii ", subtest 1 (delayed store) - BAD FINAL ACC\12\0"
174: 864656C617965642073746F72
175: 6529202D204241442046494E4
176: 14C204143430A00
177: 173 00000aac * .text
178: 174 00020C87 dd 8f00000a7f pushl $L242
179: 175 00020C8D fe 08 effffffec8 callf $8,_writes
180: 176 00020C94 # print_expf_data();
181: 177 00020C94 fe 04 ef0000083b callf $4,_print_expf_data
182: 178 00020C9B # writes(", data index = ");
183: 179 00020C9B .data 1
184: 180 00000aac * L244:
185: 181 00000aac * 2C20206461746120696E64657 .ascii ", data index = \0"
186: 8203D2000
187: 182 00000abd * .text
188: 183 00020C9B dd 8f00000aac pushl $L244
189: 184 00020CA1 fe 08 effffffeb4 callf $8,_writes
190: 185 00020CA8 # writed( index );
191: 186 00020CA8 dd effffffeae pushl _index
192: 187 00020CAE fe 08 effffffea7 callf $8,_writed
193: 188 00020CB5 # writec('\n');
194: 189 00020CB5 dd 0a pushl $10
195: 190 00020CB7 fe 08 effffffe9e callf $8,_writec
196: 191 00020CBE # writes(" Acc expected = ");
197: 192 00020CBE .data 1
198: 193 00000abd * L246:
199: 194 00000abd * 2020202020202020202020202 .ascii " Acc expected = \0"
200: 0202020202020202020416363
201: 206578706563746564203D200
202: 0
203: 195 00000ae3 * .text
204: 196 00020CBE dd 8f00000abd pushl $L246
205: 197 00020CC4 fe 08 effffffe91 callf $8,_writes
206: 198 00020CCB # write32h( sgl_expected );
207: 199 00020CCB dd effffffe8b pushl _sgl_expected
208: 200 00020CD1 fe 08 effffffe84 callf $8,_write32h
209: 201 00020CD8 # writec('\n');
210: 202 00020CD8 dd 0a pushl $10
211: 203 00020CDA fe 08 effffffe7b callf $8,_writec
212: 204 00020CE1 # }
213: 205 00020CE1 # if ( halt_flg ) /* halt on error? */
214: 206 00020CE1 L237:
215: 207 00020CE1 5d effffffe75 tstl _halt_flg
216: 208 00020CE7 31 09 jeql L248
217: 209 00020CE9 # expf_er_halt( BAD_ACC_HLT );
218: 210 00020CE9 dd 01 pushl $1
219: 211 00020CEB fe 08 ef00000820 callf $8,_expf_er_halt
220: 212 00020CF2 # if ( loop_on_err )
221: 213 00020CF2 L248:
222: 214 00020CF2 5d effffffe64 tstl _loop_on_err
223: 215 00020CF8 31 0d jeql L250
224: 216 00020CFA # {
225: 217 00020CFA # force_loop = TRUE; /* set the force loop flag */
226: 218 00020CFA 0d 01 effffffe5b movl $1,_force_loop
227: 219 00020D01 # asm("jmp _expf_1_lp1"); /* and loop */
228: 220 00020D01 71 effffffef6 jmp _expf_1_lp1
229: 221 00020D07 # }
230: 222 00020D07 # } /* end of compare error */
231: 223 00020D07 L250:
232: 224 00020D07 # } while( index++ < max_expf_1_index );
233: 225 00020D07 L236:
234: 226 00020D07 L233:
235: 227 00020D07 0d effffffe4f 50 movl _index,r0
236: 228 00020D0E 6d effffffe48 incl _index
237: 229 00020D14 1d 50 effffffe41 cmpl r0,_max_expf_1_index
238: 230 00020D1B 81 03 13 feaa jlss L234
239: 231 00020D20 L232:
240: 232 00020D20 # } /* end of subtest 1 */
241: 233 00020D20 40 ret#2
242: 234 00020D21 .set L228,0x0
243: 235 00020D21 L230:
244: 236 00020D21 13 fe93 jbr L231
245: 237 00020D24 .data
246: 238 00000a60 * .text
247: 239 00020D24 .align 1
248: 240 00020D24 .globl _expf_2
249: 241 00020D24 _expf_2:
250: 242 00020D24 0000 .word L251
251: 243 00020D26 #
252: 244 00020D26 #
253: 245 00020D26 #
254: 246 00020D26 # /***************************************************************************
255: 247 00020D26 # *
256: 248 00020D26 # * SUBTEST 2 - EXPF FUNCTION
257: 249 00020D26 # *
258: 250 00020D26 # ***************************************************************************/
259: 251 00020D26 # expf_2()
260: 252 00020D26 # {
261: 253 00020D26 13 0158 jbr L253
262: 254 00020D29 L254:
263: 255 00020D29 # force_loop = FALSE; /* clear the LOOP flag */
264: 256 00020D29 4d effffffe2d clrl _force_loop
265: 257 00020D2F # subtest = 2;
266: 258 00020D2F 0d 02 effffffe26 movl $2,_subtest
267: 259 00020D36 # index = 0;
268: 260 00020D36 4d effffffe20 clrl _index
269: 261 00020D3C # do
270: 262 00020D3C L257:
271: 263 00020D3C # {
272: 264 00020D3C # sgl_ld_acc = expf_1_data[index].ld; /* get the operand */
273: 265 00020D3C 0d effffffe1a 50 movl _index,r0
274: 266 00020D43 48 03 50 50 shll $3,r0,r0
275: 267 00020D47 0d e000000000 effffffe0a movl _expf_1_data(r0),_sgl_ld_acc
276: 268 00020D52 # sgl_expected = expf_1_data[index].exp; /* get expected results */
277: 269 00020D52 0d effffffe04 50 movl _index,r0
278: 270 00020D59 48 03 50 50 shll $3,r0,r0
279: 271 00020D5D 0d e000000004 effffffdf4 movl _expf_1_data+4(r0),_sgl_expected
280: 272 00020D68 # /*
281: 273 00020D68 # * If LOOP ON ERROR is set, this is the loop for this subtest.
282: 274 00020D68 # * The force loop flag is set after the first error.
283: 275 00020D68 # */
284: 276 00020D68 # asm("_expf_2_lp1:");
285: 277 00020D68 _expf_2_lp1:
286: 278 00020D68 # asm("movl _sgl_ld_acc,r4"); /* set the data to load */
287: 279 00020D68 0d effffffdee 54 movl _sgl_ld_acc,r4
288: 280 00020D6F # asm("ldf r4"); /* load the accumulator */
289: 281 00020D6F 06 54 ldf r4
290: 282 00020D71 # asm("expf"); /* get ACC.'s exponent */
291: 283 00020D71 55 expf
292: 284 00020D72 # asm("stf r5"); /* store the result */
293: 285 00020D72 26 55 stf r5
294: 286 00020D74 # if( force_loop )
295: 287 00020D74 5d effffffde2 tstl _force_loop
296: 288 00020D7A 31 02 jeql L258
297: 289 00020D7C # asm("brb _expf_2_lp1");; /* loop on the error */
298: 290 00020D7C 11 ea brb _expf_2_lp1
299: 291 00020D7E L258:
300: 292 00020D7E # /*
301: 293 00020D7E # * end error loop
302: 294 00020D7E # */
303: 295 00020D7E # asm("movl r5,_sgl_st_acc"); /* save the result */
304: 296 00020D7E 0d 55 effffffdd7 movl r5,_sgl_st_acc
305: 297 00020D85 # if( sgl_st_acc != sgl_expected ) /* COMPARE the values */
306: 298 00020D85 1d effffffdd1 effffffdcc cmpl _sgl_st_acc,_sgl_expected
307: 299 00020D90 21 03 13 00d2 jeql L259
308: 300 00020D95 # {
309: 301 00020D95 # errcnt++; /* bump the error count */
310: 302 00020D95 6d effffffdc1 incl _errcnt
311: 303 00020D9B # if ( prt_error )
312: 304 00020D9B 5d effffffdbb tstl _prt_error
313: 305 00020DA1 21 03 13 009b jeql L260
314: 306 00020DA6 # {
315: 307 00020DA6 # writes(" \n"); /* start a new print line */
316: 308 00020DA6 .data 1
317: 309 00000ae3 * L261:
318: 310 00000ae3 * 200A00 .ascii " \12\0"
319: 311 00000ae6 * .text
320: 312 00020DA6 dd 8f00000ae3 pushl $L261
321: 313 00020DAC fe 08 effffffda9 callf $8,_writes
322: 314 00020DB3 # writes("cycle: ");
323: 315 00020DB3 .data 1
324: 316 00000ae6 * L262:
325: 317 00000ae6 * 6379636C653A2000 .ascii "cycle: \0"
326: 318 00000aee * .text
327: 319 00020DB3 dd 8f00000ae6 pushl $L262
328: 320 00020DB9 fe 08 effffffd9c callf $8,_writes
329: 321 00020DC0 # writed( cycle );
330: 322 00020DC0 dd effffffd96 pushl _cycle
331: 323 00020DC6 fe 08 effffffd8f callf $8,_writed
332: 324 00020DCD # writes(" EXPF test ");
333: 325 00020DCD .data 1
334: 326 00000aee * L263:
335: 327 00000aee * 2020204558504620746573742 .ascii " EXPF test \0"
336: 000
337: 328 00000afc * .text
338: 329 00020DCD dd 8f00000aee pushl $L263
339: 330 00020DD3 fe 08 effffffd82 callf $8,_writes
340: 331 00020DDA # writed( test_no );
341: 332 00020DDA dd effffffd7c pushl _test_no
342: 333 00020DE0 fe 08 effffffd75 callf $8,_writed
343: 334 00020DE7 # writes(", subtest 2 (immediate store) - BAD FINAL ACC\n");
344: 335 00020DE7 .data 1
345: 336 00000afc * L264:
346: 337 00000afc * 2C20737562746573742032202 .ascii ", subtest 2 (immediate store) - BAD FINAL ACC\12\0"
347: 8696D6D656469617465207374
348: 6F726529202D2042414420464
349: 94E414C204143430A00
350: 338 00000b2b * .text
351: 339 00020DE7 dd 8f00000afc pushl $L264
352: 340 00020DED fe 08 effffffd68 callf $8,_writes
353: 341 00020DF4 # print_expf_data();
354: 342 00020DF4 fe 04 ef000006db callf $4,_print_expf_data
355: 343 00020DFB # writes(", data index = ");
356: 344 00020DFB .data 1
357: 345 00000b2b * L265:
358: 346 00000b2b * 2C20206461746120696E64657 .ascii ", data index = \0"
359: 8203D2000
360: 347 00000b3c * .text
361: 348 00020DFB dd 8f00000b2b pushl $L265
362: 349 00020E01 fe 08 effffffd54 callf $8,_writes
363: 350 00020E08 # writed( index );
364: 351 00020E08 dd effffffd4e pushl _index
365: 352 00020E0E fe 08 effffffd47 callf $8,_writed
366: 353 00020E15 # writec('\n');
367: 354 00020E15 dd 0a pushl $10
368: 355 00020E17 fe 08 effffffd3e callf $8,_writec
369: 356 00020E1E # writes(" Acc expected = ");
370: 357 00020E1E .data 1
371: 358 00000b3c * L266:
372: 359 00000b3c * 2020202020202020202020202 .ascii " Acc expected = \0"
373: 0202020202020202020416363
374: 206578706563746564203D200
375: 0
376: 360 00000b62 * .text
377: 361 00020E1E dd 8f00000b3c pushl $L266
378: 362 00020E24 fe 08 effffffd31 callf $8,_writes
379: 363 00020E2B # write32h( sgl_expected );
380: 364 00020E2B dd effffffd2b pushl _sgl_expected
381: 365 00020E31 fe 08 effffffd24 callf $8,_write32h
382: 366 00020E38 # writec('\n');
383: 367 00020E38 dd 0a pushl $10
384: 368 00020E3A fe 08 effffffd1b callf $8,_writec
385: 369 00020E41 # }
386: 370 00020E41 # if ( halt_flg ) /* halt on error? */
387: 371 00020E41 L260:
388: 372 00020E41 5d effffffd15 tstl _halt_flg
389: 373 00020E47 31 09 jeql L267
390: 374 00020E49 # expf_er_halt( BAD_ACC_HLT );
391: 375 00020E49 dd 01 pushl $1
392: 376 00020E4B fe 08 ef000006c0 callf $8,_expf_er_halt
393: 377 00020E52 # if ( loop_on_err )
394: 378 00020E52 L267:
395: 379 00020E52 5d effffffd04 tstl _loop_on_err
396: 380 00020E58 31 0d jeql L268
397: 381 00020E5A # {
398: 382 00020E5A # force_loop = TRUE; /* set the force loop flag */
399: 383 00020E5A 0d 01 effffffcfb movl $1,_force_loop
400: 384 00020E61 # asm("jmp _expf_2_lp1"); /* and loop */
401: 385 00020E61 71 efffffff01 jmp _expf_2_lp1
402: 386 00020E67 # }
403: 387 00020E67 # } /* end of compare error */
404: 388 00020E67 L268:
405: 389 00020E67 # } while( index++ < max_expf_1_index );
406: 390 00020E67 L259:
407: 391 00020E67 L256:
408: 392 00020E67 0d effffffcef 50 movl _index,r0
409: 393 00020E6E 6d effffffce8 incl _index
410: 394 00020E74 1d 50 effffffce1 cmpl r0,_max_expf_1_index
411: 395 00020E7B 81 03 13 febc jlss L257
412: 396 00020E80 L255:
413: 397 00020E80 # } /* end of subtest 2 */
414: 398 00020E80 40 ret#2
415: 399 00020E81 .set L251,0x0
416: 400 00020E81 L253:
417: 401 00020E81 13 fea5 jbr L254
418: 402 00020E84 .data
419: 403 00000a60 * .text
420: 404 00020E84 .align 1
421: 405 00020E84 .globl _expf_3
422: 406 00020E84 _expf_3:
423: 407 00020E84 0000 .word L269
424: 408 00020E86 #
425: 409 00020E86 #
426: 410 00020E86 #
427: 411 00020E86 # /***************************************************************************
428: 412 00020E86 # *
429: 413 00020E86 # * SUBTEST 3 - REGISTER INTEGRITY WITH THE EXPF FUNCTION
430: 414 00020E86 # *
431: 415 00020E86 # ***************************************************************************/
432: 416 00020E86 # expf_3()
433: 417 00020E86 # {
434: 418 00020E86 13 01e1 jbr L271
435: 419 00020E89 L272:
436: 420 00020E89 # fill_reg_buf( load_regs ); /* set reg values to load */
437: 421 00020E89 dd 8f00000000 pushl $_load_regs
438: 422 00020E8F fe 08 effffffcc6 callf $8,_fill_reg_buf
439: 423 00020E96 # force_loop = FALSE; /* clear the LOOP flag */
440: 424 00020E96 4d effffffcc0 clrl _force_loop
441: 425 00020E9C # subtest = 3;
442: 426 00020E9C 0d 03 effffffcb9 movl $3,_subtest
443: 427 00020EA3 # index = 0;
444: 428 00020EA3 4d effffffcb3 clrl _index
445: 429 00020EA9 # do
446: 430 00020EA9 L276:
447: 431 00020EA9 # {
448: 432 00020EA9 # sgl_ld_acc = expf_1_data[index].ld; /* get the operand */
449: 433 00020EA9 0d effffffcad 50 movl _index,r0
450: 434 00020EB0 48 03 50 50 shll $3,r0,r0
451: 435 00020EB4 0d e000000000 effffffc9d movl _expf_1_data(r0),_sgl_ld_acc
452: 436 00020EBF # sgl_expected = expf_1_data[index].exp; /* get expected results */
453: 437 00020EBF 0d effffffc97 50 movl _index,r0
454: 438 00020EC6 48 03 50 50 shll $3,r0,r0
455: 439 00020ECA 0d e000000004 effffffc87 movl _expf_1_data+4(r0),_sgl_expected
456: 440 00020ED5 # /*
457: 441 00020ED5 # * If LOOP ON ERROR is set, this is the loop for this subtest.
458: 442 00020ED5 # * The force loop flag is set after the first error.
459: 443 00020ED5 # */
460: 444 00020ED5 # asm("_expf_3_lp1:");
461: 445 00020ED5 _expf_3_lp1:
462: 446 00020ED5 # asm("loadr $0x1fff,_load_regs"); /* load regs 0 - 12 (FP) */
463: 447 00020ED5 ab 891fff effffffc7e loadr $0x1fff,_load_regs
464: 448 00020EDE # asm("ldf _sgl_ld_acc"); /* load the accumulator */
465: 449 00020EDE 06 effffffc78 ldf _sgl_ld_acc
466: 450 00020EE4 # asm("expf"); /* get ACC.'s exponent */
467: 451 00020EE4 55 expf
468: 452 00020EE5 # asm("stf _sgl_st_acc"); /* store the result */
469: 453 00020EE5 26 effffffc71 stf _sgl_st_acc
470: 454 00020EEB # asm("storer $0x1fff,_store_regs"); /* store regs 0 - 12 */
471: 455 00020EEB bb 891fff effffffc68 storer $0x1fff,_store_regs
472: 456 00020EF4 # if( force_loop )
473: 457 00020EF4 5d effffffc62 tstl _force_loop
474: 458 00020EFA 31 02 jeql L277
475: 459 00020EFC # asm("brb _expf_3_lp1");; /* loop on the error */
476: 460 00020EFC 11 d7 brb _expf_3_lp1
477: 461 00020EFE L277:
478: 462 00020EFE # /*
479: 463 00020EFE # * end error loop
480: 464 00020EFE # */
481: 465 00020EFE # reg_no = 0;
482: 466 00020EFE 4d effffffc58 clrl _reg_no
483: 467 00020F04 # regs_ok = TRUE;
484: 468 00020F04 0d 01 effffffc51 movl $1,_regs_ok
485: 469 00020F0B # while( (reg_no < 13) && (regs_ok) ) /* check 1st 12 regs */
486: 470 00020F0B L278:
487: 471 00020F0B 1d effffffc4b 0d cmpl _reg_no,$13
488: 472 00020F12 81 35 jgeq L279
489: 473 00020F14 5d effffffc42 tstl _regs_ok
490: 474 00020F1A 31 2d jeql L279
491: 475 00020F1C # if( store_regs[ reg_no ] == load_regs[ reg_no ] )
492: 476 00020F1C 0d effffffc3a 50 movl _reg_no,r0
493: 477 00020F23 0d effffffc33 51 movl _reg_no,r1
494: 478 00020F2A 1d 40effffffc2b cmpl _store_regs[r0],_load_regs[r1]
495: 41effffffc25
496: 479 00020F37 21 08 jneq L280
497: 480 00020F39 # reg_no++;
498: 481 00020F39 6d effffffc1d incl _reg_no
499: 482 00020F3F # else
500: 483 00020F3F 11 06 jbr L281
501: 484 00020F41 L280:
502: 485 00020F41 # regs_ok = FALSE;
503: 486 00020F41 4d effffffc15 clrl _regs_ok
504: 487 00020F47 L281:
505: 488 00020F47 11 c2 jbr L278
506: 489 00020F49 L279:
507: 490 00020F49 # if( !regs_ok )
508: 491 00020F49 5d effffffc0d tstl _regs_ok
509: 492 00020F4F 31 03 13 00fc jneq L282
510: 493 00020F54 # {
511: 494 00020F54 # errcnt++; /* bump the error count */
512: 495 00020F54 6d effffffc02 incl _errcnt
513: 496 00020F5A # if ( prt_error )
514: 497 00020F5A 5d effffffbfc tstl _prt_error
515: 498 00020F60 21 03 13 00eb jeql L283
516: 499 00020F65 # {
517: 500 00020F65 # writes(" \n"); /* start a new print line */
518: 501 00020F65 .data 1
519: 502 00000b62 * L284:
520: 503 00000b62 * 200A00 .ascii " \12\0"
521: 504 00000b65 * .text
522: 505 00020F65 dd 8f00000b62 pushl $L284
523: 506 00020F6B fe 08 effffffbea callf $8,_writes
524: 507 00020F72 # writes("cycle: ");
525: 508 00020F72 .data 1
526: 509 00000b65 * L285:
527: 510 00000b65 * 6379636C653A2000 .ascii "cycle: \0"
528: 511 00000b6d * .text
529: 512 00020F72 dd 8f00000b65 pushl $L285
530: 513 00020F78 fe 08 effffffbdd callf $8,_writes
531: 514 00020F7F # writed( cycle );
532: 515 00020F7F dd effffffbd7 pushl _cycle
533: 516 00020F85 fe 08 effffffbd0 callf $8,_writed
534: 517 00020F8C # writes(" EXPF test ");
535: 518 00020F8C .data 1
536: 519 00000b6d * L286:
537: 520 00000b6d * 2020204558504620746573742 .ascii " EXPF test \0"
538: 000
539: 521 00000b7b * .text
540: 522 00020F8C dd 8f00000b6d pushl $L286
541: 523 00020F92 fe 08 effffffbc3 callf $8,_writes
542: 524 00020F99 # writed( test_no );
543: 525 00020F99 dd effffffbbd pushl _test_no
544: 526 00020F9F fe 08 effffffbb6 callf $8,_writed
545: 527 00020FA6 # writes(", subtest 3 - A REGISTER WAS MODIFIED\n"); {
546: 528 00020FA6 .data 1
547: 529 00000b7b * L287:
548: 530 00000b7b * 2C20737562746573742033202 .ascii ", subtest 3 - A REGISTER WAS MODIFIED\12\0"
549: D204120524547495354455220
550: 574153204D4F4449464945440
551: A00
552: 531 00000ba2 * .text
553: 532 00020FA6 dd 8f00000b7b pushl $L287
554: 533 00020FAC fe 08 effffffba9 callf $8,_writes
555: 534 00020FB3 # print_expf_data();
556: 535 00020FB3 fe 04 ef0000051c callf $4,_print_expf_data
557: 536 00020FBA # writec('\n');
558: 537 00020FBA dd 0a pushl $10
559: 538 00020FBC fe 08 effffffb99 callf $8,_writec
560: 539 00020FC3 # writes("register ");
561: 540 00020FC3 .data 1
562: 541 00000ba2 * L288:
563: 542 00000ba2 * 72656769737465722000 .ascii "register \0"
564: 543 00000bac * .text
565: 544 00020FC3 dd 8f00000ba2 pushl $L288
566: 545 00020FC9 fe 08 effffffb8c callf $8,_writes
567: 546 00020FD0 # writed( reg_no );
568: 547 00020FD0 dd effffffb86 pushl _reg_no
569: 548 00020FD6 fe 08 effffffb7f callf $8,_writed
570: 549 00020FDD # writes(" = ");
571: 550 00020FDD .data 1
572: 551 00000bac * L289:
573: 552 00000bac * 203D2000 .ascii " = \0"
574: 553 00000bb0 * .text
575: 554 00020FDD dd 8f00000bac pushl $L289
576: 555 00020FE3 fe 08 effffffb72 callf $8,_writes
577: 556 00020FEA # write32h( load_regs[reg_no] );
578: 557 00020FEA 0d effffffb6c 50 movl _reg_no,r0
579: 558 00020FF1 dd 40effffffb64 pushl _load_regs[r0]
580: 559 00020FF8 fe 08 effffffb5d callf $8,_write32h
581: 560 00020FFF # writes(", should be = ");
582: 561 00020FFF .data 1
583: 562 00000bb0 * L290:
584: 563 00000bb0 * 2C202073686F756C642062652 .ascii ", should be = \0"
585: 03D2000
586: 564 00000bc0 * .text
587: 565 00020FFF dd 8f00000bb0 pushl $L290
588: 566 00021005 fe 08 effffffb50 callf $8,_writes
589: 567 0002100C # write32h( store_regs[reg_no] );
590: 568 0002100C 0d effffffb4a 50 movl _reg_no,r0
591: 569 00021013 dd 40effffffb42 pushl _store_regs[r0]
592: 570 0002101A fe 08 effffffb3b callf $8,_write32h
593: 571 00021021 # writec('\n');
594: 572 00021021 dd 0a pushl $10
595: 573 00021023 fe 08 effffffb32 callf $8,_writec
596: 574 0002102A # }
597: 575 0002102A # if ( halt_flg ) /* halt on error? */
598: 576 0002102A 5d effffffb2c tstl _halt_flg
599: 577 00021030 31 09 jeql L291
600: 578 00021032 # expf_er_halt( BAD_REG_HLT );
601: 579 00021032 dd 02 pushl $2
602: 580 00021034 fe 08 ef000004d7 callf $8,_expf_er_halt
603: 581 0002103B # if ( loop_on_err )
604: 582 0002103B L291:
605: 583 0002103B 5d effffffb1b tstl _loop_on_err
606: 584 00021041 31 0d jeql L292
607: 585 00021043 # {
608: 586 00021043 # force_loop = TRUE; /* get the force loop flag */
609: 587 00021043 0d 01 effffffb12 movl $1,_force_loop
610: 588 0002104A # asm("jmp _expf_3_lp1"); /* and loop */
611: 589 0002104A 71 effffffe85 jmp _expf_3_lp1
612: 590 00021050 # }
613: 591 00021050 # } /* end of compare error */
614: 592 00021050 L292:
615: 593 00021050 # } /* end of while loop */
616: 594 00021050 L283:
617: 595 00021050 # } while( index++ < max_expf_1_index );
618: 596 00021050 L282:
619: 597 00021050 L275:
620: 598 00021050 0d effffffb06 50 movl _index,r0
621: 599 00021057 6d effffffaff incl _index
622: 600 0002105D 1d 50 effffffaf8 cmpl r0,_max_expf_1_index
623: 601 00021064 81 03 13 fe40 jlss L276
624: 602 00021069 L274:
625: 603 00021069 # } /* end of subtest 3 */
626: 604 00021069 40 ret#2
627: 605 0002106A .set L269,0x0
628: 606 0002106A L271:
629: 607 0002106A 13 fe1c jbr L272
630: 608 0002106D .data
631: 609 00000a60 * .text
632: 610 0002106D 00 .align 1
633: 611 0002106E .globl _expf_4
634: 612 0002106E _expf_4:
635: 613 0002106E 0000 .word L293
636: 614 00021070 #
637: 615 00021070 #
638: 616 00021070 #
639: 617 00021070 # /************************************************************************
640: 618 00021070 # *
641: 619 00021070 # * SUBTEST 4 - Check for PSL corruption
642: 620 00021070 # *
643: 621 00021070 # ************************************************************************/
644: 622 00021070 # expf_4()
645: 623 00021070 # {
646: 624 00021070 13 01a8 jbr L295
647: 625 00021073 L296:
648: 626 00021073 # force_loop = FALSE; /* clear force_loop flg */
649: 627 00021073 4d effffffae3 clrl _force_loop
650: 628 00021079 # subtest = 4;
651: 629 00021079 0d 04 effffffadc movl $4,_subtest
652: 630 00021080 # fill_reg_buf( load_regs ); /* get patterns for regs */
653: 631 00021080 dd 8f00000000 pushl $_load_regs
654: 632 00021086 fe 08 effffffacf callf $8,_fill_reg_buf
655: 633 0002108D # for( index = 0; index < 3; index++ ) {
656: 634 0002108D 4d effffffac9 clrl _index
657: 635 00021093 L299:
658: 636 00021093 1d effffffac3 03 cmpl _index,$3
659: 637 0002109A 91 03 13 017b jgeq L298
660: 638 0002109F # sgl_ld_acc = expf_1_data[index].ld; /* get operand 1 */
661: 639 0002109F 0d effffffab7 50 movl _index,r0
662: 640 000210A6 48 03 50 50 shll $3,r0,r0
663: 641 000210AA 0d e000000000 effffffaa7 movl _expf_1_data(r0),_sgl_ld_acc
664: 642 000210B5 # sgl_expected = expf_1_data[index].exp; /* get expected */
665: 643 000210B5 0d effffffaa1 50 movl _index,r0
666: 644 000210BC 48 03 50 50 shll $3,r0,r0
667: 645 000210C0 0d e000000004 effffffa91 movl _expf_1_data+4(r0),_sgl_expected
668: 646 000210CB # sgl_dummy1 = status_array[status_index]; /* status = +, -, 0 */
669: 647 000210CB 0d effffffa8b 50 movl _status_index,r0
670: 648 000210D2 0d 40effffffa83 movl _status_array[r0],_sgl_dummy1
671: effffffa7e
672: 649 000210DE # /*
673: 650 000210DE # * If LOOP ON ERROR is set, this is the loop for this subtest.
674: 651 000210DE # * The force loop flag is set after the first error.
675: 652 000210DE # */
676: 653 000210DE # asm("_expf_4_lp1:");
677: 654 000210DE _expf_4_lp1:
678: 655 000210DE # asm("ldf _sgl_ld_acc"); /* LOAD the accumulator */
679: 656 000210DE 06 effffffa78 ldf _sgl_ld_acc
680: 657 000210E4 # asm("nop");
681: 658 000210E4 10 nop
682: 659 000210E5 # asm("tstl _sgl_dummy1"); /* set the PSL status */
683: 660 000210E5 5d effffffa71 tstl _sgl_dummy1
684: 661 000210EB # asm("movpsl _init_psl"); /* save the initial PSL */
685: 662 000210EB cd effffffa6b movpsl _init_psl
686: 663 000210F1 # asm("expf"); /* do the expf */
687: 664 000210F1 55 expf
688: 665 000210F2 # asm("nop");
689: 666 000210F2 10 nop
690: 667 000210F3 # asm("movpsl _psl_val"); /* save the final PSL */
691: 668 000210F3 cd effffffa63 movpsl _psl_val
692: 669 000210F9 # asm("stf _sgl_st_acc"); /* save the accumulator */
693: 670 000210F9 26 effffffa5d stf _sgl_st_acc
694: 671 000210FF # if( force_loop )
695: 672 000210FF 5d effffffa57 tstl _force_loop
696: 673 00021105 31 02 jeql L300
697: 674 00021107 # asm("brb _expf_4_lp1");; /* loop on the error */
698: 675 00021107 11 d5 brb _expf_4_lp1
699: 676 00021109 L300:
700: 677 00021109 # /*
701: 678 00021109 # * Now compare the final PSL to the initial PSL -they should be the same
702: 679 00021109 # */
703: 680 00021109 # exp_psl = init_psl;
704: 681 00021109 0d effffffa4d effffffa48 movl _init_psl,_exp_psl
705: 682 00021114 # if( psl_val != exp_psl ) {
706: 683 00021114 1d effffffa42 effffffa3d cmpl _psl_val,_exp_psl
707: 684 0002111F 21 03 13 00ed jeql L301
708: 685 00021124 # errcnt++; /* bump the error count */
709: 686 00021124 6d effffffa32 incl _errcnt
710: 687 0002112A # if( prt_error ) {
711: 688 0002112A 5d effffffa2c tstl _prt_error
712: 689 00021130 21 03 13 00b9 jeql L302
713: 690 00021135 # writes(" \n"); /* start a new print line */
714: 691 00021135 .data 1
715: 692 00000bc0 * L303:
716: 693 00000bc0 * 200A00 .ascii " \12\0"
717: 694 00000bc3 * .text
718: 695 00021135 dd 8f00000bc0 pushl $L303
719: 696 0002113B fe 08 effffffa1a callf $8,_writes
720: 697 00021142 # writes("cycle: ");
721: 698 00021142 .data 1
722: 699 00000bc3 * L304:
723: 700 00000bc3 * 6379636C653A2000 .ascii "cycle: \0"
724: 701 00000bcb * .text
725: 702 00021142 dd 8f00000bc3 pushl $L304
726: 703 00021148 fe 08 effffffa0d callf $8,_writes
727: 704 0002114F # writed( cycle );
728: 705 0002114F dd effffffa07 pushl _cycle
729: 706 00021155 fe 08 effffffa00 callf $8,_writed
730: 707 0002115C # writes(" EXPF test ");
731: 708 0002115C .data 1
732: 709 00000bcb * L305:
733: 710 00000bcb * 2020204558504620746573742 .ascii " EXPF test \0"
734: 000
735: 711 00000bd9 * .text
736: 712 0002115C dd 8f00000bcb pushl $L305
737: 713 00021162 fe 08 effffff9f3 callf $8,_writes
738: 714 00021169 # writed( test_no );
739: 715 00021169 dd effffff9ed pushl _test_no
740: 716 0002116F fe 08 effffff9e6 callf $8,_writed
741: 717 00021176 # writes(", subtest 4 - INCORRECT FINAL PSL\n");
742: 718 00021176 .data 1
743: 719 00000bd9 * L306:
744: 720 00000bd9 * 2C20737562746573742034202 .ascii ", subtest 4 - INCORRECT FINAL PSL\12\0"
745: D20494E434F52524543542046
746: 494E414C2050534C0A00
747: 721 00000bfc * .text
748: 722 00021176 dd 8f00000bd9 pushl $L306
749: 723 0002117C fe 08 effffff9d9 callf $8,_writes
750: 724 00021183 # print_expf_data(); /* print the operands */
751: 725 00021183 fe 04 ef0000034c callf $4,_print_expf_data
752: 726 0002118A # writec('\n');
753: 727 0002118A dd 0a pushl $10
754: 728 0002118C fe 08 effffff9c9 callf $8,_writec
755: 729 00021193 # writes("initial PSL = ");
756: 730 00021193 .data 1
757: 731 00000bfc * L307:
758: 732 00000bfc * 696E697469616C2050534C203 .ascii "initial PSL = \0"
759: D2000
760: 733 00000c0b * .text
761: 734 00021193 dd 8f00000bfc pushl $L307
762: 735 00021199 fe 08 effffff9bc callf $8,_writes
763: 736 000211A0 # write32h( init_psl );
764: 737 000211A0 dd effffff9b6 pushl _init_psl
765: 738 000211A6 fe 08 effffff9af callf $8,_write32h
766: 739 000211AD # writes(", final PSL = ");
767: 740 000211AD .data 1
768: 741 00000c0b * L308:
769: 742 00000c0b * 2C202066696E616C2050534C2 .ascii ", final PSL = \0"
770: 03D2000
771: 743 00000c1b * .text
772: 744 000211AD dd 8f00000c0b pushl $L308
773: 745 000211B3 fe 08 effffff9a2 callf $8,_writes
774: 746 000211BA # write32h( psl_val );
775: 747 000211BA dd effffff99c pushl _psl_val
776: 748 000211C0 fe 08 effffff995 callf $8,_write32h
777: 749 000211C7 # writes(", expected PSL = ");
778: 750 000211C7 .data 1
779: 751 00000c1b * L309:
780: 752 00000c1b * 2C20206578706563746564205 .ascii ", expected PSL = \0"
781: 0534C203D2000
782: 753 00000c2e * .text
783: 754 000211C7 dd 8f00000c1b pushl $L309
784: 755 000211CD fe 08 effffff988 callf $8,_writes
785: 756 000211D4 # write32h( exp_psl );
786: 757 000211D4 dd effffff982 pushl _exp_psl
787: 758 000211DA fe 08 effffff97b callf $8,_write32h
788: 759 000211E1 # writes("\n");
789: 760 000211E1 .data 1
790: 761 00000c2e * L310:
791: 762 00000c2e * 0A00 .ascii "\12\0"
792: 763 00000c30 * .text
793: 764 000211E1 dd 8f00000c2e pushl $L310
794: 765 000211E7 fe 08 effffff96e callf $8,_writes
795: 766 000211EE # }
796: 767 000211EE # if( halt_flg )
797: 768 000211EE L302:
798: 769 000211EE 5d effffff968 tstl _halt_flg
799: 770 000211F4 31 09 jeql L311
800: 771 000211F6 # expf_er_halt( BAD_PSL_HLT ); /* halt on the error */
801: 772 000211F6 dd 03 pushl $3
802: 773 000211F8 fe 08 ef00000313 callf $8,_expf_er_halt
803: 774 000211FF # if( loop_on_err ) {
804: 775 000211FF L311:
805: 776 000211FF 5d effffff957 tstl _loop_on_err
806: 777 00021205 31 0a jeql L312
807: 778 00021207 # force_loop = TRUE; /* set the force loop flag */
808: 779 00021207 0d 01 effffff94e movl $1,_force_loop
809: 780 0002120E # asm("brw _expf_4_lp1");; /* and loop on the error */
810: 781 0002120E 13 fecd brw _expf_4_lp1
811: 782 00021211 # } /* end of loop on error */
812: 783 00021211 # } /* end of PSL corruption error */
813: 784 00021211 L312:
814: 785 00021211 # } /* end of WHILE loop */
815: 786 00021211 L301:
816: 787 00021211 L297:
817: 788 00021211 6d effffff945 incl _index
818: 789 00021217 13 fe79 jbr L299
819: 790 0002121A L298:
820: 791 0002121A # } /* end of subtest 4 */
821: 792 0002121A 40 ret#2
822: 793 0002121B .set L293,0x0
823: 794 0002121B L295:
824: 795 0002121B 13 fe55 jbr L296
825: 796 0002121E .data
826: 797 00000a60 * .text
827: 798 0002121E .align 1
828: 799 0002121E .globl _expf_5
829: 800 0002121E _expf_5:
830: 801 0002121E 0000 .word L313
831: 802 00021220 #
832: 803 00021220 #
833: 804 00021220 #
834: 805 00021220 # /************************************************************************
835: 806 00021220 # *
836: 807 00021220 # * SUBTEST 5 - pipelined entry test
837: 808 00021220 # *
838: 809 00021220 # ************************************************************************/
839: 810 00021220 # expf_5()
840: 811 00021220 # {
841: 812 00021220 13 0154 jbr L315
842: 813 00021223 L316:
843: 814 00021223 # force_loop = FALSE;
844: 815 00021223 4d effffff933 clrl _force_loop
845: 816 00021229 # subtest = 8;
846: 817 00021229 0d 08 effffff92c movl $8,_subtest
847: 818 00021230 # for( index = 0; index < max_expf_1_index; index++ ) {
848: 819 00021230 4d effffff926 clrl _index
849: 820 00021236 L319:
850: 821 00021236 1d effffff920 effffff91b cmpl _index,_max_expf_1_index
851: 822 00021241 91 03 13 0130 jgeq L318
852: 823 00021246 # sgl_ld_acc = expf_1_data[index].ld; /* get operand 1 */
853: 824 00021246 0d effffff910 50 movl _index,r0
854: 825 0002124D 48 03 50 50 shll $3,r0,r0
855: 826 00021251 0d e000000000 effffff900 movl _expf_1_data(r0),_sgl_ld_acc
856: 827 0002125C # sgl_expected = expf_1_data[index].exp; /* get expected result */
857: 828 0002125C 0d effffff8fa 50 movl _index,r0
858: 829 00021263 48 03 50 50 shll $3,r0,r0
859: 830 00021267 0d e000000004 effffff8ea movl _expf_1_data+4(r0),_sgl_expected
860: 831 00021272 # /*
861: 832 00021272 # * If LOOP ON ERROR is set, this is the loop for this subtest.
862: 833 00021272 # * The force loop flag is set after the first error.
863: 834 00021272 # */
864: 835 00021272 # asm("_expf_5_lp1:");
865: 836 00021272 _expf_5_lp1:
866: 837 00021272 # asm("movl $0,r0"); /* clear r0 */
867: 838 00021272 0d 00 50 movl $0,r0
868: 839 00021275 # asm("ldf r0"); /* load the Acc. with 0.0 */
869: 840 00021275 06 50 ldf r0
870: 841 00021277 # asm("addf _sgl_ld_acc"); /* add the 1st operand */
871: 842 00021277 c6 effffff8df addf _sgl_ld_acc
872: 843 0002127D # asm("expf"); /* get the expf */
873: 844 0002127D 55 expf
874: 845 0002127E # asm("stf _sgl_st_acc"); /* store the result */
875: 846 0002127E 26 effffff8d8 stf _sgl_st_acc
876: 847 00021284 # if( force_loop )
877: 848 00021284 5d effffff8d2 tstl _force_loop
878: 849 0002128A 31 02 jeql L320
879: 850 0002128C # asm("brb _expf_5_lp1");; /* loop on the error */
880: 851 0002128C 11 e4 brb _expf_5_lp1
881: 852 0002128E L320:
882: 853 0002128E # /*
883: 854 0002128E # * end error loop - test the results
884: 855 0002128E # */
885: 856 0002128E # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
886: 857 0002128E 1d effffff8c8 effffff8c3 cmpl _sgl_st_acc,_sgl_expected
887: 858 00021299 21 03 13 00cf jeql L321
888: 859 0002129E # errcnt++; /* bump the error count */
889: 860 0002129E 6d effffff8b8 incl _errcnt
890: 861 000212A4 # if( prt_error ) {
891: 862 000212A4 5d effffff8b2 tstl _prt_error
892: 863 000212AA 21 03 13 009b jeql L322
893: 864 000212AF # writes(" \n"); /* start a new print line */
894: 865 000212AF .data 1
895: 866 00000c30 * L323:
896: 867 00000c30 * 200A00 .ascii " \12\0"
897: 868 00000c33 * .text
898: 869 000212AF dd 8f00000c30 pushl $L323
899: 870 000212B5 fe 08 effffff8a0 callf $8,_writes
900: 871 000212BC # writes("cycle: ");
901: 872 000212BC .data 1
902: 873 00000c33 * L324:
903: 874 00000c33 * 6379636C653A2000 .ascii "cycle: \0"
904: 875 00000c3b * .text
905: 876 000212BC dd 8f00000c33 pushl $L324
906: 877 000212C2 fe 08 effffff893 callf $8,_writes
907: 878 000212C9 # writed( cycle );
908: 879 000212C9 dd effffff88d pushl _cycle
909: 880 000212CF fe 08 effffff886 callf $8,_writed
910: 881 000212D6 # writes(" EXPF test ");
911: 882 000212D6 .data 1
912: 883 00000c3b * L325:
913: 884 00000c3b * 2020204558504620746573742 .ascii " EXPF test \0"
914: 000
915: 885 00000c49 * .text
916: 886 000212D6 dd 8f00000c3b pushl $L325
917: 887 000212DC fe 08 effffff879 callf $8,_writes
918: 888 000212E3 # writed( test_no );
919: 889 000212E3 dd effffff873 pushl _test_no
920: 890 000212E9 fe 08 effffff86c callf $8,_writed
921: 891 000212F0 # writes(", subtest 5 (Piped Entry) - BAD FINAL ACC\n");
922: 892 000212F0 .data 1
923: 893 00000c49 * L326:
924: 894 00000c49 * 2C20737562746573742035202 .ascii ", subtest 5 (Piped Entry) - BAD FINAL ACC\12\0"
925: 8506970656420456E74727929
926: 202D204241442046494E414C2
927: 04143430A00
928: 895 00000c74 * .text
929: 896 000212F0 dd 8f00000c49 pushl $L326
930: 897 000212F6 fe 08 effffff85f callf $8,_writes
931: 898 000212FD # print_expf_data();
932: 899 000212FD fe 04 ef000001d2 callf $4,_print_expf_data
933: 900 00021304 # writes(", data index = ");
934: 901 00021304 .data 1
935: 902 00000c74 * L327:
936: 903 00000c74 * 2C20206461746120696E64657 .ascii ", data index = \0"
937: 8203D2000
938: 904 00000c85 * .text
939: 905 00021304 dd 8f00000c74 pushl $L327
940: 906 0002130A fe 08 effffff84b callf $8,_writes
941: 907 00021311 # writed( index );
942: 908 00021311 dd effffff845 pushl _index
943: 909 00021317 fe 08 effffff83e callf $8,_writed
944: 910 0002131E # writec('\n');
945: 911 0002131E dd 0a pushl $10
946: 912 00021320 fe 08 effffff835 callf $8,_writec
947: 913 00021327 # writes(" Acc expected = ");
948: 914 00021327 .data 1
949: 915 00000c85 * L328:
950: 916 00000c85 * 2020202020202020202020202 .ascii " Acc expected = \0"
951: 0202020202020202020416363
952: 206578706563746564203D200
953: 0
954: 917 00000cab * .text
955: 918 00021327 dd 8f00000c85 pushl $L328
956: 919 0002132D fe 08 effffff828 callf $8,_writes
957: 920 00021334 # write32h( sgl_expected );
958: 921 00021334 dd effffff822 pushl _sgl_expected
959: 922 0002133A fe 08 effffff81b callf $8,_write32h
960: 923 00021341 # writec('\n');
961: 924 00021341 dd 0a pushl $10
962: 925 00021343 fe 08 effffff812 callf $8,_writec
963: 926 0002134A # }
964: 927 0002134A # if( halt_flg )
965: 928 0002134A L322:
966: 929 0002134A 5d effffff80c tstl _halt_flg
967: 930 00021350 31 09 jeql L329
968: 931 00021352 # expf_er_halt( BAD_ACC_HLT ); /* halt on the error */
969: 932 00021352 dd 01 pushl $1
970: 933 00021354 fe 08 ef000001b7 callf $8,_expf_er_halt
971: 934 0002135B # if( loop_on_err ) {
972: 935 0002135B L329:
973: 936 0002135B 5d effffff7fb tstl _loop_on_err
974: 937 00021361 31 0a jeql L330
975: 938 00021363 # force_loop = TRUE; /* set the force loop flag */
976: 939 00021363 0d 01 effffff7f2 movl $1,_force_loop
977: 940 0002136A # asm("brw _expf_5_lp1");; /* and loop on the error */
978: 941 0002136A 13 ff05 brw _expf_5_lp1
979: 942 0002136D # } /* end of loop on error */
980: 943 0002136D # } /* end of compare error */
981: 944 0002136D L330:
982: 945 0002136D # } /* end of WHILE loop */
983: 946 0002136D L321:
984: 947 0002136D L317:
985: 948 0002136D 6d effffff7e9 incl _index
986: 949 00021373 13 fec0 jbr L319
987: 950 00021376 L318:
988: 951 00021376 # } /* end of subtest 5 */
989: 952 00021376 40 ret#2
990: 953 00021377 .set L313,0x0
991: 954 00021377 L315:
992: 955 00021377 13 fea9 jbr L316
993: 956 0002137A .data
994: 957 00000a60 * .text
995: 958 0002137A .align 1
996: 959 0002137A .globl _expf_6
997: 960 0002137A _expf_6:
998: 961 0002137A 0000 .word L331
999: 962 0002137C #
1000: 963 0002137C #
1001: 964 0002137C #
1002: 965 0002137C # /************************************************************************
1003: 966 0002137C # *
1004: 967 0002137C # * SUBTEST 6 - pipelined exit test
1005: 968 0002137C # *
1006: 969 0002137C # ************************************************************************/
1007: 970 0002137C # expf_6()
1008: 971 0002137C # {
1009: 972 0002137C 13 0154 jbr L333
1010: 973 0002137F L334:
1011: 974 0002137F # force_loop = FALSE;
1012: 975 0002137F 4d effffff7d7 clrl _force_loop
1013: 976 00021385 # subtest = 8;
1014: 977 00021385 0d 08 effffff7d0 movl $8,_subtest
1015: 978 0002138C # for( index = 0; index < max_expf_1_index; index++ ) {
1016: 979 0002138C 4d effffff7ca clrl _index
1017: 980 00021392 L337:
1018: 981 00021392 1d effffff7c4 effffff7bf cmpl _index,_max_expf_1_index
1019: 982 0002139D 91 03 13 0130 jgeq L336
1020: 983 000213A2 # sgl_ld_acc = expf_1_data[index].ld; /* get operand 1 */
1021: 984 000213A2 0d effffff7b4 50 movl _index,r0
1022: 985 000213A9 48 03 50 50 shll $3,r0,r0
1023: 986 000213AD 0d e000000000 effffff7a4 movl _expf_1_data(r0),_sgl_ld_acc
1024: 987 000213B8 # sgl_expected = expf_1_data[index].exp; /* get expected result */
1025: 988 000213B8 0d effffff79e 50 movl _index,r0
1026: 989 000213BF 48 03 50 50 shll $3,r0,r0
1027: 990 000213C3 0d e000000004 effffff78e movl _expf_1_data+4(r0),_sgl_expected
1028: 991 000213CE # /*
1029: 992 000213CE # * If LOOP ON ERROR is set, this is the loop for this subtest.
1030: 993 000213CE # * The force loop flag is set after the first error.
1031: 994 000213CE # */
1032: 995 000213CE # asm("_expf_6_lp1:");
1033: 996 000213CE _expf_6_lp1:
1034: 997 000213CE # asm("movl $0,r0"); /* clear r0 */
1035: 998 000213CE 0d 00 50 movl $0,r0
1036: 999 000213D1 # asm("ldf _sgl_ld_acc"); /* load the Acc. */
1037: 1000 000213D1 06 effffff785 ldf _sgl_ld_acc
1038: 1001 000213D7 # asm("expf"); /* get the expf */
1039: 1002 000213D7 55 expf
1040: 1003 000213D8 # asm("addf r0"); /* add a zero to the acc */
1041: 1004 000213D8 c6 50 addf r0
1042: 1005 000213DA # asm("stf _sgl_st_acc"); /* store the result */
1043: 1006 000213DA 26 effffff77c stf _sgl_st_acc
1044: 1007 000213E0 # if( force_loop )
1045: 1008 000213E0 5d effffff776 tstl _force_loop
1046: 1009 000213E6 31 02 jeql L338
1047: 1010 000213E8 # asm("brb _expf_6_lp1");; /* loop on the error */
1048: 1011 000213E8 11 e4 brb _expf_6_lp1
1049: 1012 000213EA L338:
1050: 1013 000213EA # /*
1051: 1014 000213EA # * end error loop - test the results
1052: 1015 000213EA # */
1053: 1016 000213EA # if( sgl_st_acc != sgl_expected ) { /* COMPARE the values */
1054: 1017 000213EA 1d effffff76c effffff767 cmpl _sgl_st_acc,_sgl_expected
1055: 1018 000213F5 21 03 13 00cf jeql L339
1056: 1019 000213FA # errcnt++; /* bump the error count */
1057: 1020 000213FA 6d effffff75c incl _errcnt
1058: 1021 00021400 # if( prt_error ) {
1059: 1022 00021400 5d effffff756 tstl _prt_error
1060: 1023 00021406 21 03 13 009b jeql L340
1061: 1024 0002140B # writes(" \n"); /* start a new print line */
1062: 1025 0002140B .data 1
1063: 1026 00000cab * L341:
1064: 1027 00000cab * 200A00 .ascii " \12\0"
1065: 1028 00000cae * .text
1066: 1029 0002140B dd 8f00000cab pushl $L341
1067: 1030 00021411 fe 08 effffff744 callf $8,_writes
1068: 1031 00021418 # writes("cycle: ");
1069: 1032 00021418 .data 1
1070: 1033 00000cae * L342:
1071: 1034 00000cae * 6379636C653A2000 .ascii "cycle: \0"
1072: 1035 00000cb6 * .text
1073: 1036 00021418 dd 8f00000cae pushl $L342
1074: 1037 0002141E fe 08 effffff737 callf $8,_writes
1075: 1038 00021425 # writed( cycle );
1076: 1039 00021425 dd effffff731 pushl _cycle
1077: 1040 0002142B fe 08 effffff72a callf $8,_writed
1078: 1041 00021432 # writes(" EXPF test ");
1079: 1042 00021432 .data 1
1080: 1043 00000cb6 * L343:
1081: 1044 00000cb6 * 2020204558504620746573742 .ascii " EXPF test \0"
1082: 000
1083: 1045 00000cc4 * .text
1084: 1046 00021432 dd 8f00000cb6 pushl $L343
1085: 1047 00021438 fe 08 effffff71d callf $8,_writes
1086: 1048 0002143F # writed( test_no );
1087: 1049 0002143F dd effffff717 pushl _test_no
1088: 1050 00021445 fe 08 effffff710 callf $8,_writed
1089: 1051 0002144C # writes(", subtest 6 (Piped Exit) - BAD FINAL ACC\n");
1090: 1052 0002144C .data 1
1091: 1053 00000cc4 * L344:
1092: 1054 00000cc4 * 2C20737562746573742036202 .ascii ", subtest 6 (Piped Exit) - BAD FINAL ACC\12\0"
1093: 8506970656420457869742920
1094: 2D204241442046494E414C204
1095: 143430A00
1096: 1055 00000cee * .text
1097: 1056 0002144C dd 8f00000cc4 pushl $L344
1098: 1057 00021452 fe 08 effffff703 callf $8,_writes
1099: 1058 00021459 # print_expf_data();
1100: 1059 00021459 fe 04 ef00000076 callf $4,_print_expf_data
1101: 1060 00021460 # writes(", data index = ");
1102: 1061 00021460 .data 1
1103: 1062 00000cee * L345:
1104: 1063 00000cee * 2C20206461746120696E64657 .ascii ", data index = \0"
1105: 8203D2000
1106: 1064 00000cff * .text
1107: 1065 00021460 dd 8f00000cee pushl $L345
1108: 1066 00021466 fe 08 effffff6ef callf $8,_writes
1109: 1067 0002146D # writed( index );
1110: 1068 0002146D dd effffff6e9 pushl _index
1111: 1069 00021473 fe 08 effffff6e2 callf $8,_writed
1112: 1070 0002147A # writec('\n');
1113: 1071 0002147A dd 0a pushl $10
1114: 1072 0002147C fe 08 effffff6d9 callf $8,_writec
1115: 1073 00021483 # writes(" Acc expected = ");
1116: 1074 00021483 .data 1
1117: 1075 00000cff * L346:
1118: 1076 00000cff * 2020202020202020202020202 .ascii " Acc expected = \0"
1119: 0202020202020202020416363
1120: 206578706563746564203D200
1121: 0
1122: 1077 00000d25 * .text
1123: 1078 00021483 dd 8f00000cff pushl $L346
1124: 1079 00021489 fe 08 effffff6cc callf $8,_writes
1125: 1080 00021490 # write32h( sgl_expected );
1126: 1081 00021490 dd effffff6c6 pushl _sgl_expected
1127: 1082 00021496 fe 08 effffff6bf callf $8,_write32h
1128: 1083 0002149D # writec('\n');
1129: 1084 0002149D dd 0a pushl $10
1130: 1085 0002149F fe 08 effffff6b6 callf $8,_writec
1131: 1086 000214A6 # }
1132: 1087 000214A6 # if( halt_flg )
1133: 1088 000214A6 L340:
1134: 1089 000214A6 5d effffff6b0 tstl _halt_flg
1135: 1090 000214AC 31 09 jeql L347
1136: 1091 000214AE # expf_er_halt( BAD_ACC_HLT ); /* halt on the error */
1137: 1092 000214AE dd 01 pushl $1
1138: 1093 000214B0 fe 08 ef0000005b callf $8,_expf_er_halt
1139: 1094 000214B7 # if( loop_on_err ) {
1140: 1095 000214B7 L347:
1141: 1096 000214B7 5d effffff69f tstl _loop_on_err
1142: 1097 000214BD 31 0a jeql L348
1143: 1098 000214BF # force_loop = TRUE; /* set the force loop flag */
1144: 1099 000214BF 0d 01 effffff696 movl $1,_force_loop
1145: 1100 000214C6 # asm("brw _expf_6_lp1");; /* and loop on the error */
1146: 1101 000214C6 13 ff05 brw _expf_6_lp1
1147: 1102 000214C9 # } /* end of loop on error */
1148: 1103 000214C9 # } /* end of compare error */
1149: 1104 000214C9 L348:
1150: 1105 000214C9 # } /* end of WHILE loop */
1151: 1106 000214C9 L339:
1152: 1107 000214C9 L335:
1153: 1108 000214C9 6d effffff68d incl _index
1154: 1109 000214CF 13 fec0 jbr L337
1155: 1110 000214D2 L336:
1156: 1111 000214D2 # } /* end of subtest 6 */
1157: 1112 000214D2 40 ret#2
1158: 1113 000214D3 .set L331,0x0
1159: 1114 000214D3 L333:
1160: 1115 000214D3 13 fea9 jbr L334
1161: 1116 000214D6 .data
1162: 1117 00000a60 * .text
1163: 1118 000214D6 .align 1
1164: 1119 000214D6 .globl _print_expf_data
1165: 1120 000214D6 _print_expf_data:
1166: 1121 000214D6 0000 .word L349
1167: 1122 000214D8 #
1168: 1123 000214D8 #
1169: 1124 000214D8 #
1170: 1125 000214D8 # /**************************************************************************
1171: 1126 000214D8 # *
1172: 1127 000214D8 # * PRINT THE DATA AND STORE RESULTS
1173: 1128 000214D8 # *
1174: 1129 000214D8 # * initial Acc = xxxxxxxx, stored = xxxxxxxx, data index = xx
1175: 1130 000214D8 # * Acc expected = xxxxxxxx
1176: 1131 000214D8 # **************************************************************************/
1177: 1132 000214D8 # print_expf_data()
1178: 1133 000214D8 # {
1179: 1134 000214D8 11 35 jbr L351
1180: 1135 000214DA L352:
1181: 1136 000214DA # writes("initial Acc = ");
1182: 1137 000214DA .data 1
1183: 1138 00000d25 * L353:
1184: 1139 00000d25 * 696E697469616C20416363203 .ascii "initial Acc = \0"
1185: D2000
1186: 1140 00000d34 * .text
1187: 1141 000214DA dd 8f00000d25 pushl $L353
1188: 1142 000214E0 fe 08 effffff675 callf $8,_writes
1189: 1143 000214E7 # write32h( sgl_ld_acc );
1190: 1144 000214E7 dd effffff66f pushl _sgl_ld_acc
1191: 1145 000214ED fe 08 effffff668 callf $8,_write32h
1192: 1146 000214F4 # writes(", final Acc = ");
1193: 1147 000214F4 .data 1
1194: 1148 00000d34 * L354:
1195: 1149 00000d34 * 2C202066696E616C204163632 .ascii ", final Acc = \0"
1196: 03D2000
1197: 1150 00000d44 * .text
1198: 1151 000214F4 dd 8f00000d34 pushl $L354
1199: 1152 000214FA fe 08 effffff65b callf $8,_writes
1200: 1153 00021501 # write32h( sgl_st_acc );
1201: 1154 00021501 dd effffff655 pushl _sgl_st_acc
1202: 1155 00021507 fe 08 effffff64e callf $8,_write32h
1203: 1156 0002150E # }
1204: 1157 0002150E 40 ret#2
1205: 1158 0002150F .set L349,0x0
1206: 1159 0002150F L351:
1207: 1160 0002150F 11 c9 jbr L352
1208: 1161 00021511 .data
1209: 1162 00000a60 * .text
1210: 1163 00021511 00 .align 1
1211: 1164 00021512 .globl _expf_er_halt
1212: 1165 00021512 _expf_er_halt:
1213: 1166 00021512 0000 .word L355
1214: 1167 00021514 #
1215: 1168 00021514 #
1216: 1169 00021514 #
1217: 1170 00021514 # /**************************************************************************
1218: 1171 00021514 # *
1219: 1172 00021514 # * HALT ON ERROR ROUTINE
1220: 1173 00021514 # *
1221: 1174 00021514 # **************************************************************************/
1222: 1175 00021514 # expf_er_halt( halt_code )
1223: 1176 00021514 # int halt_code;
1224: 1177 00021514 # {
1225: 1178 00021514 13 00a0 jbr L357
1226: 1179 00021517 L358:
1227: 1180 00021517 # sgl_dummy1 = halt_code; /* get the error type */
1228: 1181 00021517 0d ad04 effffff63d movl 4(fp),_sgl_dummy1
1229: 1182 0002151F # asm("movl _test_no,r0"); /* r0 = test number */
1230: 1183 0002151F 0d effffff637 50 movl _test_no,r0
1231: 1184 00021526 # asm("movl _subtest,r1"); /* r1 = subtest number */
1232: 1185 00021526 0d effffff630 51 movl _subtest,r1
1233: 1186 0002152D # asm("movl _sgl_dummy1,r2"); /* r2 = error code */
1234: 1187 0002152D 0d effffff629 52 movl _sgl_dummy1,r2
1235: 1188 00021534 # asm("movl _cycle,r3"); /* r3 = cycle count */
1236: 1189 00021534 0d effffff622 53 movl _cycle,r3
1237: 1190 0002153B # asm("movl _sgl_ld_acc,r4"); /* r4 = initial data */
1238: 1191 0002153B 0d effffff61b 54 movl _sgl_ld_acc,r4
1239: 1192 00021542 # asm("movl _sgl_st_acc,r5"); /* r5 = data stored */
1240: 1193 00021542 0d effffff614 55 movl _sgl_st_acc,r5
1241: 1194 00021549 # asm("movl _sgl_expected,r6"); /* r6 = data expected */
1242: 1195 00021549 0d effffff60d 56 movl _sgl_expected,r6
1243: 1196 00021550 # asm("movl _index,r7"); /* r7 = data index */
1244: 1197 00021550 0d effffff606 57 movl _index,r7
1245: 1198 00021557 # if( halt_code == BAD_REG_HLT ) {
1246: 1199 00021557 1d ad04 02 cmpl 4(fp),$2
1247: 1200 0002155B 21 3d jneq L359
1248: 1201 0002155D # sgl_dummy1 = load_regs[index2];
1249: 1202 0002155D 0d effffff5f9 50 movl _index2,r0
1250: 1203 00021564 0d 40effffff5f1 movl _load_regs[r0],_sgl_dummy1
1251: effffff5ec
1252: 1204 00021570 # sgl_dummy2 = store_regs[index2];
1253: 1205 00021570 0d effffff5e6 50 movl _index2,r0
1254: 1206 00021577 0d 40effffff5de movl _store_regs[r0],_sgl_dummy2
1255: effffff5d9
1256: 1207 00021583 # asm("movl _index2,r6"); /* r6 = bad register # */
1257: 1208 00021583 0d effffff5d3 56 movl _index2,r6
1258: 1209 0002158A # asm("movl _sgl_dummy2,r7"); /* r7 = actual value */
1259: 1210 0002158A 0d effffff5cc 57 movl _sgl_dummy2,r7
1260: 1211 00021591 # asm("movl _sgl_dummy1,r8"); /* r8 = expected value */
1261: 1212 00021591 0d effffff5c5 58 movl _sgl_dummy1,r8
1262: 1213 00021598 # } else
1263: 1214 00021598 11 1b jbr L360
1264: 1215 0002159A L359:
1265: 1216 0002159A # if( halt_code == BAD_PSL_HLT ) {
1266: 1217 0002159A 1d ad04 03 cmpl 4(fp),$3
1267: 1218 0002159E 21 15 jneq L361
1268: 1219 000215A0 # asm("movl _init_psl,r6"); /* r6 = initial PSL */
1269: 1220 000215A0 0d effffff5b6 56 movl _init_psl,r6
1270: 1221 000215A7 # asm("movl _psl_val,r7"); /* r7 = final PSL */
1271: 1222 000215A7 0d effffff5af 57 movl _psl_val,r7
1272: 1223 000215AE # asm("movl _exp_psl,r8"); /* r8 = expected PSL */
1273: 1224 000215AE 0d effffff5a8 58 movl _exp_psl,r8
1274: 1225 000215B5 # };
1275: 1226 000215B5 L361:
1276: 1227 000215B5 L360:
1277: 1228 000215B5 # asm("halt"); /* HALT ... */
1278: 1229 000215B5 00 halt
1279: 1230 000215B6 # }
1280: 1231 000215B6 40 ret#2
1281: 1232 000215B7 .set L355,0x0
1282: 1233 000215B7 L357:
1283: 1234 000215B7 13 ff5d jbr L358
1284: 1235 000215BA .data
1285: 1235 00042116 .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.