|
|
1.1 ! root 1: 1 00000000 LL0: ! 2: 2 00000000 .data ! 3: 3 00000998 * .text ! 4: 4 00000000 .align 1 ! 5: 5 00000000 .globl _test_inst ! 6: 6 00000000 _test_inst: ! 7: 7 0000E610 0000 .word L382 ! 8: 8 0000E612 # #include "evt_defs.h" ! 9: 9 0000E612 # ! 10: 10 0000E612 # /************************************************************************** ! 11: 11 0000E612 # * ! 12: 12 0000E612 # * Test the current instruction ! 13: 13 0000E612 # * ! 14: 14 0000E612 # * 10-Apr-85 - changed the test to just check a couple of addr. modes ! 15: 15 0000E612 # * 30-May-85 - added pipeline tests for A-loaded and B-loaded entries. ! 16: 16 0000E612 # * 20-Jul-85 - added 3 operands for MULL3 integer overflow ! 17: 17 0000E612 # **************************************************************************/ ! 18: 18 0000E612 # test_inst() ! 19: 19 0000E612 # { ! 20: 20 0000E612 13 00a8 jbr L384 ! 21: 21 0000E615 L385: ! 22: 22 0000E615 # *adr_op1_ptr = (int) adr_op1; /* set word offset ptr #1 */ ! 23: 23 0000E615 0d effffffff5 fffffffff0 movl _adr_op1,*_adr_op1_ptr ! 24: 24 0000E620 # *adr_op2_ptr = (int) adr_op2; /* set word offset ptr #2 */ ! 25: 25 0000E620 0d efffffffea ffffffffe5 movl _adr_op2,*_adr_op2_ptr ! 26: 26 0000E62B # *adr_op3_ptr = (int) adr_op3; /* set word offset ptr #3 */ ! 27: 27 0000E62B 0d efffffffdf ffffffffda movl _adr_op3,*_adr_op3_ptr ! 28: 28 0000E636 # asm("moval (sp),_monitor_sp"); /* save the stack pointer */ ! 29: 29 0000E636 ed 6e efffffffd3 moval (sp),_monitor_sp ! 30: 30 0000E63D # asm("moval (fp),_monitor_fp"); /* save the frame pointer */ ! 31: 31 0000E63D ed 6d efffffffcc moval (fp),_monitor_fp ! 32: 32 0000E644 # asm("movab _test_inst_ret,_unexp_event_ret"); ! 33: 33 0000E644 e9 ef00000064 efffffffc1 movab _test_inst_ret,_unexp_event_ret ! 34: 34 0000E64F # error = FALSE; /* clear error flag */ ! 35: 35 0000E64F 4d efffffffbb clrl _error ! 36: 36 0000E655 # set_load_flag(); /* set the LOAD ACC. flag */ ! 37: 37 0000E655 fe 04 ef00000906 callf $4,_set_load_flag ! 38: 38 0000E65C # if( !no_ops ) ! 39: 39 0000E65C 5d efffffffae tstl _no_ops ! 40: 40 0000E662 21 09 jneq L387 ! 41: 41 0000E664 # test_0_ops(); /* test inst w/ no operands */ ! 42: 42 0000E664 fe 04 efffffffa5 callf $4,_test_0_ops ! 43: 43 0000E66B # else { ! 44: 44 0000E66B 11 41 jbr L389 ! 45: 45 0000E66D L387: ! 46: 46 0000E66D # tst_l(); /* longword displacement relative */ ! 47: 47 0000E66D fe 04 ef0000004c callf $4,_tst_l ! 48: 48 0000E674 # tst_r(); /* direct register */ ! 49: 49 0000E674 fe 04 ef0000010b callf $4,_tst_r ! 50: 50 0000E67B # tst_r_d(); /* register deferred */ ! 51: 51 0000E67B fe 04 ef0000022a callf $4,_tst_r_d ! 52: 52 0000E682 # tst_r_ld(); /* register + longword displacement */ ! 53: 53 0000E682 fe 04 ef000002ef callf $4,_tst_r_ld ! 54: 54 0000E689 # tst_x_fpd(); /* FP deferred + longword index */ ! 55: 55 0000E689 fe 04 ef000003e4 callf $4,_tst_x_fpd ! 56: 56 0000E690 # tst_p1(); /* pipeline test #1, LDx <op.> */ ! 57: 57 0000E690 fe 04 ef000004fd callf $4,_tst_p1 ! 58: 58 0000E697 # if( (!load_type_inst) && (!no_fpp_wcs) ) ! 59: 59 0000E697 5d efffffff73 tstl _load_type_inst ! 60: 60 0000E69D 21 0f jneq L396 ! 61: 61 0000E69F 5d efffffff6b tstl _no_fpp_wcs ! 62: 62 0000E6A5 21 07 jneq L396 ! 63: 63 0000E6A7 # tst_p2(); /* pipeline test #2, ADDx <op.> */ ! 64: 64 0000E6A7 fe 04 ef0000064a callf $4,_tst_p2 ! 65: 65 0000E6AE # } ! 66: 66 0000E6AE L396: ! 67: 67 0000E6AE L389: ! 68: 68 0000E6AE # asm(".globl _test_inst_ret"); ! 69: 69 0000E6AE .globl _test_inst_ret ! 70: 70 0000E6AE # asm("_test_inst_ret:"); ! 71: 71 0000E6AE _test_inst_ret: ! 72: 72 0000E6AE # asm("movl _monitor_sp,sp"); /* restore the stack ptr. */ ! 73: 73 0000E6AE 0d efffffff5c 5e movl _monitor_sp,sp ! 74: 74 0000E6B5 # asm("movl _monitor_fp,fp"); /* restore the frame ptr. */ ! 75: 75 0000E6B5 0d efffffff55 5d movl _monitor_fp,fp ! 76: 76 0000E6BC # } ! 77: 77 0000E6BC 40 ret#2 ! 78: 78 0000E6BD .set L382,0x0 ! 79: 79 0000E6BD L384: ! 80: 80 0000E6BD 13 ff55 jbr L385 ! 81: 81 0000E6C0 .data ! 82: 82 00000998 * .text ! 83: 83 0000E6C0 .align 1 ! 84: 84 0000E6C0 .globl _tst_l ! 85: 85 0000E6C0 _tst_l: ! 86: 86 0000E6C0 0000 .word L398 ! 87: 87 0000E6C2 # ! 88: 88 0000E6C2 # ! 89: 89 0000E6C2 # ! 90: 90 0000E6C2 # ! 91: 91 0000E6C2 # ! 92: 92 0000E6C2 # ! 93: 93 0000E6C2 # /******************************************************************* ! 94: 94 0000E6C2 # * LONGWORD DISPLACEMENT RELATIVE ADDRESSING: ! 95: 95 0000E6C2 # * instruction = <op-code> <ef> <offset to dmp_op_1> ! 96: 96 0000E6C2 # * { <ef> <offset to dmp_op_2> } ! 97: 97 0000E6C2 # * { <ef> <offset to dmp_op_3> } ! 98: 98 0000E6C2 # *******************************************************************/ ! 99: 99 0000E6C2 # tst_l() ! 100: 100 0000E6C2 # { ! 101: 101 0000E6C2 13 00bd jbr L400 ! 102: 102 0000E6C5 L401: ! 103: 103 0000E6C5 # pipe_test = FALSE; ! 104: 104 0000E6C5 4d efffffff45 clrl _pipe_test ! 105: 105 0000E6CB # fill_reg_buf( load_regs ); /* set data for registers */ ! 106: 106 0000E6CB dd 8f00000000 pushl $_load_regs ! 107: 107 0000E6D1 fe 08 efffffff38 callf $8,_fill_reg_buf ! 108: 108 0000E6D8 # fill_reg_buf( exp_regs ); /* set data for registers */ ! 109: 109 0000E6D8 dd 8f00000000 pushl $_exp_regs ! 110: 110 0000E6DE fe 08 efffffff2b callf $8,_fill_reg_buf ! 111: 111 0000E6E5 # addr_mode = ADR_L_DSP; ! 112: 112 0000E6E5 0d 08 efffffff24 movl $8,_addr_mode ! 113: 113 0000E6EC # addr_code = addr_code2 = addr_code3 = 0xef; ! 114: 114 0000E6EC 0d 8900ef efffffff1b movl $239,_addr_code3 ! 115: 115 0000E6F5 0d efffffff15 50 movl _addr_code3,r0 ! 116: 116 0000E6FC 0d 50 efffffff0d movl r0,_addr_code2 ! 117: 117 0000E703 0d efffffff07 50 movl _addr_code2,r0 ! 118: 118 0000E70A 0d 50 effffffeff movl r0,_addr_code ! 119: 119 0000E711 # addr_size = 4; /* longword (4 byte) ops. */ ! 120: 120 0000E711 0d 04 effffffef8 movl $4,_addr_size ! 121: 121 0000E718 # addr_1 = os_op1 + 14; /* offset to the data */ ! 122: 122 0000E718 1c 0e effffffef1 50 addl3 $14,_os_op1,r0 ! 123: 123 0000E720 0d 50 effffffee9 movl r0,_addr_1 ! 124: 124 0000E727 # addr_2 = os_op2 + 9; ! 125: 125 0000E727 1c 09 effffffee2 50 addl3 $9,_os_op2,r0 ! 126: 126 0000E72F 0d 50 effffffeda movl r0,_addr_2 ! 127: 127 0000E736 # addr_3 = os_op3 + 4; ! 128: 128 0000E736 1c 04 effffffed3 50 addl3 $4,_os_op3,r0 ! 129: 129 0000E73E 0d 50 effffffecb movl r0,_addr_3 ! 130: 130 0000E745 # pack_inst(); /* pack the instr. code */ ! 131: 131 0000E745 fe 04 effffffec4 callf $4,_pack_inst ! 132: 132 0000E74C # for( index = 0; index <= max_index; index++ ) { ! 133: 133 0000E74C 4d effffffebe clrl _index ! 134: 134 0000E752 L406: ! 135: 135 0000E752 1d effffffeb8 effffffeb3 cmpl _index,_max_index ! 136: 136 0000E75D 41 22 jgtr L405 ! 137: 137 0000E75F # get_current_data( adr_op1, adr_op2 ); ! 138: 138 0000E75F dd effffffeab pushl _adr_op2 ! 139: 139 0000E765 dd effffffea5 pushl _adr_op1 ! 140: 140 0000E76B fe 0c ef000006ee callf $12,_get_current_data ! 141: 141 0000E772 # run_code(); /* execute the instruction */ ! 142: 142 0000E772 fe 04 effffffe97 callf $4,_run_code ! 143: 143 0000E779 # } ! 144: 144 0000E779 L404: ! 145: 145 0000E779 6d effffffe91 incl _index ! 146: 146 0000E77F 11 d1 jbr L406 ! 147: 147 0000E781 L405: ! 148: 148 0000E781 # } ! 149: 149 0000E781 40 ret#2 ! 150: 150 0000E782 .set L398,0x0 ! 151: 151 0000E782 L400: ! 152: 152 0000E782 13 ff40 jbr L401 ! 153: 153 0000E785 .data ! 154: 154 00000998 * .text ! 155: 155 0000E785 00 .align 1 ! 156: 156 0000E786 .globl _tst_r ! 157: 157 0000E786 _tst_r: ! 158: 158 0000E786 0000 .word L409 ! 159: 159 0000E788 # ! 160: 160 0000E788 # ! 161: 161 0000E788 # ! 162: 162 0000E788 # /******************************************************************* ! 163: 163 0000E788 # * DIRECT REGISTER ADDRESSING: ! 164: 164 0000E788 # * instruction = <op-code> <50> { <54> <56> } ! 165: 165 0000E788 # *******************************************************************/ ! 166: 166 0000E788 # tst_r() ! 167: 167 0000E788 # { ! 168: 168 0000E788 13 011e jbr L411 ! 169: 169 0000E78B L412: ! 170: 170 0000E78B # pipe_test = FALSE; ! 171: 171 0000E78B 4d effffffe7f clrl _pipe_test ! 172: 172 0000E791 # fill_reg_buf( load_regs ); /* set data for registers */ ! 173: 173 0000E791 dd 8f00000000 pushl $_load_regs ! 174: 174 0000E797 fe 08 effffffe72 callf $8,_fill_reg_buf ! 175: 175 0000E79E # fill_reg_buf( exp_regs ); /* set data for registers */ ! 176: 176 0000E79E dd 8f00000000 pushl $_exp_regs ! 177: 177 0000E7A4 fe 08 effffffe65 callf $8,_fill_reg_buf ! 178: 178 0000E7AB # if( op_code == MULL3_OP_CODE ) ! 179: 179 0000E7AB 1d effffffe5f 885c cmpl _op_code,$92 ! 180: 180 0000E7B3 21 06 jneq L413 ! 181: 181 0000E7B5 # exp_regs[6] = 0; /* final op #3 should = 0 */ ! 182: 182 0000E7B5 4d effffffe6d clrl _exp_regs+24 ! 183: 183 0000E7BB # addr_mode = ADR_REG; ! 184: 184 0000E7BB L413: ! 185: 185 0000E7BB 0d 0c effffffe4e movl $12,_addr_mode ! 186: 186 0000E7C2 # addr_code = 0x50; /* 1st op in registers 0/1 */ ! 187: 187 0000E7C2 0d 8850 effffffe46 movl $80,_addr_code ! 188: 188 0000E7CA # addr_code2 = 0x54; /* 2nd op in registers 4/5 */ ! 189: 189 0000E7CA 0d 8854 effffffe3e movl $84,_addr_code2 ! 190: 190 0000E7D2 # addr_code3 = 0x56; /* 3rd op in registers 6 */ ! 191: 191 0000E7D2 0d 8856 effffffe36 movl $86,_addr_code3 ! 192: 192 0000E7DA # addr_size = 0; /* no addressing bytes */ ! 193: 193 0000E7DA 4d effffffe30 clrl _addr_size ! 194: 194 0000E7E0 # pack_inst(); /* pack the instr. code */ ! 195: 195 0000E7E0 fe 04 effffffe29 callf $4,_pack_inst ! 196: 196 0000E7E7 # for( index = 0; index <= max_index; index++ ) { ! 197: 197 0000E7E7 4d effffffe23 clrl _index ! 198: 198 0000E7ED L416: ! 199: 199 0000E7ED 1d effffffe1d effffffe18 cmpl _index,_max_index ! 200: 200 0000E7F8 51 03 13 00ab jgtr L415 ! 201: 201 0000E7FD # get_current_data( adr_op1, adr_op2 ); /* addr's not used */ ! 202: 202 0000E7FD dd effffffe0d pushl _adr_op2 ! 203: 203 0000E803 dd effffffe07 pushl _adr_op1 ! 204: 204 0000E809 fe 0c ef00000650 callf $12,_get_current_data ! 205: 205 0000E810 # load_regs[0] = dbl_value_1.m; /* set the data */ ! 206: 206 0000E810 0d effffffdfa effffffdf5 movl _dbl_value_1,_load_regs ! 207: 207 0000E81B # load_regs[1] = dbl_value_1.l; ! 208: 208 0000E81B 0d effffffdf3 effffffdee movl _dbl_value_1+4,_load_regs+4 ! 209: 209 0000E826 # load_regs[4] = dbl_value_2.m; ! 210: 210 0000E826 0d effffffde4 effffffdef movl _dbl_value_2,_load_regs+16 ! 211: 211 0000E831 # load_regs[5] = dbl_value_2.l; ! 212: 212 0000E831 0d effffffddd effffffde8 movl _dbl_value_2+4,_load_regs+20 ! 213: 213 0000E83C # if( op_code == MULL2_OP_CODE ) ! 214: 214 0000E83C 1d effffffdce 884c cmpl _op_code,$76 ! 215: 215 0000E844 21 08 jneq L417 ! 216: 216 0000E846 # exp_regs[4] = 0; /* final op #2 should = 0 */ ! 217: 217 0000E846 4d effffffdd4 clrl _exp_regs+16 ! 218: 218 0000E84C # else /* op #2 shouldn't change */ ! 219: 219 0000E84C 11 0b jbr L418 ! 220: 220 0000E84E L417: ! 221: 221 0000E84E # exp_regs[4] = dbl_value_2.m; ! 222: 222 0000E84E 0d effffffdbc effffffdc7 movl _dbl_value_2,_exp_regs+16 ! 223: 223 0000E859 L418: ! 224: 224 0000E859 # exp_regs[5] = dbl_value_2.l; ! 225: 225 0000E859 0d effffffdb5 effffffdc0 movl _dbl_value_2+4,_exp_regs+20 ! 226: 226 0000E864 # exp_regs[1] = dbl_value_1.l; /* op #1's LSW won't change */ ! 227: 227 0000E864 0d effffffdaa effffffda5 movl _dbl_value_1+4,_exp_regs+4 ! 228: 228 0000E86F # if( (op_code == CVFL_OP_CODE) || /* correct for sgl store */ ! 229: 229 0000E86F # (op_code == CVDL_OP_CODE) ) ! 230: 230 0000E86F 1d effffffd9b 890086 cmpl _op_code,$134 ! 231: 231 0000E878 31 0b jeql L9999 ! 232: 232 0000E87A 1d effffffd90 890087 cmpl _op_code,$135 ! 233: 233 0000E883 21 08 jneq L419 ! 234: 234 0000E885 L9999: ! 235: 235 0000E885 # exp_regs[0] = 0; /* ovfl results are cleared */ ! 236: 236 0000E885 4d effffffd85 clrl _exp_regs ! 237: 237 0000E88B # else ! 238: 238 0000E88B 11 0b jbr L420 ! 239: 239 0000E88D L419: ! 240: 240 0000E88D # exp_regs[0] = dbl_value_1.m; ! 241: 241 0000E88D 0d effffffd7d effffffd78 movl _dbl_value_1,_exp_regs ! 242: 242 0000E898 L420: ! 243: 243 0000E898 # run_code(); /* execute the instruction */ ! 244: 244 0000E898 fe 04 effffffd71 callf $4,_run_code ! 245: 245 0000E89F # } ! 246: 246 0000E89F L414: ! 247: 247 0000E89F 6d effffffd6b incl _index ! 248: 248 0000E8A5 13 ff45 jbr L416 ! 249: 249 0000E8A8 L415: ! 250: 250 0000E8A8 # } ! 251: 251 0000E8A8 40 ret#2 ! 252: 252 0000E8A9 .set L409,0x0 ! 253: 253 0000E8A9 L411: ! 254: 254 0000E8A9 13 fedf jbr L412 ! 255: 255 0000E8AC .data ! 256: 256 00000998 * .text ! 257: 257 0000E8AC .align 1 ! 258: 258 0000E8AC .globl _tst_r_d ! 259: 259 0000E8AC _tst_r_d: ! 260: 260 0000E8AC 0000 .word L421 ! 261: 261 0000E8AE # ! 262: 262 0000E8AE # ! 263: 263 0000E8AE # ! 264: 264 0000E8AE # /******************************************************************* ! 265: 265 0000E8AE # * REGISTER DEFERRED ADDRESSING: ! 266: 266 0000E8AE # * instruction = <op-code> <60> { <61> <62> } ! 267: 267 0000E8AE # *******************************************************************/ ! 268: 268 0000E8AE # tst_r_d() ! 269: 269 0000E8AE # { ! 270: 270 0000E8AE 13 00c4 jbr L423 ! 271: 271 0000E8B1 L424: ! 272: 272 0000E8B1 # pipe_test = FALSE; ! 273: 273 0000E8B1 4d effffffd59 clrl _pipe_test ! 274: 274 0000E8B7 # fill_reg_buf( load_regs ); /* set data for registers */ ! 275: 275 0000E8B7 dd 8f00000000 pushl $_load_regs ! 276: 276 0000E8BD fe 08 effffffd4c callf $8,_fill_reg_buf ! 277: 277 0000E8C4 # fill_reg_buf( exp_regs ); /* set data for registers */ ! 278: 278 0000E8C4 dd 8f00000000 pushl $_exp_regs ! 279: 279 0000E8CA fe 08 effffffd3f callf $8,_fill_reg_buf ! 280: 280 0000E8D1 # addr_mode = ADR_REG_DEF; ! 281: 281 0000E8D1 0d 0d effffffd38 movl $13,_addr_mode ! 282: 282 0000E8D8 # addr_code = 0x60; ! 283: 283 0000E8D8 0d 8860 effffffd30 movl $96,_addr_code ! 284: 284 0000E8E0 # addr_code2 = 0x61; ! 285: 285 0000E8E0 0d 8861 effffffd28 movl $97,_addr_code2 ! 286: 286 0000E8E8 # addr_code3 = 0x62; ! 287: 287 0000E8E8 0d 8862 effffffd20 movl $98,_addr_code3 ! 288: 288 0000E8F0 # addr_size = 0; /* no address byte(s) */ ! 289: 289 0000E8F0 4d effffffd1a clrl _addr_size ! 290: 290 0000E8F6 # load_regs[0] = (int) adr_op1; /* get addr of op. 1 */ ! 291: 291 0000E8F6 0d effffffd14 effffffd0f movl _adr_op1,_load_regs ! 292: 292 0000E901 # load_regs[1] = (int) adr_op2; /* get addr of op. 2 */ ! 293: 293 0000E901 0d effffffd09 effffffd08 movl _adr_op2,_load_regs+4 ! 294: 294 0000E90C # load_regs[2] = (int) adr_op3; /* get addr of op. 3 */ ! 295: 295 0000E90C 0d effffffcfe effffffd01 movl _adr_op3,_load_regs+8 ! 296: 296 0000E917 # exp_regs[0] = load_regs[0]; ! 297: 297 0000E917 0d effffffcf3 effffffcee movl _load_regs,_exp_regs ! 298: 298 0000E922 # exp_regs[1] = load_regs[1]; ! 299: 299 0000E922 0d effffffcec effffffce7 movl _load_regs+4,_exp_regs+4 ! 300: 300 0000E92D # exp_regs[2] = load_regs[2]; ! 301: 301 0000E92D 0d effffffce5 effffffce0 movl _load_regs+8,_exp_regs+8 ! 302: 302 0000E938 # pack_inst(); /* pack the instr. code */ ! 303: 303 0000E938 fe 04 effffffcd1 callf $4,_pack_inst ! 304: 304 0000E93F # for( index = 0; index <= max_index; index++ ) { ! 305: 305 0000E93F 4d effffffccb clrl _index ! 306: 306 0000E945 L427: ! 307: 307 0000E945 1d effffffcc5 effffffcc0 cmpl _index,_max_index ! 308: 308 0000E950 41 22 jgtr L426 ! 309: 309 0000E952 # get_current_data( adr_op1, adr_op2 ); ! 310: 310 0000E952 dd effffffcb8 pushl _adr_op2 ! 311: 311 0000E958 dd effffffcb2 pushl _adr_op1 ! 312: 312 0000E95E fe 0c ef000004fb callf $12,_get_current_data ! 313: 313 0000E965 # run_code(); /* execute the instruction */ ! 314: 314 0000E965 fe 04 effffffca4 callf $4,_run_code ! 315: 315 0000E96C # } ! 316: 316 0000E96C L425: ! 317: 317 0000E96C 6d effffffc9e incl _index ! 318: 318 0000E972 11 d1 jbr L427 ! 319: 319 0000E974 L426: ! 320: 320 0000E974 # } ! 321: 321 0000E974 40 ret#2 ! 322: 322 0000E975 .set L421,0x0 ! 323: 323 0000E975 L423: ! 324: 324 0000E975 13 ff39 jbr L424 ! 325: 325 0000E978 .data ! 326: 326 00000998 * .text ! 327: 327 0000E978 .align 1 ! 328: 328 0000E978 .globl _tst_r_ld ! 329: 329 0000E978 _tst_r_ld: ! 330: 330 0000E978 0000 .word L428 ! 331: 331 0000E97A # ! 332: 332 0000E97A # ! 333: 333 0000E97A # ! 334: 334 0000E97A # ! 335: 335 0000E97A # /******************************************************************* ! 336: 336 0000E97A # * REGISTER + LONGWORD DISPLACEMENT DEFERRED ADDRESSING: ! 337: 337 0000E97A # * instruction = <op-code> <f4> <(longword &ptr_to_op_1 -r4)> ! 338: 338 0000E97A # * { <f5> <(longword &ptr_to_op_2 -r5)> } ! 339: 339 0000E97A # * { <f6> <(longword &ptr_to_op_3 -r6)> } ! 340: 340 0000E97A # *******************************************************************/ ! 341: 341 0000E97A # tst_r_ld() ! 342: 342 0000E97A # { ! 343: 343 0000E97A 13 00f3 jbr L430 ! 344: 344 0000E97D L431: ! 345: 345 0000E97D # pipe_test = FALSE; ! 346: 346 0000E97D 4d effffffc8d clrl _pipe_test ! 347: 347 0000E983 # fill_reg_buf( load_regs ); /* set data for registers */ ! 348: 348 0000E983 dd 8f00000000 pushl $_load_regs ! 349: 349 0000E989 fe 08 effffffc80 callf $8,_fill_reg_buf ! 350: 350 0000E990 # fill_reg_buf( exp_regs ); /* set data for registers */ ! 351: 351 0000E990 dd 8f00000000 pushl $_exp_regs ! 352: 352 0000E996 fe 08 effffffc73 callf $8,_fill_reg_buf ! 353: 353 0000E99D # addr_mode = ADR_REG_L_DEF; ! 354: 354 0000E99D 0d 18 effffffc6c movl $24,_addr_mode ! 355: 355 0000E9A4 # addr_code = 0xf4; /* addr 1 is offset by r4 */ ! 356: 356 0000E9A4 0d 8900f4 effffffc63 movl $244,_addr_code ! 357: 357 0000E9AD # addr_code2 = 0xf5; /* addr 2 is offset by r5 */ ! 358: 358 0000E9AD 0d 8900f5 effffffc5a movl $245,_addr_code2 ! 359: 359 0000E9B6 # addr_code3 = 0xf6; /* addr 3 is offset by r6 */ ! 360: 360 0000E9B6 0d 8900f6 effffffc51 movl $246,_addr_code3 ! 361: 361 0000E9BF # addr_size = 4; /* longword (4 byte) op. */ ! 362: 362 0000E9BF 0d 04 effffffc4a movl $4,_addr_size ! 363: 363 0000E9C6 # addr_1 = (int) adr_op1_ptr - 123; /* set the 1st offset */ ! 364: 364 0000E9C6 3c 887b effffffc42 50 subl3 $123,_adr_op1_ptr,r0 ! 365: 365 0000E9CF 0d 50 effffffc3a movl r0,_addr_1 ! 366: 366 0000E9D6 # addr_2 = (int) adr_op2_ptr - 212; /* set the 2nd offset */ ! 367: 367 0000E9D6 3c 8900d4 effffffc31 50 subl3 $212,_adr_op2_ptr,r0 ! 368: 368 0000E9E0 0d 50 effffffc29 movl r0,_addr_2 ! 369: 369 0000E9E7 # addr_3 = (int) adr_op3_ptr - 256; /* set the 3rd offset */ ! 370: 370 0000E9E7 3c 890100 effffffc20 50 subl3 $256,_adr_op3_ptr,r0 ! 371: 371 0000E9F1 0d 50 effffffc18 movl r0,_addr_3 ! 372: 372 0000E9F8 # pack_inst(); /* pack the instr. code */ ! 373: 373 0000E9F8 fe 04 effffffc11 callf $4,_pack_inst ! 374: 374 0000E9FF # load_regs[4] = 123; /* reg 4 = 123 */ ! 375: 375 0000E9FF 0d 887b effffffc19 movl $123,_load_regs+16 ! 376: 376 0000EA07 # load_regs[5] = 212; /* reg 5 = 212 */ ! 377: 377 0000EA07 0d 8900d4 effffffc14 movl $212,_load_regs+20 ! 378: 378 0000EA10 # load_regs[6] = 256; /* reg 5 = 212 */ ! 379: 379 0000EA10 0d 890100 effffffc0f movl $256,_load_regs+24 ! 380: 380 0000EA19 # exp_regs[4] = load_regs[4]; ! 381: 381 0000EA19 0d effffffc01 effffffbfc movl _load_regs+16,_exp_regs+16 ! 382: 382 0000EA24 # exp_regs[5] = load_regs[5]; ! 383: 383 0000EA24 0d effffffbfa effffffbf5 movl _load_regs+20,_exp_regs+20 ! 384: 384 0000EA2F # exp_regs[6] = load_regs[6]; ! 385: 385 0000EA2F 0d effffffbf3 effffffbee movl _load_regs+24,_exp_regs+24 ! 386: 386 0000EA3A # for( index = 0; index <= max_index; index++ ) { ! 387: 387 0000EA3A 4d effffffbd0 clrl _index ! 388: 388 0000EA40 L434: ! 389: 389 0000EA40 1d effffffbca effffffbc5 cmpl _index,_max_index ! 390: 390 0000EA4B 41 22 jgtr L433 ! 391: 391 0000EA4D # get_current_data( adr_op1, adr_op2 ); ! 392: 392 0000EA4D dd effffffbbd pushl _adr_op2 ! 393: 393 0000EA53 dd effffffbb7 pushl _adr_op1 ! 394: 394 0000EA59 fe 0c ef00000400 callf $12,_get_current_data ! 395: 395 0000EA60 # run_code(); /* execute the instruction */ ! 396: 396 0000EA60 fe 04 effffffba9 callf $4,_run_code ! 397: 397 0000EA67 # } ! 398: 398 0000EA67 L432: ! 399: 399 0000EA67 6d effffffba3 incl _index ! 400: 400 0000EA6D 11 d1 jbr L434 ! 401: 401 0000EA6F L433: ! 402: 402 0000EA6F # } ! 403: 403 0000EA6F 40 ret#2 ! 404: 404 0000EA70 .set L428,0x0 ! 405: 405 0000EA70 L430: ! 406: 406 0000EA70 13 ff0a jbr L431 ! 407: 407 0000EA73 .data ! 408: 408 00000998 * .text ! 409: 409 0000EA73 00 .align 1 ! 410: 410 0000EA74 .globl _tst_x_fpd ! 411: 411 0000EA74 _tst_x_fpd: ! 412: 412 0000EA74 0000 .word L435 ! 413: 413 0000EA76 # ! 414: 414 0000EA76 # ! 415: 415 0000EA76 # ! 416: 416 0000EA76 # /******************************************************************* ! 417: 417 0000EA76 # * FRAME POINTER DEFERRED + LONGWORD INDEX ADDRESSING: ! 418: 418 0000EA76 # * instruction = <op-code> <44> <6d> { <45> <6d> <46> <6d> } ! 419: 419 0000EA76 # * ! 420: 420 0000EA76 # * The indeces used will be either quadword indeces ( for DBL operands ) ! 421: 421 0000EA76 # * of longword indeces ( for SGL operands ). ! 422: 422 0000EA76 # * ! 423: 423 0000EA76 # * NOTE: ! 424: 424 0000EA76 # * dmp_op_2 is exactly 4 pages away from dmp_op_1. (200 hex quadwords) ! 425: 425 0000EA76 # * IF THIS RELATIVE DISPLACEMENT IS CHANGED THEN THE R5 INDEX MUST ! 426: 426 0000EA76 # * BE CHANGED IN THIS CODE!!! ( used by CMPF2, CMPD2, MULL2, MULL3 ) ! 427: 427 0000EA76 # * dmp_op_3 is exactly 5 pages and 4 bytes away from dmp_op_1 (501 hex ! 428: 428 0000EA76 # * longwords). This is needed for MULL3. ! 429: 429 0000EA76 # *******************************************************************/ ! 430: 430 0000EA76 # tst_x_fpd() ! 431: 431 0000EA76 # { ! 432: 432 0000EA76 13 0118 jbr L437 ! 433: 433 0000EA79 L438: ! 434: 434 0000EA79 # pipe_test = FALSE; ! 435: 435 0000EA79 4d effffffb91 clrl _pipe_test ! 436: 436 0000EA7F # fill_reg_buf( load_regs ); /* set data for registers */ ! 437: 437 0000EA7F dd 8f00000000 pushl $_load_regs ! 438: 438 0000EA85 fe 08 effffffb84 callf $8,_fill_reg_buf ! 439: 439 0000EA8C # fill_reg_buf( exp_regs ); /* set data for registers */ ! 440: 440 0000EA8C dd 8f00000000 pushl $_exp_regs ! 441: 441 0000EA92 fe 08 effffffb77 callf $8,_fill_reg_buf ! 442: 442 0000EA99 # addr_mode = ADR_I_FP_DEF; ! 443: 443 0000EA99 0d 19 effffffb70 movl $25,_addr_mode ! 444: 444 0000EAA0 # addr_code = 0x44; /* code for reg. 4 index */ ! 445: 445 0000EAA0 0d 8844 effffffb68 movl $68,_addr_code ! 446: 446 0000EAA8 # addr_code2 = 0x45; /* code for reg. 5 index */ ! 447: 447 0000EAA8 0d 8845 effffffb60 movl $69,_addr_code2 ! 448: 448 0000EAB0 # addr_code3 = 0x46; /* code for reg. 6 index */ ! 449: 449 0000EAB0 0d 8846 effffffb58 movl $70,_addr_code3 ! 450: 450 0000EAB8 # addr_codeB = 0x6d; /* code for FP deferred */ ! 451: 451 0000EAB8 0d 886d effffffb50 movl $109,_addr_codeB ! 452: 452 0000EAC0 # addr_size = 0; /* no addr. field per se */ ! 453: 453 0000EAC0 4d effffffb4a clrl _addr_size ! 454: 454 0000EAC6 # pack_inst(); /* pack the instr. code */ ! 455: 455 0000EAC6 fe 04 effffffb43 callf $4,_pack_inst ! 456: 456 0000EACD # /* ! 457: 457 0000EACD # * set the frame pointer to '&operand_1 - 16 bytes' (2 quad-words) ! 458: 458 0000EACD # */ ! 459: 459 0000EACD # sgl_dummy1 = (int) adr_op1; /* get the addr of op #1 */ ! 460: 460 0000EACD 0d effffffb3d effffffb38 movl _adr_op1,_sgl_dummy1 ! 461: 461 0000EAD8 # load_regs[13] = sgl_dummy1-16; /* FP = op 1's addr - 16 */ ! 462: 462 0000EAD8 3c 10 effffffb31 50 subl3 $16,_sgl_dummy1,r0 ! 463: 463 0000EAE0 0d 50 effffffb5d movl r0,_load_regs+52 ! 464: 464 0000EAE7 # exp_regs[13] = load_regs[13]; ! 465: 465 0000EAE7 0d effffffb57 effffffb52 movl _load_regs+52,_exp_regs+52 ! 466: 466 0000EAF2 # if( (sgl_op) || /* Should we use a longword */ ! 467: 467 0000EAF2 # (op_code == LDFD_OP_CODE) || /* or a quadword index? */ ! 468: 468 0000EAF2 # (op_code == CVLD_OP_CODE) ) { ! 469: 469 0000EAF2 5d effffffb18 tstl _sgl_op ! 470: 470 0000EAF8 21 15 jneq L9998 ! 471: 471 0000EAFA 1d effffffb10 890097 cmpl _op_code,$151 ! 472: 472 0000EB03 31 0a jeql L9998 ! 473: 473 0000EB05 1d effffffb05 8877 cmpl _op_code,$119 ! 474: 474 0000EB0D 21 1b jneq L439 ! 475: 475 0000EB0F L9998: ! 476: 476 0000EB0F # load_regs[4] = 4; /* FP to op_1 (longwords) */ ! 477: 477 0000EB0F 0d 04 effffffb0a movl $4,_load_regs+16 ! 478: 478 0000EB16 # load_regs[5] = 0x404; /* FP to op_2 (longwords) */ ! 479: 479 0000EB16 0d 890404 effffffb05 movl $1028,_load_regs+20 ! 480: 480 0000EB1F # load_regs[6] = 0x505; /* FP to op_3 (longwords) */ ! 481: 481 0000EB1F 0d 890505 effffffb00 movl $1285,_load_regs+24 ! 482: 482 0000EB28 # } else { ! 483: 483 0000EB28 11 10 jbr L440 ! 484: 484 0000EB2A L439: ! 485: 485 0000EB2A # load_regs[4] = 2; /* FP to op_1 (quadwords) */ ! 486: 486 0000EB2A 0d 02 effffffaef movl $2,_load_regs+16 ! 487: 487 0000EB31 # load_regs[5] = 0x202; /* FP to op_2 (quadwords) */ ! 488: 488 0000EB31 0d 890202 effffffaea movl $514,_load_regs+20 ! 489: 489 0000EB3A # } ! 490: 490 0000EB3A L440: ! 491: 491 0000EB3A # exp_regs[4] = load_regs[4]; ! 492: 492 0000EB3A 0d effffffae0 effffffadb movl _load_regs+16,_exp_regs+16 ! 493: 493 0000EB45 # exp_regs[5] = load_regs[5]; ! 494: 494 0000EB45 0d effffffad9 effffffad4 movl _load_regs+20,_exp_regs+20 ! 495: 495 0000EB50 # exp_regs[6] = load_regs[6]; ! 496: 496 0000EB50 0d effffffad2 effffffacd movl _load_regs+24,_exp_regs+24 ! 497: 497 0000EB5B # for( index = 0; index <= max_index; index++ ) { ! 498: 498 0000EB5B 4d effffffaaf clrl _index ! 499: 499 0000EB61 L443: ! 500: 500 0000EB61 1d effffffaa9 effffffaa4 cmpl _index,_max_index ! 501: 501 0000EB6C 41 22 jgtr L442 ! 502: 502 0000EB6E # get_current_data( adr_op1, adr_op2 ); ! 503: 503 0000EB6E dd effffffa9c pushl _adr_op2 ! 504: 504 0000EB74 dd effffffa96 pushl _adr_op1 ! 505: 505 0000EB7A fe 0c ef000002df callf $12,_get_current_data ! 506: 506 0000EB81 # run_code(); /* execute the instruction */ ! 507: 507 0000EB81 fe 04 effffffa88 callf $4,_run_code ! 508: 508 0000EB88 # } ! 509: 509 0000EB88 L441: ! 510: 510 0000EB88 6d effffffa82 incl _index ! 511: 511 0000EB8E 11 d1 jbr L443 ! 512: 512 0000EB90 L442: ! 513: 513 0000EB90 # } ! 514: 514 0000EB90 40 ret#2 ! 515: 515 0000EB91 .set L435,0x0 ! 516: 516 0000EB91 L437: ! 517: 517 0000EB91 13 fee5 jbr L438 ! 518: 518 0000EB94 .data ! 519: 519 00000998 * .text ! 520: 520 0000EB94 .align 1 ! 521: 521 0000EB94 .globl _tst_p1 ! 522: 522 0000EB94 _tst_p1: ! 523: 523 0000EB94 0000 .word L444 ! 524: 524 0000EB96 # ! 525: 525 0000EB96 # ! 526: 526 0000EB96 # ! 527: 527 0000EB96 # ! 528: 528 0000EB96 # /******************************************************************* ! 529: 529 0000EB96 # * PIPELINE TEST #1 -LOAD THE ACCUMULATOR JUST BEFORE THE OPERATION ! 530: 530 0000EB96 # * instruction = <ldx> <62> <op-code> <50> { <54> <56> } ! 531: 531 0000EB96 # *******************************************************************/ ! 532: 532 0000EB96 # tst_p1() ! 533: 533 0000EB96 # { ! 534: 534 0000EB96 13 015c jbr L446 ! 535: 535 0000EB99 L447: ! 536: 536 0000EB99 # pipe_test = 1; /* pipeline test #1 */ ! 537: 537 0000EB99 0d 01 effffffa70 movl $1,_pipe_test ! 538: 538 0000EBA0 # if( acc_ld_size == DBL ) ! 539: 539 0000EBA0 1d effffffa6a 02 cmpl _acc_ld_size,$2 ! 540: 540 0000EBA7 21 09 jneq L448 ! 541: 541 0000EBA9 # pipe_inst1 = LDD_OP_CODE; ! 542: 542 0000EBA9 0d 07 effffffa60 movl $7,_pipe_inst1 ! 543: 543 0000EBB0 # else ! 544: 544 0000EBB0 11 07 jbr L449 ! 545: 545 0000EBB2 L448: ! 546: 546 0000EBB2 # pipe_inst1 = LDF_OP_CODE; ! 547: 547 0000EBB2 0d 06 effffffa57 movl $6,_pipe_inst1 ! 548: 548 0000EBB9 L449: ! 549: 549 0000EBB9 # fill_reg_buf( load_regs ); /* set data for registers */ ! 550: 550 0000EBB9 dd 8f00000000 pushl $_load_regs ! 551: 551 0000EBBF fe 08 effffffa4a callf $8,_fill_reg_buf ! 552: 552 0000EBC6 # fill_reg_buf( exp_regs ); /* set data for registers */ ! 553: 553 0000EBC6 dd 8f00000000 pushl $_exp_regs ! 554: 554 0000EBCC fe 08 effffffa3d callf $8,_fill_reg_buf ! 555: 555 0000EBD3 # if( op_code == MULL3_OP_CODE ) ! 556: 556 0000EBD3 1d effffffa37 885c cmpl _op_code,$92 ! 557: 557 0000EBDB 21 06 jneq L450 ! 558: 558 0000EBDD # exp_regs[6] = 0; /* op 3 s/b = 0 if MULL3 */ ! 559: 559 0000EBDD 4d effffffa45 clrl _exp_regs+24 ! 560: 560 0000EBE3 # addr_code_p1 = 0x62; /* piped load is via reg 2 */ ! 561: 561 0000EBE3 L450: ! 562: 562 0000EBE3 0d 8862 effffffa25 movl $98,_addr_code_p1 ! 563: 563 0000EBEB # load_regs[2] = (int)&dbl_ld_acc; /* point R2 to the load data */ ! 564: 564 0000EBEB 0d 8f00000000 effffffa22 movl $_dbl_ld_acc,_load_regs+8 ! 565: 565 0000EBF6 # exp_regs[2] = (int)&dbl_ld_acc; ! 566: 566 0000EBF6 0d 8f00000000 effffffa17 movl $_dbl_ld_acc,_exp_regs+8 ! 567: 567 0000EC01 # addr_mode = ADR_REG; ! 568: 568 0000EC01 0d 0c effffffa08 movl $12,_addr_mode ! 569: 569 0000EC08 # addr_code = 0x50; /* 1st op in registers 0/1 */ ! 570: 570 0000EC08 0d 8850 effffffa00 movl $80,_addr_code ! 571: 571 0000EC10 # addr_code2 = 0x54; /* 2nd op in registers 4/5 */ ! 572: 572 0000EC10 0d 8854 effffff9f8 movl $84,_addr_code2 ! 573: 573 0000EC18 # addr_code3 = 0x56; /* 3rd op in register 6 */ ! 574: 574 0000EC18 0d 8856 effffff9f0 movl $86,_addr_code3 ! 575: 575 0000EC20 # addr_size = 0; /* no addressing bytes */ ! 576: 576 0000EC20 4d effffff9ea clrl _addr_size ! 577: 577 0000EC26 # pack_inst(); /* pack the instr. code */ ! 578: 578 0000EC26 fe 04 effffff9e3 callf $4,_pack_inst ! 579: 579 0000EC2D # for( index = 0; index <= max_index; index++ ) { ! 580: 580 0000EC2D 4d effffff9dd clrl _index ! 581: 581 0000EC33 L453: ! 582: 582 0000EC33 1d effffff9d7 effffff9d2 cmpl _index,_max_index ! 583: 583 0000EC3E 51 03 13 00ab jgtr L452 ! 584: 584 0000EC43 # get_current_data( adr_op1, adr_op2 ); /* addr's not used */ ! 585: 585 0000EC43 dd effffff9c7 pushl _adr_op2 ! 586: 586 0000EC49 dd effffff9c1 pushl _adr_op1 ! 587: 587 0000EC4F fe 0c ef0000020a callf $12,_get_current_data ! 588: 588 0000EC56 # load_regs[0] = dbl_value_1.m; /* set the data */ ! 589: 589 0000EC56 0d effffff9b4 effffff9af movl _dbl_value_1,_load_regs ! 590: 590 0000EC61 # load_regs[1] = dbl_value_1.l; ! 591: 591 0000EC61 0d effffff9ad effffff9a8 movl _dbl_value_1+4,_load_regs+4 ! 592: 592 0000EC6C # load_regs[4] = dbl_value_2.m; ! 593: 593 0000EC6C 0d effffff99e effffff9a9 movl _dbl_value_2,_load_regs+16 ! 594: 594 0000EC77 # load_regs[5] = dbl_value_2.l; ! 595: 595 0000EC77 0d effffff997 effffff9a2 movl _dbl_value_2+4,_load_regs+20 ! 596: 596 0000EC82 # if( op_code == MULL2_OP_CODE ) ! 597: 597 0000EC82 1d effffff988 884c cmpl _op_code,$76 ! 598: 598 0000EC8A 21 08 jneq L454 ! 599: 599 0000EC8C # exp_regs[4] = 0; /* op 2 s/b = 0 if MULL2 */ ! 600: 600 0000EC8C 4d effffff98e clrl _exp_regs+16 ! 601: 601 0000EC92 # else ! 602: 602 0000EC92 11 0b jbr L455 ! 603: 603 0000EC94 L454: ! 604: 604 0000EC94 # exp_regs[4] = dbl_value_2.m; ! 605: 605 0000EC94 0d effffff976 effffff981 movl _dbl_value_2,_exp_regs+16 ! 606: 606 0000EC9F L455: ! 607: 607 0000EC9F # exp_regs[5] = dbl_value_2.l; ! 608: 608 0000EC9F 0d effffff96f effffff97a movl _dbl_value_2+4,_exp_regs+20 ! 609: 609 0000ECAA # exp_regs[1] = dbl_value_1.l; /* op #1's LSW won't change */ ! 610: 610 0000ECAA 0d effffff964 effffff95f movl _dbl_value_1+4,_exp_regs+4 ! 611: 611 0000ECB5 # if( (op_code == CVFL_OP_CODE) || /* correct for sgl store */ ! 612: 612 0000ECB5 # (op_code == CVDL_OP_CODE) ) ! 613: 613 0000ECB5 1d effffff955 890086 cmpl _op_code,$134 ! 614: 614 0000ECBE 31 0b jeql L9997 ! 615: 615 0000ECC0 1d effffff94a 890087 cmpl _op_code,$135 ! 616: 616 0000ECC9 21 08 jneq L456 ! 617: 617 0000ECCB L9997: ! 618: 618 0000ECCB # exp_regs[0] = 0; /* fault results are cleared */ ! 619: 619 0000ECCB 4d effffff93f clrl _exp_regs ! 620: 620 0000ECD1 # else ! 621: 621 0000ECD1 11 0b jbr L457 ! 622: 622 0000ECD3 L456: ! 623: 623 0000ECD3 # exp_regs[0] = dbl_value_1.m; ! 624: 624 0000ECD3 0d effffff937 effffff932 movl _dbl_value_1,_exp_regs ! 625: 625 0000ECDE L457: ! 626: 626 0000ECDE # run_code(); /* execute the instruction */ ! 627: 627 0000ECDE fe 04 effffff92b callf $4,_run_code ! 628: 628 0000ECE5 # } ! 629: 629 0000ECE5 L451: ! 630: 630 0000ECE5 6d effffff925 incl _index ! 631: 631 0000ECEB 13 ff45 jbr L453 ! 632: 632 0000ECEE L452: ! 633: 633 0000ECEE # pipe_test = FALSE; ! 634: 634 0000ECEE 4d effffff91c clrl _pipe_test ! 635: 635 0000ECF4 # } ! 636: 636 0000ECF4 40 ret#2 ! 637: 637 0000ECF5 .set L444,0x0 ! 638: 638 0000ECF5 L446: ! 639: 639 0000ECF5 13 fea1 jbr L447 ! 640: 640 0000ECF8 .data ! 641: 641 00000998 * .text ! 642: 642 0000ECF8 .align 1 ! 643: 643 0000ECF8 .globl _tst_p2 ! 644: 644 0000ECF8 _tst_p2: ! 645: 645 0000ECF8 0000 .word L458 ! 646: 646 0000ECFA # ! 647: 647 0000ECFA # ! 648: 648 0000ECFA # ! 649: 649 0000ECFA # ! 650: 650 0000ECFA # ! 651: 651 0000ECFA # /******************************************************************* ! 652: 652 0000ECFA # * PIPELINE TEST #2 -ADD TO THE ACCUMULATOR JUST BEFORE THE OPERATION ! 653: 653 0000ECFA # * instruction = <addx> <62> <op-code> <50> { <54> <56> } ! 654: 654 0000ECFA # *******************************************************************/ ! 655: 655 0000ECFA # tst_p2() ! 656: 656 0000ECFA # { ! 657: 657 0000ECFA 13 0160 jbr L460 ! 658: 658 0000ECFD L461: ! 659: 659 0000ECFD # pipe_test = 2; /* pipeline test #2 */ ! 660: 660 0000ECFD 0d 02 effffff90c movl $2,_pipe_test ! 661: 661 0000ED04 # if( acc_ld_size == DBL ) ! 662: 662 0000ED04 1d effffff906 02 cmpl _acc_ld_size,$2 ! 663: 663 0000ED0B 21 0b jneq L462 ! 664: 664 0000ED0D # pipe_inst1 = ADDD_OP_CODE; ! 665: 665 0000ED0D 0d 8900c7 effffff8fa movl $199,_pipe_inst1 ! 666: 666 0000ED16 # else ! 667: 667 0000ED16 11 09 jbr L463 ! 668: 668 0000ED18 L462: ! 669: 669 0000ED18 # pipe_inst1 = ADDF_OP_CODE; ! 670: 670 0000ED18 0d 8900c6 effffff8ef movl $198,_pipe_inst1 ! 671: 671 0000ED21 L463: ! 672: 672 0000ED21 # fill_reg_buf( load_regs ); /* set data for registers */ ! 673: 673 0000ED21 dd 8f00000000 pushl $_load_regs ! 674: 674 0000ED27 fe 08 effffff8e2 callf $8,_fill_reg_buf ! 675: 675 0000ED2E # fill_reg_buf( exp_regs ); /* set data for registers */ ! 676: 676 0000ED2E dd 8f00000000 pushl $_exp_regs ! 677: 677 0000ED34 fe 08 effffff8d5 callf $8,_fill_reg_buf ! 678: 678 0000ED3B # addr_code_p1 = 0x62; /* piped load is via reg 2 */ ! 679: 679 0000ED3B 0d 8862 effffff8cd movl $98,_addr_code_p1 ! 680: 680 0000ED43 # load_regs[2] = (int)&dbl_ld_acc; /* point R2 to the load data */ ! 681: 681 0000ED43 0d 8f00000000 effffff8ca movl $_dbl_ld_acc,_load_regs+8 ! 682: 682 0000ED4E # exp_regs[2] = (int)&dbl_ld_acc; ! 683: 683 0000ED4E 0d 8f00000000 effffff8bf movl $_dbl_ld_acc,_exp_regs+8 ! 684: 684 0000ED59 # if( op_code == MULL3_OP_CODE ) ! 685: 685 0000ED59 1d effffff8b1 885c cmpl _op_code,$92 ! 686: 686 0000ED61 21 06 jneq L464 ! 687: 687 0000ED63 # exp_regs[6] = 0; /* op 3 s/b = 0 */ ! 688: 688 0000ED63 4d effffff8bf clrl _exp_regs+24 ! 689: 689 0000ED69 # addr_mode = ADR_REG; ! 690: 690 0000ED69 L464: ! 691: 691 0000ED69 0d 0c effffff8a0 movl $12,_addr_mode ! 692: 692 0000ED70 # addr_code = 0x50; /* 1st op in registers 0/1 */ ! 693: 693 0000ED70 0d 8850 effffff898 movl $80,_addr_code ! 694: 694 0000ED78 # addr_code2 = 0x54; /* 2nd op in registers 4/5 */ ! 695: 695 0000ED78 0d 8854 effffff890 movl $84,_addr_code2 ! 696: 696 0000ED80 # addr_code3 = 0x56; /* 3rd op in register 6 */ ! 697: 697 0000ED80 0d 8856 effffff888 movl $86,_addr_code3 ! 698: 698 0000ED88 # addr_size = 0; /* no addressing bytes */ ! 699: 699 0000ED88 4d effffff882 clrl _addr_size ! 700: 700 0000ED8E # pack_inst(); /* pack the instr. code */ ! 701: 701 0000ED8E fe 04 effffff87b callf $4,_pack_inst ! 702: 702 0000ED95 # for( index = 0; index <= max_index; index++ ) { ! 703: 703 0000ED95 4d effffff875 clrl _index ! 704: 704 0000ED9B L467: ! 705: 705 0000ED9B 1d effffff86f effffff86a cmpl _index,_max_index ! 706: 706 0000EDA6 51 03 13 00ab jgtr L466 ! 707: 707 0000EDAB # get_current_data( adr_op1, adr_op2 ); /* addr's not used */ ! 708: 708 0000EDAB dd effffff85f pushl _adr_op2 ! 709: 709 0000EDB1 dd effffff859 pushl _adr_op1 ! 710: 710 0000EDB7 fe 0c ef000000a2 callf $12,_get_current_data ! 711: 711 0000EDBE # load_regs[0] = dbl_value_1.m; /* set the data */ ! 712: 712 0000EDBE 0d effffff84c effffff847 movl _dbl_value_1,_load_regs ! 713: 713 0000EDC9 # load_regs[1] = dbl_value_1.l; ! 714: 714 0000EDC9 0d effffff845 effffff840 movl _dbl_value_1+4,_load_regs+4 ! 715: 715 0000EDD4 # load_regs[4] = dbl_value_2.m; ! 716: 716 0000EDD4 0d effffff836 effffff841 movl _dbl_value_2,_load_regs+16 ! 717: 717 0000EDDF # load_regs[5] = dbl_value_2.l; ! 718: 718 0000EDDF 0d effffff82f effffff83a movl _dbl_value_2+4,_load_regs+20 ! 719: 719 0000EDEA # if( op_code == MULL2_OP_CODE ) ! 720: 720 0000EDEA 1d effffff820 884c cmpl _op_code,$76 ! 721: 721 0000EDF2 21 08 jneq L468 ! 722: 722 0000EDF4 # exp_regs[4] = 0; /* op 2 s/b = 0 */ ! 723: 723 0000EDF4 4d effffff826 clrl _exp_regs+16 ! 724: 724 0000EDFA # else ! 725: 725 0000EDFA 11 0b jbr L469 ! 726: 726 0000EDFC L468: ! 727: 727 0000EDFC # exp_regs[4] = dbl_value_2.m; /* op #2 s/n change */ ! 728: 728 0000EDFC 0d effffff80e effffff819 movl _dbl_value_2,_exp_regs+16 ! 729: 729 0000EE07 L469: ! 730: 730 0000EE07 # exp_regs[5] = dbl_value_2.l; ! 731: 731 0000EE07 0d effffff807 effffff812 movl _dbl_value_2+4,_exp_regs+20 ! 732: 732 0000EE12 # exp_regs[1] = dbl_value_1.l; /* op #1's LSW won't change */ ! 733: 733 0000EE12 0d effffff7fc effffff7f7 movl _dbl_value_1+4,_exp_regs+4 ! 734: 734 0000EE1D # if( (op_code == CVFL_OP_CODE) || /* correct for sgl store */ ! 735: 735 0000EE1D # (op_code == CVDL_OP_CODE) ) ! 736: 736 0000EE1D 1d effffff7ed 890086 cmpl _op_code,$134 ! 737: 737 0000EE26 31 0b jeql L9996 ! 738: 738 0000EE28 1d effffff7e2 890087 cmpl _op_code,$135 ! 739: 739 0000EE31 21 08 jneq L470 ! 740: 740 0000EE33 L9996: ! 741: 741 0000EE33 # exp_regs[0] = 0; /* fault results are cleared */ ! 742: 742 0000EE33 4d effffff7d7 clrl _exp_regs ! 743: 743 0000EE39 # else ! 744: 744 0000EE39 11 0b jbr L471 ! 745: 745 0000EE3B L470: ! 746: 746 0000EE3B # exp_regs[0] = dbl_value_1.m; ! 747: 747 0000EE3B 0d effffff7cf effffff7ca movl _dbl_value_1,_exp_regs ! 748: 748 0000EE46 L471: ! 749: 749 0000EE46 # run_code(); /* execute the instruction */ ! 750: 750 0000EE46 fe 04 effffff7c3 callf $4,_run_code ! 751: 751 0000EE4D # } ! 752: 752 0000EE4D L465: ! 753: 753 0000EE4D 6d effffff7bd incl _index ! 754: 754 0000EE53 13 ff45 jbr L467 ! 755: 755 0000EE56 L466: ! 756: 756 0000EE56 # pipe_test = FALSE; ! 757: 757 0000EE56 4d effffff7b4 clrl _pipe_test ! 758: 758 0000EE5C # } ! 759: 759 0000EE5C 40 ret#2 ! 760: 760 0000EE5D .set L458,0x0 ! 761: 761 0000EE5D L460: ! 762: 762 0000EE5D 13 fe9d jbr L461 ! 763: 763 0000EE60 .data ! 764: 764 00000998 * .text ! 765: 765 0000EE60 .align 1 ! 766: 766 0000EE60 .globl _get_current_data ! 767: 767 0000EE60 _get_current_data: ! 768: 768 0000EE60 0000 .word L472 ! 769: 769 0000EE62 # ! 770: 770 0000EE62 # ! 771: 771 0000EE62 # ! 772: 772 0000EE62 # ! 773: 773 0000EE62 # ! 774: 774 0000EE62 # ! 775: 775 0000EE62 # ! 776: 776 0000EE62 # /*************************************************************************** ! 777: 777 0000EE62 # * Get the Current Data Values ! 778: 778 0000EE62 # * ! 779: 779 0000EE62 # * In most cases the first operand is loaded into the accumulator. ! 780: 780 0000EE62 # * If we're testing Reserved Operands then, unless it's LOGF, we'd better not ! 781: 781 0000EE62 # * load the Accumulator with the Resop before executing the instruction. ! 782: 782 0000EE62 # * Ergo and towit, we'll use a dummy Acc. for those cases. ! 783: 783 0000EE62 # * The 4 instructions currently tested that have 2 or more operands are: ! 784: 784 0000EE62 # * CMPF2, CMPD2, MULL2, MULL3. None of these accesses the accumulator so we'll ! 785: 785 0000EE62 # * use dummy accumulator data for these too. ! 786: 786 0000EE62 # ***************************************************************************/ ! 787: 787 0000EE62 # get_current_data( dptr_1, dptr_2 ) ! 788: 788 0000EE62 # struct u64 *dptr_1; /* pointer to 1st operand */ ! 789: 789 0000EE62 # struct u64 *dptr_2; /* pointer to 2nd operand */ ! 790: 790 0000EE62 # { ! 791: 791 0000EE62 13 00fa jbr L474 ! 792: 792 0000EE65 L475: ! 793: 793 0000EE65 # if( (no_ops >= 2) || ! 794: 794 0000EE65 # ((test_event == RESOP_CODE) && (op_code != LOGF_OP_CODE)) ) { ! 795: 795 0000EE65 1d effffff7a5 02 cmpl _no_ops,$2 ! 796: 796 0000EE6C 81 12 jgeq L9995 ! 797: 797 0000EE6E 1d effffff79c 2d cmpl _test_event,$45 ! 798: 798 0000EE75 21 6a jneq L476 ! 799: 799 0000EE77 1d effffff793 35 cmpl _op_code,$53 ! 800: 800 0000EE7E 31 61 jeql L476 ! 801: 801 0000EE80 L9995: ! 802: 802 0000EE80 # dbl_ld_acc = acc_data[ index ]; ! 803: 803 0000EE80 48 03 effffff789 50 shll $3,_index,r0 ! 804: 804 0000EE88 0c 8f00000000 50 addl2 $_acc_data,r0 ! 805: 805 0000EE8F 0d a004 effffff77d movl 4(r0),_dbl_ld_acc+4 ! 806: 806 0000EE97 0d 60 effffff772 movl (r0),_dbl_ld_acc ! 807: 807 0000EE9E # dbl_value_1 = data_ptr[ index ].op_1; ! 808: 808 0000EE9E 48 04 effffff76b 50 shll $4,_index,r0 ! 809: 809 0000EEA6 1c 50 effffff763 50 addl3 r0,_data_ptr,r0 ! 810: 810 0000EEAE 0d a004 effffff75e movl 4(r0),_dbl_value_1+4 ! 811: 811 0000EEB6 0d 60 effffff753 movl (r0),_dbl_value_1 ! 812: 812 0000EEBD # dbl_value_2 = data_ptr[ index ].op_2; ! 813: 813 0000EEBD 48 04 effffff74c 50 shll $4,_index,r0 ! 814: 814 0000EEC5 1c 50 effffff744 50 addl3 r0,_data_ptr,r0 ! 815: 815 0000EECD 0c 08 50 addl2 $8,r0 ! 816: 816 0000EED0 0d a004 effffff73c movl 4(r0),_dbl_value_2+4 ! 817: 817 0000EED8 0d 60 effffff731 movl (r0),_dbl_value_2 ! 818: 818 0000EEDF # } else { ! 819: 819 0000EEDF 11 57 jbr L477 ! 820: 820 0000EEE1 L476: ! 821: 821 0000EEE1 # dbl_ld_acc = data_ptr[ index ].op_1; ! 822: 822 0000EEE1 48 04 effffff728 50 shll $4,_index,r0 ! 823: 823 0000EEE9 1c 50 effffff720 50 addl3 r0,_data_ptr,r0 ! 824: 824 0000EEF1 0d a004 effffff71b movl 4(r0),_dbl_ld_acc+4 ! 825: 825 0000EEF9 0d 60 effffff710 movl (r0),_dbl_ld_acc ! 826: 826 0000EF00 # dbl_value_1 = data_ptr[ index ].op_2; ! 827: 827 0000EF00 48 04 effffff709 50 shll $4,_index,r0 ! 828: 828 0000EF08 1c 50 effffff701 50 addl3 r0,_data_ptr,r0 ! 829: 829 0000EF10 0c 08 50 addl2 $8,r0 ! 830: 830 0000EF13 0d a004 effffff6f9 movl 4(r0),_dbl_value_1+4 ! 831: 831 0000EF1B 0d 60 effffff6ee movl (r0),_dbl_value_1 ! 832: 832 0000EF22 # dbl_value_2 = dbl_value_1; ! 833: 833 0000EF22 0d effffff6ec effffff6e7 movl _dbl_value_1+4,_dbl_value_2+4 ! 834: 834 0000EF2D 0d effffff6dd effffff6d8 movl _dbl_value_1,_dbl_value_2 ! 835: 835 0000EF38 # } ! 836: 836 0000EF38 L477: ! 837: 837 0000EF38 # *dptr_1 = dbl_value_1; /* set 1st operand */ ! 838: 838 0000EF38 0d 8f00000000 50 movl $_dbl_value_1,r0 ! 839: 839 0000EF3F 0d ad04 51 movl 4(fp),r1 ! 840: 840 0000EF43 0d a004 a104 movl 4(r0),4(r1) ! 841: 841 0000EF48 0d 60 61 movl (r0),(r1) ! 842: 842 0000EF4B # *dptr_2 = dbl_value_2; /* set 2nd operand */ ! 843: 843 0000EF4B 0d 8f00000000 50 movl $_dbl_value_2,r0 ! 844: 844 0000EF52 0d ad08 51 movl 8(fp),r1 ! 845: 845 0000EF56 0d a004 a104 movl 4(r0),4(r1) ! 846: 846 0000EF5B 0d 60 61 movl (r0),(r1) ! 847: 847 0000EF5E # } ! 848: 848 0000EF5E 40 ret#2 ! 849: 849 0000EF5F .set L472,0x0 ! 850: 850 0000EF5F L474: ! 851: 851 0000EF5F 13 ff03 jbr L475 ! 852: 852 0000EF62 .data ! 853: 853 00000998 * .text ! 854: 854 0000EF62 .align 1 ! 855: 855 0000EF62 .globl _set_load_flag ! 856: 856 0000EF62 _set_load_flag: ! 857: 857 0000EF62 0000 .word L478 ! 858: 858 0000EF64 # ! 859: 859 0000EF64 # ! 860: 860 0000EF64 # ! 861: 861 0000EF64 # ! 862: 862 0000EF64 # /* ! 863: 863 0000EF64 # *************************************************************************** ! 864: 864 0000EF64 # * ! 865: 865 0000EF64 # * Set or reset the LOAD_ACCUMULATOR flag ! 866: 866 0000EF64 # * ! 867: 867 0000EF64 # * If the current instruction loads the accumulator then set the flag. ! 868: 868 0000EF64 # *************************************************************************** ! 869: 869 0000EF64 # */ ! 870: 870 0000EF64 # set_load_flag() ! 871: 871 0000EF64 # { ! 872: 872 0000EF64 11 3f jbr L480 ! 873: 873 0000EF66 L481: ! 874: 874 0000EF66 # if( (op_code == LDF_OP_CODE) || /* load SGL Acc. */ ! 875: 875 0000EF66 # (op_code == LNF_OP_CODE) || /* load / negate SGL Acc. */ ! 876: 876 0000EF66 # (op_code == LDD_OP_CODE) || /* load SGL Acc. */ ! 877: 877 0000EF66 # (op_code == LND_OP_CODE) || /* load / negate SGL Acc. */ ! 878: 878 0000EF66 # (op_code == LDFD_OP_CODE) ) /* load SGL to DBL Acc. */ ! 879: 879 0000EF66 1d effffff6a4 06 cmpl _op_code,$6 ! 880: 880 0000EF6D 31 26 jeql L9994 ! 881: 881 0000EF6F 1d effffff69b 16 cmpl _op_code,$22 ! 882: 882 0000EF76 31 1d jeql L9994 ! 883: 883 0000EF78 1d effffff692 07 cmpl _op_code,$7 ! 884: 884 0000EF7F 31 14 jeql L9994 ! 885: 885 0000EF81 1d effffff689 17 cmpl _op_code,$23 ! 886: 886 0000EF88 31 0b jeql L9994 ! 887: 887 0000EF8A 1d effffff680 890097 cmpl _op_code,$151 ! 888: 888 0000EF93 21 09 jneq L482 ! 889: 889 0000EF95 L9994: ! 890: 890 0000EF95 # load_type_inst = TRUE; ! 891: 891 0000EF95 0d 01 effffff674 movl $1,_load_type_inst ! 892: 892 0000EF9C # else ! 893: 893 0000EF9C 11 06 jbr L483 ! 894: 894 0000EF9E L482: ! 895: 895 0000EF9E # load_type_inst = FALSE; ! 896: 896 0000EF9E 4d effffff66c clrl _load_type_inst ! 897: 897 0000EFA4 L483: ! 898: 898 0000EFA4 # } ! 899: 899 0000EFA4 40 ret#2 ! 900: 900 0000EFA5 .set L478,0x0 ! 901: 901 0000EFA5 L480: ! 902: 902 0000EFA5 11 bf jbr L481 ! 903: 903 0000EFA7 .data ! 904: 904 00000998 * # ! 905: 904 00000998 * #
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.