|
|
1.1 ! root 1: 1 00000000 LL0: ! 2: 2 00000000 .data ! 3: 3 000001e0 * .text ! 4: 4 00000000 .align 1 ! 5: 5 00000000 .globl _fpm_test ! 6: 6 00000000 _fpm_test: ! 7: 7 0000E430 0000 .word L381 ! 8: 8 0000E432 # ! 9: 9 0000E432 # #include "evt_defs.h" ! 10: 10 0000E432 # ! 11: 11 0000E432 # /* ! 12: 12 0000E432 # ******************************************************************** ! 13: 13 0000E432 # * ! 14: 14 0000E432 # * MONITOR FOR THE FPP EMULATION TRAP INTERFACE TEST ! 15: 15 0000E432 # * ! 16: 16 0000E432 # ******************************************************************** ! 17: 17 0000E432 # */ ! 18: 18 0000E432 # fpm_test() ! 19: 19 0000E432 # { ! 20: 20 0000E432 13 00ab jbr L383 ! 21: 21 0000E435 L384: ! 22: 22 0000E435 # event_msg = "FPP Emulation"; ! 23: 23 0000E435 .data 1 ! 24: 24 000001e0 * L385: ! 25: 25 000001e0 * 46505020456D756C6174696F6 .ascii "FPP Emulation\0" ! 26: E00 ! 27: 26 000001ee * .text ! 28: 27 0000E435 0d 8f000001e0 effffffff0 movl $L385,_event_msg ! 29: 28 0000E440 # test_event = FPM_CODE; ! 30: 29 0000E440 0d 37 efffffffe9 movl $55,_test_event ! 31: 30 0000E447 # disable_mask = 0; /* don't disable any events */ ! 32: 31 0000E447 4b efffffffe3 clrw _disable_mask ! 33: 32 0000E44D # evt_disabled = FALSE; /* expected event is enabled */ ! 34: 33 0000E44D 4d efffffffdd clrl _evt_disabled ! 35: 34 0000E453 # if( evt_inst ) /* was the op-code specified? */ ! 36: 35 0000E453 5d efffffffd7 tstl _evt_inst ! 37: 36 0000E459 31 62 jeql L386 ! 38: 37 0000E45B # { ! 39: 38 0000E45B # inst_index = get_fpm_index( evt_inst ); ! 40: 39 0000E45B dd efffffffcf pushl _evt_inst ! 41: 40 0000E461 fe 08 ef00000164 callf $8,_get_fpm_index ! 42: 41 0000E468 0d 50 efffffffc1 movl r0,_inst_index ! 43: 42 0000E46F # if( inst_index < 0 ) { ! 44: 43 0000E46F 5d efffffffbb tstl _inst_index ! 45: 44 0000E475 81 3d jgeq L388 ! 46: 45 0000E477 # if( (prt_hdrs) && (cycle == 1) ) /* no reserved ops */ ! 47: 46 0000E477 5d efffffffb3 tstl _prt_hdrs ! 48: 47 0000E47D 31 33 jeql L389 ! 49: 48 0000E47F 1d efffffffab 01 cmpl _cycle,$1 ! 50: 49 0000E486 21 2a jneq L389 ! 51: 50 0000E488 # { ! 52: 51 0000E488 # writes( ! 53: 52 0000E488 # "There is no FLOATING POINT EMULATION with op-code" ); ! 54: 53 0000E488 .data 1 ! 55: 54 000001ee * L391: ! 56: 55 000001ee * 5468657265206973206E6F204 .ascii "There is no FLOATING POINT EMULATION with op-code\0" ! 57: 64C4F4154494E4720504F494E ! 58: 5420454D554C4154494F4E207 ! 59: 7697468206F702D636F646500 ! 60: 56 00000220 * .text ! 61: 57 0000E488 dd 8f000001ee pushl $L391 ! 62: 58 0000E48E fe 08 efffffff9b callf $8,_writes ! 63: 59 0000E495 # writeh( evt_inst ); /* print the ersatz op-code */ ! 64: 60 0000E495 dd efffffff95 pushl _evt_inst ! 65: 61 0000E49B fe 08 efffffff8e callf $8,_writeh ! 66: 62 0000E4A2 # writec('\n'); ! 67: 63 0000E4A2 dd 0a pushl $10 ! 68: 64 0000E4A4 fe 08 efffffff85 callf $8,_writec ! 69: 65 0000E4AB # error = TRUE; /* needed for line feed control */ ! 70: 66 0000E4AB 0d 01 efffffff7e movl $1,_error ! 71: 67 0000E4B2 # } ! 72: 68 0000E4B2 # } else ! 73: 69 0000E4B2 L389: ! 74: 70 0000E4B2 11 07 jbr L394 ! 75: 71 0000E4B4 L388: ! 76: 72 0000E4B4 # test_fpm_inst(); /* test the instruction */ ! 77: 73 0000E4B4 fe 04 ef00000029 callf $4,_test_fpm_inst ! 78: 74 0000E4BB L394: ! 79: 75 0000E4BB # } else /* test all applicable op-codes */ ! 80: 76 0000E4BB 11 22 jbr L396 ! 81: 77 0000E4BD L386: ! 82: 78 0000E4BD # for(inst_index=0; inst_index < size_fpm_tbl; inst_index++) ! 83: 79 0000E4BD 4d efffffff6d clrl _inst_index ! 84: 80 0000E4C3 L399: ! 85: 81 0000E4C3 1d efffffff67 efffffff62 cmpl _inst_index,_size_fpm_tbl ! 86: 82 0000E4CE 81 0f jgeq L398 ! 87: 83 0000E4D0 # test_fpm_inst(); ! 88: 84 0000E4D0 fe 04 ef0000000d callf $4,_test_fpm_inst ! 89: 85 0000E4D7 L397: ! 90: 86 0000E4D7 6d efffffff53 incl _inst_index ! 91: 87 0000E4DD 11 e4 jbr L399 ! 92: 88 0000E4DF L398: ! 93: 89 0000E4DF L396: ! 94: 90 0000E4DF # } ! 95: 91 0000E4DF 40 ret#2 ! 96: 92 0000E4E0 .set L381,0x0 ! 97: 93 0000E4E0 L383: ! 98: 94 0000E4E0 13 ff52 jbr L384 ! 99: 95 0000E4E3 .data ! 100: 96 000001e0 * .text ! 101: 97 0000E4E3 00 .align 1 ! 102: 98 0000E4E4 .globl _test_fpm_inst ! 103: 99 0000E4E4 _test_fpm_inst: ! 104: 100 0000E4E4 0000 .word L400 ! 105: 101 0000E4E6 # ! 106: 102 0000E4E6 # ! 107: 103 0000E4E6 # ! 108: 104 0000E4E6 # /* ! 109: 105 0000E4E6 # *************************************************************************** ! 110: 106 0000E4E6 # * ! 111: 107 0000E4E6 # * Run the Reserved Operand Fault on one instruction ! 112: 108 0000E4E6 # * ! 113: 109 0000E4E6 # *************************************************************************** ! 114: 110 0000E4E6 # */ ! 115: 111 0000E4E6 # test_fpm_inst() ! 116: 112 0000E4E6 # { ! 117: 113 0000E4E6 13 00df jbr L402 ! 118: 114 0000E4E9 L403: ! 119: 115 0000E4E9 # valid_test = TRUE; /* a test is being run */ ! 120: 116 0000E4E9 0d 01 efffffff40 movl $1,_valid_test ! 121: 117 0000E4F0 # op_code = fpm_tbl[ inst_index ].inst_code; ! 122: 118 0000E4F0 0d efffffff3a 50 movl _inst_index,r0 ! 123: 119 0000E4F7 48 04 50 50 shll $4,r0,r0 ! 124: 120 0000E4FB 0d e000000000 efffffff2a movl _fpm_tbl(r0),_op_code ! 125: 121 0000E506 # op_name = fpm_tbl[ inst_index ].name; ! 126: 122 0000E506 0d efffffff24 50 movl _inst_index,r0 ! 127: 123 0000E50D 48 04 50 50 shll $4,r0,r0 ! 128: 124 0000E511 0d e000000004 efffffff14 movl _fpm_tbl+4(r0),_op_name ! 129: 125 0000E51C # precision = fpm_tbl[ inst_index ].precision; ! 130: 126 0000E51C 0d efffffff0e 50 movl _inst_index,r0 ! 131: 127 0000E523 48 04 50 50 shll $4,r0,r0 ! 132: 128 0000E527 0d e00000000c effffffefe movl _fpm_tbl+12(r0),_precision ! 133: 129 0000E532 # no_ops = fpm_tbl[ inst_index ].no_operands; ! 134: 130 0000E532 0d effffffef8 50 movl _inst_index,r0 ! 135: 131 0000E539 48 04 50 50 shll $4,r0,r0 ! 136: 132 0000E53D 0d e000000008 effffffee8 movl _fpm_tbl+8(r0),_no_ops ! 137: 133 0000E548 # data_ptr = fpm_data; ! 138: 134 0000E548 0d 8f00000000 effffffedd movl $_fpm_data,_data_ptr ! 139: 135 0000E553 # max_index = fpm_data_cnt; ! 140: 136 0000E553 0d effffffed7 effffffed2 movl _fpm_data_cnt,_max_index ! 141: 137 0000E55E # if( precision == SGL ) { ! 142: 138 0000E55E 1d effffffecc 01 cmpl _precision,$1 ! 143: 139 0000E565 21 10 jneq L404 ! 144: 140 0000E567 # sgl_op = TRUE; ! 145: 141 0000E567 0d 01 effffffec2 movl $1,_sgl_op ! 146: 142 0000E56E # acc_ld_size = SGL; /* use a sgl precision Acc. */ ! 147: 143 0000E56E 0d 01 effffffebb movl $1,_acc_ld_size ! 148: 144 0000E575 # } else { ! 149: 145 0000E575 11 0d jbr L405 ! 150: 146 0000E577 L404: ! 151: 147 0000E577 # sgl_op = FALSE; ! 152: 148 0000E577 4d effffffeb3 clrl _sgl_op ! 153: 149 0000E57D # acc_ld_size = DBL; /* use a dbl precision Acc. */ ! 154: 150 0000E57D 0d 02 effffffeac movl $2,_acc_ld_size ! 155: 151 0000E584 # } ! 156: 152 0000E584 L405: ! 157: 153 0000E584 # if( (prt_hdrs) && (cycle == 1) ) { ! 158: 154 0000E584 5d effffffea6 tstl _prt_hdrs ! 159: 155 0000E58A 31 34 jeql L406 ! 160: 156 0000E58C 1d effffffe9e 01 cmpl _cycle,$1 ! 161: 157 0000E593 21 2b jneq L406 ! 162: 158 0000E595 # if( (!evt_inst) && /* print a line feed if */ ! 163: 159 0000E595 # (op_code == LOGF_OP_CODE) ) /* the 1st line is full */ ! 164: 160 0000E595 5d effffffe95 tstl _evt_inst ! 165: 161 0000E59B 21 16 jneq L407 ! 166: 162 0000E59D 1d effffffe8d 35 cmpl _op_code,$53 ! 167: 163 0000E5A4 21 0d jneq L407 ! 168: 164 0000E5A6 # writes("\n "); ! 169: 165 0000E5A6 .data 1 ! 170: 166 00000220 * L408: ! 171: 167 00000220 * 0A20202020202020202020202 .ascii "\12 \0" ! 172: 0202020202020202020202000 ! 173: 168 00000239 * .text ! 174: 169 0000E5A6 dd 8f00000220 pushl $L408 ! 175: 170 0000E5AC fe 08 effffffe7d callf $8,_writes ! 176: 171 0000E5B3 # writes( op_name ); /* print the instruction's name */ ! 177: 172 0000E5B3 L407: ! 178: 173 0000E5B3 dd effffffe77 pushl _op_name ! 179: 174 0000E5B9 fe 08 effffffe70 callf $8,_writes ! 180: 175 0000E5C0 # } ! 181: 176 0000E5C0 # test_inst(); ! 182: 177 0000E5C0 L406: ! 183: 178 0000E5C0 fe 04 effffffe69 callf $4,_test_inst ! 184: 179 0000E5C7 # } ! 185: 180 0000E5C7 40 ret#2 ! 186: 181 0000E5C8 .set L400,0x0 ! 187: 182 0000E5C8 L402: ! 188: 183 0000E5C8 13 ff1e jbr L403 ! 189: 184 0000E5CB .data ! 190: 185 000001e0 * .text ! 191: 186 0000E5CB 00 .align 1 ! 192: 187 0000E5CC .globl _get_fpm_index ! 193: 188 0000E5CC _get_fpm_index: ! 194: 189 0000E5CC 0000 .word L410 ! 195: 190 0000E5CE # ! 196: 191 0000E5CE # ! 197: 192 0000E5CE # ! 198: 193 0000E5CE # /* ! 199: 194 0000E5CE # *************************************************************************** ! 200: 195 0000E5CE # * ! 201: 196 0000E5CE # * GET THE INSTRUCTION TABLE INDEX FOR AN OP-CODE ! 202: 197 0000E5CE # * ! 203: 198 0000E5CE # * Given the op_code of an instruction, return the instruction's index in ! 204: 199 0000E5CE # * the FPM instruction table. Return a negative number if the op-code isn't ! 205: 200 0000E5CE # * in the table. ! 206: 201 0000E5CE # * ! 207: 202 0000E5CE # ************************************************************************** ! 208: 203 0000E5CE # */ ! 209: 204 0000E5CE # get_fpm_index( op_code ) ! 210: 205 0000E5CE # { ! 211: 206 0000E5CE 11 38 jbr L412 ! 212: 207 0000E5D0 L413: ! 213: 208 0000E5D0 # int x; ! 214: 209 0000E5D0 # x = 0; ! 215: 210 0000E5D0 4d adc8 clrl -56(fp) ! 216: 211 0000E5D3 # while( (fpm_tbl[x].inst_code != op_code) && (x < size_fpm_tbl) ) ! 217: 212 0000E5D3 L414: ! 218: 213 0000E5D3 0d adc8 50 movl -56(fp),r0 ! 219: 214 0000E5D7 48 04 50 50 shll $4,r0,r0 ! 220: 215 0000E5DB 1d e000000000 ad04 cmpl _fpm_tbl(r0),4(fp) ! 221: 216 0000E5E3 31 0f jeql L415 ! 222: 217 0000E5E5 1d adc8 effffffe43 cmpl -56(fp),_size_fpm_tbl ! 223: 218 0000E5ED 81 05 jgeq L415 ! 224: 219 0000E5EF # x++; ! 225: 220 0000E5EF 6d adc8 incl -56(fp) ! 226: 221 0000E5F2 11 df jbr L414 ! 227: 222 0000E5F4 L415: ! 228: 223 0000E5F4 # if( x == size_fpm_tbl ) ! 229: 224 0000E5F4 1d adc8 effffffe34 cmpl -56(fp),_size_fpm_tbl ! 230: 225 0000E5FC 21 04 jneq L416 ! 231: 226 0000E5FE # x = -1; ! 232: 227 0000E5FE ec 01 adc8 mnegl $1,-56(fp) ! 233: 228 0000E602 # return( x ); ! 234: 229 0000E602 L416: ! 235: 230 0000E602 0d adc8 50 movl -56(fp),r0 ! 236: 231 0000E606 40 ret#1 ! 237: 232 0000E607 # } ! 238: 233 0000E607 40 ret#1 ! 239: 234 0000E608 .set L410,0x0 ! 240: 235 0000E608 L412: ! 241: 236 0000E608 3c 38 5d 5e subl3 $56,fp,sp ! 242: 237 0000E60C 11 c2 jbr L413 ! 243: 238 0000E60E .data ! 244: 239 000001e0 * # ! 245: 240 000001e0 * # ! 246: 240 000001e0 * #
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.