|
|
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.