|
|
1.1 root 1:
2: #include "dmp_defs.h"
3:
4: /***********************************************************************
5: *
6: * COMMON ROUTINES FOR THE DEMAND PAGING TESTS
7: *
8: ***********************************************************************/
9:
10:
11:
12: /************************************************************************
13: * print a demand paging test error message
14: *
15: * The message will be of the form:
16: * cycle: xx. DMP test xx. <inst>. <error message>
17: * instruction cache {hit/miss}, data index = xx, page faults on byte(s) 0, x
18: * addressing mode: <addressing mode description>
19: * { pipeline test #x. <instruction buffer description> }
20: * inst buf = xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
21: ************************************************************************/
22: prt_dmp_er_msg( msg )
23: char *msg;
24: {
25: int page_byte;
26: if( !error ) { /* 1st err. for this inst? */
27: error++; /* set current error flg */
28: writec('\n'); /* start a new line */
29: }
30: writes("\ncycle: ");
31: writed( cycle ); /* print the cycle # */
32: writes(". DMP test ");
33: writeh( test_no ); /* print the test # */
34: writes(". ");
35: writes( op_name ); /* print the inst name */
36: writes( msg ); /* print the error msg */
37: writes("\ninstruction cache ");
38: if( i_cache_hit )
39: writes("hit");
40: else
41: writes("miss");
42: writes(", data index = "); /* print the data index */
43: writed( index );
44: writes(", page faults on inst. byte(s) 0");
45: page_byte = 20 - shift_count; /* get byte w/ page break */
46: if( page_byte ) {
47: writes(", ");
48: writed( page_byte );
49: }
50: writec('\n');
51: if( no_ops ) { /* print the addressing mode */
52: writes("addressing mode: ");
53: writes( addressing_modes[ addr_mode ] );
54: writec('\n');
55: }
56: if( pipe_test ) {
57: writes("pipeline test #");
58: writed( pipe_test ); /* print the pipe test # */
59: writes(". ");
60: if( pipe_inst1 == LDD_OP_CODE )
61: writes("LDD (initial acc), ");
62: else if( pipe_inst1 == LDF_OP_CODE )
63: writes("LDF (initial acc), ");
64: else if( pipe_inst1 == MULD_OP_CODE )
65: writes("MULD (1.0), ");
66: else if( pipe_inst1 == MULF_OP_CODE )
67: writes("MULF (1.0), ");
68: writes( op_name );
69: if( !(no_ops) )
70: writes(", ");
71: else if( no_ops == 1 )
72: writes(" (operand), ");
73: else if( no_ops == 2 )
74: writes(" (op #1, op #2), ");
75: if( pipe_inst2 == MULD_OP_CODE )
76: writes("MULD (1.0)\n");
77: else
78: writes("MULF (1.0)\n");
79: }
80: print_inst_buf(); /* print the inst buf contents */
81: }
82:
83:
84:
85: /********************************************************************
86: * print the contents of the instruction buffer
87: * inst buf = xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx
88: ********************************************************************/
89: print_inst_buf()
90: {
91: int page_byte;
92: writes("inst buf =");
93: write_lw_bytes( inst_buf[0] ); /* print word 0 as bytes */
94: write_lw_bytes( inst_buf[1] ); /* print word 1 as bytes */
95: write_lw_bytes( inst_buf[2] ); /* print word 2 as bytes */
96: write_lw_bytes( inst_buf[3] ); /* print word 3 as bytes */
97: write_lw_bytes( inst_buf[4] ); /* print word 4 as bytes */
98: writec('\n');
99: }
100:
101:
102:
103:
104: /********************************************************************
105: * print a longword a byte at a time
106: ********************************************************************/
107: write_lw_bytes( lw )
108: int lw;
109: {
110: writec(' ');
111: writeh( (lw >> 28) & 0xf );
112: writeh( (lw >> 24) & 0xf );
113: writec(' ');
114: writeh( (lw >> 20) & 0xf );
115: writeh( (lw >> 16) & 0xf );
116: writec(' ');
117: writeh( (lw >> 12) & 0xf );
118: writeh( (lw >> 8) & 0xf );
119: writec(' ');
120: writeh( (lw >> 4) & 0xf );
121: writeh( (lw & 0xf) );
122: }
123:
124:
125:
126: /********************************************************************
127: * print the information for a bad register fault
128: ********************************************************************/
129: prt_reg_data()
130: {
131: writes(" register ");
132: writed( reg_no );
133: writes(" = ");
134: write32h( store_regs[ reg_no ] );
135: writes(", should be = ");
136: write32h( exp_regs[ reg_no ] );
137: writec('\n');
138: }
139:
140:
141:
142: /*
143: ***********************************************************************
144: * fill a register buffer with known patterns
145: ***********************************************************************
146: */
147: fill_reg_buf( buffer )
148: int *buffer;
149: {
150: buffer[0] = 0x10101010; /* register '0' data */
151: buffer[1] = 0x11111111;
152: buffer[2] = 0x12121212;
153: buffer[3] = 0x13131313;
154: buffer[4] = 0x14141414;
155: buffer[5] = 0x15151515;
156: buffer[6] = 0x16161616;
157: buffer[7] = 0x17171717;
158: buffer[8] = 0x18181818;
159: buffer[9] = 0x19191919;
160: buffer[10] = 0x1a1a1a1a;
161: buffer[11] = 0x1b1b1b1b;
162: buffer[12] = 0x1c1c1c1c;
163: buffer[13] = 0x1d1d1d1d;
164: }
165:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.