|
|
1.1 root 1: 1 00000000 LL0:
2: 2 00000000 .data
3: 3 00000278 * .text
4: 4 00000000 .align 1
5: 5 00000000 .globl _pipe_10
6: 6 00000000 _pipe_10:
7: 7 0002CCDC 0000 .word L215
8: 8 0002CCDE # #include "fpp_defs.h"
9: 9 0002CCDE #
10: 10 0002CCDE #
11: 11 0002CCDE # /*****************************************************************************
12: 12 0002CCDE # *
13: 13 0002CCDE # * PIPELINE TEST #10
14: 14 0002CCDE # *
15: 15 0002CCDE # * LDF(op1), MULF(op2), STF op3, SUBF op3, STF
16: 16 0002CCDE # *
17: 17 0002CCDE # * -where the operands are the fmacro1 MULF data patterns. The SUBF operand
18: 18 0002CCDE # * is the stored result of the MULF.
19: 19 0002CCDE # * -If the 1st STF isn't completed before the SUBF data is fetched then we
20: 20 0002CCDE # * won't get a final accumulator of zero.
21: 21 0002CCDE # *****************************************************************************/
22: 22 0002CCDE # pipe_10()
23: 23 0002CCDE # {
24: 24 0002CCDE 13 00ee jbr L217
25: 25 0002CCE1 L218:
26: 26 0002CCE1 # asm(".globl _pipeline_10_t");
27: 27 0002CCE1 .globl _pipeline_10_t
28: 28 0002CCE1 # asm("_pipeline_10_t:");
29: 29 0002CCE1 _pipeline_10_t:
30: 30 0002CCE1 # if( (cycle == 1) && (prt_hdrs) ) /* print headers on 1st cycle */
31: 31 0002CCE1 1d effffffff5 01 cmpl _cycle,$1
32: 32 0002CCE8 21 15 jneq L219
33: 33 0002CCEA 5d efffffffec tstl _prt_hdrs
34: 34 0002CCF0 31 0d jeql L219
35: 35 0002CCF2 # writes(" PIPE_10");
36: 36 0002CCF2 .data 1
37: 37 00000278 * L221:
38: 38 00000278 * 20504950455F313000 .ascii " PIPE_10\0"
39: 39 00000281 * .text
40: 40 0002CCF2 dd 8f00000278 pushl $L221
41: 41 0002CCF8 fe 08 efffffffdd callf $8,_writes
42: 42 0002CCFF # force_loop = FALSE; /* clear force_loop flag */
43: 43 0002CCFF L219:
44: 44 0002CCFF 4d efffffffd7 clrl _force_loop
45: 45 0002CD05 # for( index = 0; index <= max_mulf_1_index; index++ )
46: 46 0002CD05 4d efffffffd1 clrl _index
47: 47 0002CD0B L224:
48: 48 0002CD0B 1d efffffffcb efffffffc6 cmpl _index,_max_mulf_1_index
49: 49 0002CD16 51 03 13 00ad jgtr L223
50: 50 0002CD1B # {
51: 51 0002CD1B # sgl_value_1 = mulf_1_data[index].op_1; /* get the data */
52: 52 0002CD1B 5c 0c efffffffba 50 mull3 $12,_index,r0
53: 53 0002CD23 0d e000000000 efffffffae movl _mulf_1_data(r0),_sgl_value_1
54: 54 0002CD2E # sgl_value_2 = mulf_1_data[index].op_2; /* operands */
55: 55 0002CD2E 5c 0c efffffffa7 50 mull3 $12,_index,r0
56: 56 0002CD36 0d e000000004 efffffff9b movl _mulf_1_data+4(r0),_sgl_value_2
57: 57 0002CD41 # sgl_expected = mulf_1_data[index].exp;
58: 58 0002CD41 5c 0c efffffff94 50 mull3 $12,_index,r0
59: 59 0002CD49 0d e000000008 efffffff88 movl _mulf_1_data+8(r0),_sgl_expected
60: 60 0002CD54 # /*
61: 61 0002CD54 # * This is the start of the LOOP ON ERROR section
62: 62 0002CD54 # */
63: 63 0002CD54 # asm("_pipe10_1_lp:");
64: 64 0002CD54 _pipe10_1_lp:
65: 65 0002CD54 # asm("ldf _sgl_value_1"); /* get the 1st operand */
66: 66 0002CD54 06 efffffff82 ldf _sgl_value_1
67: 67 0002CD5A # asm("mulf _sgl_value_2"); /* multiply by the 2nd op. */
68: 68 0002CD5A e6 efffffff7c mulf _sgl_value_2
69: 69 0002CD60 # asm("stf _sgl_value_3"); /* save the MULF result */
70: 70 0002CD60 26 efffffff76 stf _sgl_value_3
71: 71 0002CD66 # asm("subf _sgl_value_3"); /* and subtract it again */
72: 72 0002CD66 d6 efffffff70 subf _sgl_value_3
73: 73 0002CD6C # asm("stf _sgl_st_acc"); /* save the final result */
74: 74 0002CD6C 26 efffffff6a stf _sgl_st_acc
75: 75 0002CD72 # if( force_loop )
76: 76 0002CD72 5d efffffff64 tstl _force_loop
77: 77 0002CD78 31 02 jeql L225
78: 78 0002CD7A # asm("brb _pipe10_1_lp");; /* loop on the error */
79: 79 0002CD7A 11 d8 brb _pipe10_1_lp
80: 80 0002CD7C L225:
81: 81 0002CD7C # /*
82: 82 0002CD7C # * Verify the results
83: 83 0002CD7C # */
84: 84 0002CD7C # if( sgl_st_acc ) { /* the Acc s/b cleared */
85: 85 0002CD7C 5d efffffff5a tstl _sgl_st_acc
86: 86 0002CD82 31 3b jeql L226
87: 87 0002CD84 # errcnt++; /* bump the error count */
88: 88 0002CD84 6d efffffff52 incl _errcnt
89: 89 0002CD8A # if ( prt_error )
90: 90 0002CD8A 5d efffffff4c tstl _prt_error
91: 91 0002CD90 31 07 jeql L227
92: 92 0002CD92 # pipe10_print(); /* print the error mesage */
93: 93 0002CD92 fe 04 ef00000039 callf $4,_pipe10_print
94: 94 0002CD99 # if ( halt_flg )
95: 95 0002CD99 L227:
96: 96 0002CD99 5d efffffff3d tstl _halt_flg
97: 97 0002CD9F 31 09 jeql L229
98: 98 0002CDA1 # pipe10_halt( 1 ); /* halt on the error */
99: 99 0002CDA1 dd 01 pushl $1
100: 100 0002CDA3 fe 08 ef00000156 callf $8,_pipe10_halt
101: 101 0002CDAA # if ( loop_on_err ) {
102: 102 0002CDAA L229:
103: 103 0002CDAA 5d efffffff2c tstl _loop_on_err
104: 104 0002CDB0 31 0d jeql L231
105: 105 0002CDB2 # force_loop = TRUE;
106: 106 0002CDB2 0d 01 efffffff23 movl $1,_force_loop
107: 107 0002CDB9 # asm("jmp _pipe10_1_lp");;
108: 108 0002CDB9 71 efffffff95 jmp _pipe10_1_lp
109: 109 0002CDBF # }
110: 110 0002CDBF # }
111: 111 0002CDBF L231:
112: 112 0002CDBF # }
113: 113 0002CDBF L226:
114: 114 0002CDBF L222:
115: 115 0002CDBF 6d efffffff17 incl _index
116: 116 0002CDC5 13 ff43 jbr L224
117: 117 0002CDC8 L223:
118: 118 0002CDC8 # asm("jmp *return"); /* return to the test monitor */
119: 119 0002CDC8 71 ffffffff0e jmp *return
120: 120 0002CDCE # }
121: 121 0002CDCE 40 ret#2
122: 122 0002CDCF .set L215,0x0
123: 123 0002CDCF L217:
124: 124 0002CDCF 13 ff0f jbr L218
125: 125 0002CDD2 .data
126: 126 00000278 * .text
127: 127 0002CDD2 .align 1
128: 128 0002CDD2 .globl _pipe10_print
129: 129 0002CDD2 _pipe10_print:
130: 130 0002CDD2 0000 .word L232
131: 131 0002CDD4 #
132: 132 0002CDD4 #
133: 133 0002CDD4 #
134: 134 0002CDD4 #
135: 135 0002CDD4 # /*
136: 136 0002CDD4 # **************************************************************************
137: 137 0002CDD4 # *
138: 138 0002CDD4 # * print an error message of the form
139: 139 0002CDD4 # *
140: 140 0002CDD4 # * cycle: xx Test xx, Error subtracting the stored data (op3), index = xx
141: 141 0002CDD4 # * test sequence = LDF(op1), MULF(op2), STF(op3), SUBF(op3), STF
142: 142 0002CDD4 # * operand 1 = xxxxxxxx, final Acc = xxxxxxxx, data index = dd
143: 143 0002CDD4 # * operand 2 = xxxxxxxx, expected Acc = xxxxxxxx
144: 144 0002CDD4 # * operand 3 = xxxxxxxx, expected op3 = xxxxxxxx
145: 145 0002CDD4 # **************************************************************************/
146: 146 0002CDD4 # pipe10_print()
147: 147 0002CDD4 # {
148: 148 0002CDD4 13 0125 jbr L234
149: 149 0002CDD7 L235:
150: 150 0002CDD7 # writes(" \n"); /* start a new print line */
151: 151 0002CDD7 .data 1
152: 152 00000281 * L236:
153: 153 00000281 * 200A00 .ascii " \12\0"
154: 154 00000284 * .text
155: 155 0002CDD7 dd 8f00000281 pushl $L236
156: 156 0002CDDD fe 08 effffffef8 callf $8,_writes
157: 157 0002CDE4 # writes("cycle: ");
158: 158 0002CDE4 .data 1
159: 159 00000284 * L237:
160: 160 00000284 * 6379636C653A2000 .ascii "cycle: \0"
161: 161 0000028c * .text
162: 162 0002CDE4 dd 8f00000284 pushl $L237
163: 163 0002CDEA fe 08 effffffeeb callf $8,_writes
164: 164 0002CDF1 # writed( cycle );
165: 165 0002CDF1 dd effffffee5 pushl _cycle
166: 166 0002CDF7 fe 08 effffffede callf $8,_writed
167: 167 0002CDFE # writes(" Test ");
168: 168 0002CDFE .data 1
169: 169 0000028c * L239:
170: 170 0000028c * 2020546573742000 .ascii " Test \0"
171: 171 00000294 * .text
172: 172 0002CDFE dd 8f0000028c pushl $L239
173: 173 0002CE04 fe 08 effffffed1 callf $8,_writes
174: 174 0002CE0B # writed( test_no );
175: 175 0002CE0B dd effffffecb pushl _test_no
176: 176 0002CE11 fe 08 effffffec4 callf $8,_writed
177: 177 0002CE18 # writes(" (Pipe 10), error\n");
178: 178 0002CE18 .data 1
179: 179 00000294 * L240:
180: 180 00000294 * 2020202850697065203130292 .ascii " (Pipe 10), error\12\0"
181: C206572726F720A00
182: 181 000002a9 * .text
183: 182 0002CE18 dd 8f00000294 pushl $L240
184: 183 0002CE1E fe 08 effffffeb7 callf $8,_writes
185: 184 0002CE25 # writes(" LDF(op1), MULF(op2), STF(op3), SUBF(op3), STF\n");
186: 185 0002CE25 .data 1
187: 186 000002a9 * L241:
188: 187 000002a9 * 204C4446286F7031292C204D5 .ascii " LDF(op1), MULF(op2), STF(op3), SUBF(op3), STF\12\0"
189: 54C46286F7032292C20535446
190: 286F7033292C2053554246286
191: F7033292C205354460A00
192: 188 000002d9 * .text
193: 189 0002CE25 dd 8f000002a9 pushl $L241
194: 190 0002CE2B fe 08 effffffeaa callf $8,_writes
195: 191 0002CE32 # writes("operand 1 = ");
196: 192 0002CE32 .data 1
197: 193 000002d9 * L242:
198: 194 000002d9 * 6F706572616E642031203D200 .ascii "operand 1 = \0"
199: 0
200: 195 000002e6 * .text
201: 196 0002CE32 dd 8f000002d9 pushl $L242
202: 197 0002CE38 fe 08 effffffe9d callf $8,_writes
203: 198 0002CE3F # write32h( sgl_value_1 );
204: 199 0002CE3F dd effffffe97 pushl _sgl_value_1
205: 200 0002CE45 fe 08 effffffe90 callf $8,_write32h
206: 201 0002CE4C # writes(", final Acc = ");
207: 202 0002CE4C .data 1
208: 203 000002e6 * L244:
209: 204 000002e6 * 2C202020202066696E616C204 .ascii ", final Acc = \0"
210: 16363203D2000
211: 205 000002f9 * .text
212: 206 0002CE4C dd 8f000002e6 pushl $L244
213: 207 0002CE52 fe 08 effffffe83 callf $8,_writes
214: 208 0002CE59 # write32h( sgl_st_acc );
215: 209 0002CE59 dd effffffe7d pushl _sgl_st_acc
216: 210 0002CE5F fe 08 effffffe76 callf $8,_write32h
217: 211 0002CE66 # writes(", data index = ");
218: 212 0002CE66 .data 1
219: 213 000002f9 * L245:
220: 214 000002f9 * 2C2020206461746120696E646 .ascii ", data index = \0"
221: 578203D2000
222: 215 0000030b * .text
223: 216 0002CE66 dd 8f000002f9 pushl $L245
224: 217 0002CE6C fe 08 effffffe69 callf $8,_writes
225: 218 0002CE73 # writed( index );
226: 219 0002CE73 dd effffffe63 pushl _index
227: 220 0002CE79 fe 08 effffffe5c callf $8,_writed
228: 221 0002CE80 # writec('\n');
229: 222 0002CE80 dd 0a pushl $10
230: 223 0002CE82 fe 08 effffffe53 callf $8,_writec
231: 224 0002CE89 # writes("operand 2 = ");
232: 225 0002CE89 .data 1
233: 226 0000030b * L247:
234: 227 0000030b * 6F706572616E642032203D200 .ascii "operand 2 = \0"
235: 0
236: 228 00000318 * .text
237: 229 0002CE89 dd 8f0000030b pushl $L247
238: 230 0002CE8F fe 08 effffffe46 callf $8,_writes
239: 231 0002CE96 # write32h( sgl_value_2 );
240: 232 0002CE96 dd effffffe40 pushl _sgl_value_2
241: 233 0002CE9C fe 08 effffffe39 callf $8,_write32h
242: 234 0002CEA3 # writes(", expected Acc = ");
243: 235 0002CEA3 .data 1
244: 236 00000318 * L248:
245: 237 00000318 * 2C20206578706563746564204 .ascii ", expected Acc = \0"
246: 16363203D2000
247: 238 0000032b * .text
248: 239 0002CEA3 dd 8f00000318 pushl $L248
249: 240 0002CEA9 fe 08 effffffe2c callf $8,_writes
250: 241 0002CEB0 # write32h( 0 );
251: 242 0002CEB0 dd 00 pushl $0
252: 243 0002CEB2 fe 08 effffffe23 callf $8,_write32h
253: 244 0002CEB9 # writec('\n');
254: 245 0002CEB9 dd 0a pushl $10
255: 246 0002CEBB fe 08 effffffe1a callf $8,_writec
256: 247 0002CEC2 # writes("operand 3 = ");
257: 248 0002CEC2 .data 1
258: 249 0000032b * L249:
259: 250 0000032b * 6F706572616E642033203D200 .ascii "operand 3 = \0"
260: 0
261: 251 00000338 * .text
262: 252 0002CEC2 dd 8f0000032b pushl $L249
263: 253 0002CEC8 fe 08 effffffe0d callf $8,_writes
264: 254 0002CECF # write32h( sgl_value_3 );
265: 255 0002CECF dd effffffe07 pushl _sgl_value_3
266: 256 0002CED5 fe 08 effffffe00 callf $8,_write32h
267: 257 0002CEDC # writes(", expected op3 = ");
268: 258 0002CEDC .data 1
269: 259 00000338 * L250:
270: 260 00000338 * 2C20206578706563746564206 .ascii ", expected op3 = \0"
271: F7033203D2000
272: 261 0000034b * .text
273: 262 0002CEDC dd 8f00000338 pushl $L250
274: 263 0002CEE2 fe 08 effffffdf3 callf $8,_writes
275: 264 0002CEE9 # write32h( 0 );
276: 265 0002CEE9 dd 00 pushl $0
277: 266 0002CEEB fe 08 effffffdea callf $8,_write32h
278: 267 0002CEF2 # writec('\n');
279: 268 0002CEF2 dd 0a pushl $10
280: 269 0002CEF4 fe 08 effffffde1 callf $8,_writec
281: 270 0002CEFB # }
282: 271 0002CEFB 40 ret#2
283: 272 0002CEFC .set L232,0x0
284: 273 0002CEFC L234:
285: 274 0002CEFC 13 fed8 jbr L235
286: 275 0002CEFF .data
287: 276 00000278 * .text
288: 277 0002CEFF 00 .align 1
289: 278 0002CF00 .globl _pipe10_halt
290: 279 0002CF00 _pipe10_halt:
291: 280 0002CF00 0000 .word L251
292: 281 0002CF02 #
293: 282 0002CF02 #
294: 283 0002CF02 #
295: 284 0002CF02 # /*
296: 285 0002CF02 # **************************************************************************
297: 286 0002CF02 # *
298: 287 0002CF02 # * HALT ON AN ERROR
299: 288 0002CF02 # *
300: 289 0002CF02 # **************************************************************************
301: 290 0002CF02 # */
302: 291 0002CF02 # pipe10_halt()
303: 292 0002CF02 # {
304: 293 0002CF02 11 4d jbr L253
305: 294 0002CF04 L254:
306: 295 0002CF04 # sgl_value_4 = 0;
307: 296 0002CF04 4d effffffdd2 clrl _sgl_value_4
308: 297 0002CF0A # asm("movl _test_no,r0"); /* r0 = test number */
309: 298 0002CF0A 0d effffffdcc 50 movl _test_no,r0
310: 299 0002CF11 # asm("movl $1,r1"); /* r1 = subtest number */
311: 300 0002CF11 0d 01 51 movl $1,r1
312: 301 0002CF14 # asm("movl $1,r2"); /* r2 = error code */
313: 302 0002CF14 0d 01 52 movl $1,r2
314: 303 0002CF17 # asm("movl _cycle,r3"); /* r3 = cycle count */
315: 304 0002CF17 0d effffffdbf 53 movl _cycle,r3
316: 305 0002CF1E # asm("movl _sgl_value_1,r4"); /* r4 = sgl operand #1 */
317: 306 0002CF1E 0d effffffdb8 54 movl _sgl_value_1,r4
318: 307 0002CF25 # asm("movl _sgl_value_2,r5"); /* r5 = sgl operand #2 */
319: 308 0002CF25 0d effffffdb1 55 movl _sgl_value_2,r5
320: 309 0002CF2C # asm("movl _sgl_value_3,r6"); /* r6 = sgl operand #3 */
321: 310 0002CF2C 0d effffffdaa 56 movl _sgl_value_3,r6
322: 311 0002CF33 # asm("movl _sgl_st_acc,r7"); /* r7 = sgl stored */
323: 312 0002CF33 0d effffffda3 57 movl _sgl_st_acc,r7
324: 313 0002CF3A # asm("movl _sgl_expected,r8"); /* r8 = sgl expected */
325: 314 0002CF3A 0d effffffd9c 58 movl _sgl_expected,r8
326: 315 0002CF41 # asm("movl _sgl_value_4,r9"); /* r9 = op3 expected */
327: 316 0002CF41 0d effffffd95 59 movl _sgl_value_4,r9
328: 317 0002CF48 # asm("movl _index,r10"); /* r10 = data index */
329: 318 0002CF48 0d effffffd8e 5a movl _index,r10
330: 319 0002CF4F # asm("halt"); /* HALT ... */
331: 320 0002CF4F 00 halt
332: 321 0002CF50 # }
333: 322 0002CF50 40 ret#2
334: 323 0002CF51 .set L251,0x0
335: 324 0002CF51 L253:
336: 325 0002CF51 11 b1 jbr L254
337: 326 0002CF53 .data
338: 326 00059C2F .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.