|
|
Power 6/32 Unix version 1.21
1 00000000 LL0:
2 00000000 .data
3 0000032c * .text
4 00000000 .align 1
5 00000000 .globl _pipe_9
6 00000000 _pipe_9:
7 0002C9B0 0000 .word L215
8 0002C9B2 # #include "fpp_defs.h"
9 0002C9B2 #
10 0002C9B2 # /*****************************************************************************
11 0002C9B2 # *
12 0002C9B2 # * PIPELINE TEST #9
13 0002C9B2 # *
14 0002C9B2 # * LDF(op1), MULF(op2), CVFL r0, SUBF operand[r0], STF
15 0002C9B2 # *
16 0002C9B2 # * -where the operands are the fmacro1 MULF data patterns. The SUBF operand's
17 0002C9B2 # * address is based on the result of the CVFL.
18 0002C9B2 # * -The load, multiply, and convert will be done twice. The first time will
19 0002C9B2 # * be to get the index and the data to subtract. The data to subtract will
20 0002C9B2 # * be the same as the accumulator so we'll expect a reasult of zero. The
21 0002C9B2 # * data will be stored based on the 1st CVFL result.
22 0002C9B2 # * -If the 2nd CVFL doesn't get done before the SUBF operand is fetched then
23 0002C9B2 # * we won't get a final accumulator of zero.
24 0002C9B2 # * -For size reasons, only the MULF data with a result between -100 and +100
25 0002C9B2 # * will be used for this test.
26 0002C9B2 # *****************************************************************************/
27 0002C9B2 # pipe_9()
28 0002C9B2 # {
29 0002C9B2 13 017d jbr L217
30 0002C9B5 L218:
31 0002C9B5 # asm(".globl _pipeline_9_t");
32 0002C9B5 .globl _pipeline_9_t
33 0002C9B5 # asm("_pipeline_9_t:");
34 0002C9B5 _pipeline_9_t:
35 0002C9B5 # if( (cycle == 1) && (prt_hdrs) ) /* print headers on 1st cycle */
36 0002C9B5 1d effffffff5 01 cmpl _cycle,$1
37 0002C9BC 21 15 jneq L219
38 0002C9BE 5d efffffffec tstl _prt_hdrs
39 0002C9C4 31 0d jeql L219
40 0002C9C6 # writes(" PIPE_9 ");
41 0002C9C6 .data 1
42 0000032c * L221:
43 0000032c * 20504950455F392000 .ascii " PIPE_9 \0"
44 00000335 * .text
45 0002C9C6 dd 8f0000032c pushl $L221
46 0002C9CC fe 08 efffffffdd callf $8,_writes
47 0002C9D3 # force_loop = FALSE; /* clear force_loop flag */
48 0002C9D3 L219:
49 0002C9D3 4d efffffffd7 clrl _force_loop
50 0002C9D9 # for( index = 0; index <= max_mulf_1_index; index++ ) {
51 0002C9D9 4d efffffffd1 clrl _index
52 0002C9DF L224:
53 0002C9DF 1d efffffffcb efffffffc6 cmpl _index,_max_mulf_1_index
54 0002C9EA 51 03 13 013c jgtr L223
55 0002C9EF # sgl_value_1 = mulf_1_data[index].op_1; /* get the data */
56 0002C9EF 5c 0c efffffffba 50 mull3 $12,_index,r0
57 0002C9F7 0d e000000000 efffffffae movl _mulf_1_data(r0),_sgl_value_1
58 0002CA02 # sgl_value_2 = mulf_1_data[index].op_2; /* operands */
59 0002CA02 5c 0c efffffffa7 50 mull3 $12,_index,r0
60 0002CA0A 0d e000000004 efffffff9b movl _mulf_1_data+4(r0),_sgl_value_2
61 0002CA15 # sgl_expected = mulf_1_data[index].exp;
62 0002CA15 5c 0c efffffff94 50 mull3 $12,_index,r0
63 0002CA1D 0d e000000008 efffffff88 movl _mulf_1_data+8(r0),_sgl_expected
64 0002CA28 # asm("ldf _sgl_value_1");
65 0002CA28 06 efffffff82 ldf _sgl_value_1
66 0002CA2E # asm("mulf _sgl_value_2");
67 0002CA2E e6 efffffff7c mulf _sgl_value_2
68 0002CA34 # asm("cvfl _index2");
69 0002CA34 86 efffffff76 cvfl _index2
70 0002CA3A # asm("nop");
71 0002CA3A 10 nop
72 0002CA3B # if( (index2 >= -99) && (index2 <= 99) ) {
73 0002CA3B 1d efffffff6f 889d cmpl _index2,$-99
74 0002CA43 81 03 13 00da jlss L225
75 0002CA48 1d efffffff62 8863 cmpl _index2,$99
76 0002CA50 41 f3 jgtr L225
77 0002CA52 # if( index2 ) {
78 0002CA52 5d efffffff58 tstl _index2
79 0002CA58 31 1d jeql L226
80 0002CA5A # sgl_value_5 = 0; /* set a dummy index */
81 0002CA5A 4d efffffff50 clrl _sgl_value_5
82 0002CA60 # adr_pipe_ops[sgl_value_5] = 0;
83 0002CA60 0d efffffff4a 50 movl _sgl_value_5,r0
84 0002CA67 48 02 50 50 shll $2,r0,r0
85 0002CA6B 1c 50 efffffff3e 50 addl3 r0,_adr_pipe_ops,r0
86 0002CA73 4d 60 clrl (r0)
87 0002CA75 # } else {
88 0002CA75 11 21 jbr L227
89 0002CA77 L226:
90 0002CA77 # sgl_value_5 = 6; /* set a dummy index */
91 0002CA77 0d 06 efffffff32 movl $6,_sgl_value_5
92 0002CA7E # adr_pipe_ops[sgl_value_5] = 0xabadbabe;
93 0002CA7E 0d efffffff2c 50 movl _sgl_value_5,r0
94 0002CA85 48 02 50 50 shll $2,r0,r0
95 0002CA89 1c 50 efffffff20 50 addl3 r0,_adr_pipe_ops,r0
96 0002CA91 0d 8fabadbabe 60 movl $-1414677826,(r0)
97 0002CA98 # }
98 0002CA98 L227:
99 0002CA98 # asm("movl _index2,r0"); /* save the index */
100 0002CA98 0d efffffff12 50 movl _index2,r0
101 0002CA9F # asm("stf _pipe_ops[r0]"); /* save the Acc's value */
102 0002CA9F 26 40efffffff0a stf _pipe_ops[r0]
103 0002CAA6 # asm("stf _sgl_value_4"); /* save this value */
104 0002CAA6 26 efffffff04 stf _sgl_value_4
105 0002CAAC # /*
106 0002CAAC # * This is the start of the LOOP ON ERROR section
107 0002CAAC # */
108 0002CAAC # asm("_pipe9_1_lp:");
109 0002CAAC _pipe9_1_lp:
110 0002CAAC # asm("movl _sgl_value_5,r0"); /* save the bum index */
111 0002CAAC 0d effffffefe 50 movl _sgl_value_5,r0
112 0002CAB3 # asm("ldf _sgl_value_1");
113 0002CAB3 06 effffffef7 ldf _sgl_value_1
114 0002CAB9 # asm("mulf _sgl_value_2");
115 0002CAB9 e6 effffffef1 mulf _sgl_value_2
116 0002CABF # asm("cvfl r0"); /* set up the index to use */
117 0002CABF 86 50 cvfl r0
118 0002CAC1 # asm("subf _pipe_ops[r0]"); /* subtract saved value */
119 0002CAC1 d6 40effffffee8 subf _pipe_ops[r0]
120 0002CAC8 # asm("stf _sgl_st_acc");
121 0002CAC8 26 effffffee2 stf _sgl_st_acc
122 0002CACE # asm("movl r0,_sgl_value_6"); /* save the index used */
123 0002CACE 0d 50 effffffedb movl r0,_sgl_value_6
124 0002CAD5 # if( force_loop )
125 0002CAD5 5d effffffed5 tstl _force_loop
126 0002CADB 31 02 jeql L228
127 0002CADD # asm("brb _pipe9_1_lp");; /* loop on the error */
128 0002CADD 11 cd brb _pipe9_1_lp
129 0002CADF L228:
130 0002CADF # /*
131 0002CADF # * Verify the results
132 0002CADF # */
133 0002CADF # if( sgl_st_acc ) { /* the Acc s/b cleared */
134 0002CADF 5d effffffecb tstl _sgl_st_acc
135 0002CAE5 31 3b jeql L229
136 0002CAE7 # errcnt++; /* bump the error count */
137 0002CAE7 6d effffffec3 incl _errcnt
138 0002CAED # if ( prt_error )
139 0002CAED 5d effffffebd tstl _prt_error
140 0002CAF3 31 07 jeql L230
141 0002CAF5 # pipe9_print(); /* print the error mesage */
142 0002CAF5 fe 04 ef0000003a callf $4,_pipe9_print
143 0002CAFC # if ( halt_flg )
144 0002CAFC L230:
145 0002CAFC 5d effffffeae tstl _halt_flg
146 0002CB02 31 09 jeql L232
147 0002CB04 # pipe9_halt( 1 ); /* halt on the error */
148 0002CB04 dd 01 pushl $1
149 0002CB06 fe 08 ef00000181 callf $8,_pipe9_halt
150 0002CB0D # if ( loop_on_err ) {
151 0002CB0D L232:
152 0002CB0D 5d effffffe9d tstl _loop_on_err
153 0002CB13 31 0d jeql L234
154 0002CB15 # force_loop = 1;
155 0002CB15 0d 01 effffffe94 movl $1,_force_loop
156 0002CB1C # asm("jmp _pipe9_1_lp");;
157 0002CB1C 71 efffffff8a jmp _pipe9_1_lp
158 0002CB22 # }
159 0002CB22 # }
160 0002CB22 L234:
161 0002CB22 # }
162 0002CB22 L229:
163 0002CB22 # };
164 0002CB22 L225:
165 0002CB22 L222:
166 0002CB22 6d effffffe88 incl _index
167 0002CB28 13 feb4 jbr L224
168 0002CB2B L223:
169 0002CB2B # asm("jmp *return"); /* return to the test monitor */
170 0002CB2B 71 fffffffe7f jmp *return
171 0002CB31 # }
172 0002CB31 40 ret#2
173 0002CB32 .set L215,0x0
174 0002CB32 L217:
175 0002CB32 13 fe80 jbr L218
176 0002CB35 .data
177 0000032c * .text
178 0002CB35 00 .align 1
179 0002CB36 .globl _pipe9_print
180 0002CB36 _pipe9_print:
181 0002CB36 0000 .word L235
182 0002CB38 #
183 0002CB38 #
184 0002CB38 #
185 0002CB38 #
186 0002CB38 # /***************************************************************************
187 0002CB38 # *
188 0002CB38 # * print an error message of the form
189 0002CB38 # *
190 0002CB38 # * cycle: xx Test xx, (Pipe 9), error
191 0002CB38 # * test sequence = LDF(op1), MULF(op2), CVFL r0, SUBF operand[r0], STF
192 0002CB38 # * op #1 = xxxxxxxx, final Acc = xxxxxxxx, data index = xxxxxxxx
193 0002CB38 # * op #2 = xxxxxxxx, expected Acc = xxxxxxxx
194 0002CB38 # * op #3 = xxxxxxxx, CVFL result = xxxxxxxx
195 0002CB38 # * int expected = xxxxxxxx
196 0002CB38 # ***************************************************************************/
197 0002CB38 # pipe9_print()
198 0002CB38 # {
199 0002CB38 13 0150 jbr L237
200 0002CB3B L238:
201 0002CB3B # writes("\n"); /* start a new print line */
202 0002CB3B .data 1
203 00000335 * L239:
204 00000335 * 0A00 .ascii "\12\0"
205 00000337 * .text
206 0002CB3B dd 8f00000335 pushl $L239
207 0002CB41 fe 08 effffffe68 callf $8,_writes
208 0002CB48 # writes("cycle: ");
209 0002CB48 .data 1
210 00000337 * L240:
211 00000337 * 6379636C653A2000 .ascii "cycle: \0"
212 0000033f * .text
213 0002CB48 dd 8f00000337 pushl $L240
214 0002CB4E fe 08 effffffe5b callf $8,_writes
215 0002CB55 # writed( cycle );
216 0002CB55 dd effffffe55 pushl _cycle
217 0002CB5B fe 08 effffffe4e callf $8,_writed
218 0002CB62 # writes(" Test ");
219 0002CB62 .data 1
220 0000033f * L242:
221 0000033f * 2020546573742000 .ascii " Test \0"
222 00000347 * .text
223 0002CB62 dd 8f0000033f pushl $L242
224 0002CB68 fe 08 effffffe41 callf $8,_writes
225 0002CB6F # writed( test_no );
226 0002CB6F dd effffffe3b pushl _test_no
227 0002CB75 fe 08 effffffe34 callf $8,_writed
228 0002CB7C # writes(" (Pipe 9), error\n");
229 0002CB7C .data 1
230 00000347 * L243:
231 00000347 * 20202028506970652039292C2 .ascii " (Pipe 9), error\12\0"
06572726F720A00
232 0000035b * .text
233 0002CB7C dd 8f00000347 pushl $L243
234 0002CB82 fe 08 effffffe27 callf $8,_writes
235 0002CB89 # writes(" LDF(op1), MULF(op2), CVFL(r0), SUBF(op3), STF\n");
236 0002CB89 .data 1
237 0000035b * L244:
238 0000035b * 204C4446286F7031292C204D5 .ascii " LDF(op1), MULF(op2), CVFL(r0), SUBF(op3), STF\12\0"
54C46286F7032292C20435646
4C287230292C2053554246286
F7033292C205354460A00
239 0000038b * .text
240 0002CB89 dd 8f0000035b pushl $L244
241 0002CB8F fe 08 effffffe1a callf $8,_writes
242 0002CB96 # writes("operand 1 = ");
243 0002CB96 .data 1
244 0000038b * L245:
245 0000038b * 6F706572616E642031203D200 .ascii "operand 1 = \0"
0
246 00000398 * .text
247 0002CB96 dd 8f0000038b pushl $L245
248 0002CB9C fe 08 effffffe0d callf $8,_writes
249 0002CBA3 # write32h( sgl_value_1 );
250 0002CBA3 dd effffffe07 pushl _sgl_value_1
251 0002CBA9 fe 08 effffffe00 callf $8,_write32h
252 0002CBB0 # writes(", final Acc = ");
253 0002CBB0 .data 1
254 00000398 * L247:
255 00000398 * 2C202020202066696E616C204 .ascii ", final Acc = \0"
16363203D2000
256 000003ab * .text
257 0002CBB0 dd 8f00000398 pushl $L247
258 0002CBB6 fe 08 effffffdf3 callf $8,_writes
259 0002CBBD # write32h( sgl_st_acc );
260 0002CBBD dd effffffded pushl _sgl_st_acc
261 0002CBC3 fe 08 effffffde6 callf $8,_write32h
262 0002CBCA # writes(", data index = ");
263 0002CBCA .data 1
264 000003ab * L248:
265 000003ab * 2C2020206461746120696E646 .ascii ", data index = \0"
578203D2000
266 000003bd * .text
267 0002CBCA dd 8f000003ab pushl $L248
268 0002CBD0 fe 08 effffffdd9 callf $8,_writes
269 0002CBD7 # writed( index );
270 0002CBD7 dd effffffdd3 pushl _index
271 0002CBDD fe 08 effffffdcc callf $8,_writed
272 0002CBE4 # writec('\n');
273 0002CBE4 dd 0a pushl $10
274 0002CBE6 fe 08 effffffdc3 callf $8,_writec
275 0002CBED # writes("operand 2 = ");
276 0002CBED .data 1
277 000003bd * L250:
278 000003bd * 6F706572616E642032203D200 .ascii "operand 2 = \0"
0
279 000003ca * .text
280 0002CBED dd 8f000003bd pushl $L250
281 0002CBF3 fe 08 effffffdb6 callf $8,_writes
282 0002CBFA # write32h( sgl_value_2 );
283 0002CBFA dd effffffdb0 pushl _sgl_value_2
284 0002CC00 fe 08 effffffda9 callf $8,_write32h
285 0002CC07 # writes(", expected Acc = ");
286 0002CC07 .data 1
287 000003ca * L251:
288 000003ca * 2C20206578706563746564204 .ascii ", expected Acc = \0"
16363203D2000
289 000003dd * .text
290 0002CC07 dd 8f000003ca pushl $L251
291 0002CC0D fe 08 effffffd9c callf $8,_writes
292 0002CC14 # write32h( sgl_expected );
293 0002CC14 dd effffffd96 pushl _sgl_expected
294 0002CC1A fe 08 effffffd8f callf $8,_write32h
295 0002CC21 # writec('\n');
296 0002CC21 dd 0a pushl $10
297 0002CC23 fe 08 effffffd86 callf $8,_writec
298 0002CC2A # writes("operand 3 = ");
299 0002CC2A .data 1
300 000003dd * L252:
301 000003dd * 6F706572616E642033203D200 .ascii "operand 3 = \0"
0
302 000003ea * .text
303 0002CC2A dd 8f000003dd pushl $L252
304 0002CC30 fe 08 effffffd79 callf $8,_writes
305 0002CC37 # write32h( sgl_value_4 );
306 0002CC37 dd effffffd73 pushl _sgl_value_4
307 0002CC3D fe 08 effffffd6c callf $8,_write32h
308 0002CC44 # writes(", CVFL result = ");
309 0002CC44 .data 1
310 000003ea * L253:
311 000003ea * 2C2020204356464C207265737 .ascii ", CVFL result = \0"
56C74203D2000
312 000003fd * .text
313 0002CC44 dd 8f000003ea pushl $L253
314 0002CC4A fe 08 effffffd5f callf $8,_writes
315 0002CC51 # write32h( sgl_value_6 );
316 0002CC51 dd effffffd59 pushl _sgl_value_6
317 0002CC57 fe 08 effffffd52 callf $8,_write32h
318 0002CC5E # writec('\n');
319 0002CC5E dd 0a pushl $10
320 0002CC60 fe 08 effffffd49 callf $8,_writec
321 0002CC67 # writes(" int expected = ");
322 0002CC67 .data 1
323 000003fd * L254:
324 000003fd * 2020202020202020202020202 .ascii " int expected = \0"
020202020202020202020696E
74206578706563746564203D2
000
325 00000424 * .text
326 0002CC67 dd 8f000003fd pushl $L254
327 0002CC6D fe 08 effffffd3c callf $8,_writes
328 0002CC74 # write32h( index2 );
329 0002CC74 dd effffffd36 pushl _index2
330 0002CC7A fe 08 effffffd2f callf $8,_write32h
331 0002CC81 # writec('\n');
332 0002CC81 dd 0a pushl $10
333 0002CC83 fe 08 effffffd26 callf $8,_writec
334 0002CC8A #
335 0002CC8A #
336 0002CC8A # }
337 0002CC8A 40 ret#2
338 0002CC8B .set L235,0x0
339 0002CC8B L237:
340 0002CC8B 13 fead jbr L238
341 0002CC8E .data
342 0000032c * .text
343 0002CC8E .align 1
344 0002CC8E .globl _pipe9_halt
345 0002CC8E _pipe9_halt:
346 0002CC8E 0000 .word L255
347 0002CC90 #
348 0002CC90 #
349 0002CC90 #
350 0002CC90 # /*
351 0002CC90 # **************************************************************************
352 0002CC90 # *
353 0002CC90 # * HALT ON AN ERROR
354 0002CC90 # *
355 0002CC90 # **************************************************************************
356 0002CC90 # */
357 0002CC90 # pipe9_halt()
358 0002CC90 # {
359 0002CC90 11 47 jbr L257
360 0002CC92 L258:
361 0002CC92 # asm("movl _test_no,r0"); /* r0 = test number */
362 0002CC92 0d effffffd18 50 movl _test_no,r0
363 0002CC99 # asm("movl $1,r1"); /* r1 = subtest number */
364 0002CC99 0d 01 51 movl $1,r1
365 0002CC9C # asm("movl $1,r2"); /* r2 = error code */
366 0002CC9C 0d 01 52 movl $1,r2
367 0002CC9F # asm("movl _cycle,r3"); /* r3 = cycle count */
368 0002CC9F 0d effffffd0b 53 movl _cycle,r3
369 0002CCA6 # asm("movl _sgl_value_1,r4"); /* r4 = sgl operand #1 */
370 0002CCA6 0d effffffd04 54 movl _sgl_value_1,r4
371 0002CCAD # asm("movl _sgl_value_2,r5"); /* r5 = sgl operand #2 */
372 0002CCAD 0d effffffcfd 55 movl _sgl_value_2,r5
373 0002CCB4 # asm("movl _sgl_st_acc,r6"); /* r6 = sgl stored */
374 0002CCB4 0d effffffcf6 56 movl _sgl_st_acc,r6
375 0002CCBB # asm("movl _sgl_expected,r7"); /* r7 = sgl expected */
376 0002CCBB 0d effffffcef 57 movl _sgl_expected,r7
377 0002CCC2 # asm("movl _sgl_value_6,r8"); /* r8 = CVFL int actual */
378 0002CCC2 0d effffffce8 58 movl _sgl_value_6,r8
379 0002CCC9 # asm("movl _index2,r9"); /* r9 = CVFL int expected */
380 0002CCC9 0d effffffce1 59 movl _index2,r9
381 0002CCD0 # asm("movl _index,r10"); /* r10 = data index */
382 0002CCD0 0d effffffcda 5a movl _index,r10
383 0002CCD7 # asm("halt"); /* HALT ... */
384 0002CCD7 00 halt
385 0002CCD8 # }
386 0002CCD8 40 ret#2
387 0002CCD9 .set L255,0x0
388 0002CCD9 L257:
389 0002CCD9 11 b7 jbr L258
390 0002CCDB .data
390 0005968B .data
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.