|
|
1.1 root 1: 1 00000000
2: 2 00000000 /* privileged registers constants (addresses) */
3: 3 00000000
4: 4 00000000
5: 5 00000000
6: 6 00000000 .set SBR,0 /*system base register */
7: 7 00000000 .set SLR,1 /*system length reg */
8: 8 00000000 .set P0BR,2 /*p0 base reg */
9: 9 00000000 .set P0LR,3 /*p0 length reg */
10: 10 00000000 .set P1BR,4 /*p1 base reg */
11: 11 00000000 .set P1LR,5 /*p1 length reg */
12: 12 00000000 .set P2BR,6 /*p2 base reg */
13: 13 00000000 .set P2LR,7 /*p2 length reg */
14: 14 00000000 .set IPL,8 /*int priority level reg */
15: 15 00000000 .set MME,9 /*memory mgmt enable reg */
16: 16 00000000 .set TBIA,10 /*trans buf invalidate all */
17: 17 00000000 /*entries */
18: 18 00000000 .set TBIS,11 /*trans buf invalidate single */
19: 19 00000000 /*entry */
20: 20 00000000 .set DCK,12 /*data cache key */
21: 21 00000000 .set CCK,13 /*code cache key */
22: 22 00000000 .set PCBB,14 /*process control block base */
23: 23 00000000 .set ISP,15 /*interrupt stack pointer */
24: 24 00000000 .set SIRR,16 /*software int request reg */
25: 25 00000000 .set SISR,17 /*software int summary reg */
26: 26 00000000 .set SCBB,18 /*system control block base reg */
27: 27 00000000 .set KSP,19 /*kernel stack pointer reg */
28: 28 00000000 .set USP,20 /*user stack pointer */
29: 29 00000000 .set DCB,21 /*CPU2 DCB */
30: 30 00000000 .set PACC,23 /*purge (invalidate) all pages */
31: 31 00000000 /*of process in code cache */
32: 32 00000000 .set P1DC,24 /*purge one page of data cache */
33: 33 00000000 .set PADC,25 /*purge all the pages of */
34: 34 00000000 /*process in data cache */
35: 35 00000000 .set HISR,26 /* Hardware interrupt summary reg */
36: 36 00000000 .set DCR,27 /* Diagnostic control register */
37: 37 00000000 .set PDCS,28 /* Purge 1 data cache slot */
38: 38 00000000
39: 39 00000000 #
40: 40 00000000 #TAHOE program status longword
41: 41 00000000 #
42: 42 00000000
43: 43 00000000 .set PSL_C,0x00000001 /* carry bit */
44: 44 00000000 .set PSL_V,0x00000002 /* overflow bit */
45: 45 00000000 .set PSL_Z,0x00000004 /* zero bit */
46: 46 00000000 .set Z,0x00000004
47: 47 00000000 .set PSL_N,0x00000008 /* negative bit */
48: 48 00000000 .set PSL_T,0x00000010 /* trace enable bit */
49: 49 00000000 .set PSL_I,0x00000020 /* integer overflow enable bit */
50: 50 00000000 .set PSL_EN_OVFL,0x20 /* integer overflow enable bit */
51: 51 00000000 .set PSL_EN_UNDFL,0x40 /* floating underflow enable */
52: 52 00000000 .set PSL_DBL,0x80 /* dbl precision Accumulator bit */
53: 53 00000000 .set PSL_IPL,0x001f0000 /* interrupt priority level */
54: 54 00000000 .set PSL_MOD,0x01000000 /* mode = 1 means user */
55: 55 00000000 .set PSL_IS,0x04000000 /* interrupt stack */
56: 56 00000000 .set PSL_TP,0x40000000 /* trace pending */
57: 57 00000000
58: 58 00000000 #
59: 59 00000000 # TAHOE page table entry
60: 60 00000000 #/
61: 61 00000000 .set PG_V,0x8000000
62: 62 00000000 .set PG_PROT,0x78000000
63: 63 00000000 .set PG_M,0x04000000
64: 64 00000000 .set PG_USED,0x02000000
65: 65 00000000 .set PG_NC,0x01000000
66: 66 00000000 .set PG_PFNUM,0x003fffff
67: 67 00000000
68: 68 00000000 .set PG_NOACC,0
69: 69 00000000 .set PG_KR,0x40000000
70: 70 00000000 .set PG_KW,0x60000000
71: 71 00000000 .set PG_URKR,0x50000000
72: 72 00000000 .set PG_URKW,0x70000000
73: 73 00000000 .set PG_UW,0x78000000
74: 74 00000000
75: 75 00000000 #* PCB offsets & diagnostic extension to pcb */
76: 76 00000000 #* PCB is at pcb0 */
77: 77 00000000
78: 78 00000000
79: 79 00000000 .set PCB_SIZE, 24
80: 80 00000000 .set PCB_KSP, 0
81: 81 00000000 .set PCB_USP, 4
82: 82 00000000 .set PCB_R0, 8
83: 83 00000000 .set PCB_R1, 12
84: 84 00000000 .set PCB_R2, 16
85: 85 00000000 .set PCB_R3, 20
86: 86 00000000 .set PCB_R4, 24
87: 87 00000000 .set PCB_R5, 28
88: 88 00000000 .set PCB_R6, 32
89: 89 00000000 .set PCB_R7, 36
90: 90 00000000 .set PCB_R8, 40
91: 91 00000000 .set PCB_R9, 44
92: 92 00000000 .set PCB_R10, 48
93: 93 00000000 .set PCB_R11, 52
94: 94 00000000 .set PCB_R12, 56
95: 95 00000000 .set PCB_R13, 60
96: 96 00000000 .set PCB_PC, 64
97: 97 00000000 .set PCB_PSL, 68
98: 98 00000000 .set PCB_P0BR, 72
99: 99 00000000 .set PCB_P0LR, 76
100: 100 00000000 .set PCB_P1BR, 80
101: 101 00000000 .set PCB_P1LR, 84
102: 102 00000000 .set PCB_P2BR, 88
103: 103 00000000 .set PCB_P2LR, 92
104: 104 00000000 .set PCB_ACCM, 96
105: 105 00000000 .set PCB_ACCL, 100
106: 106 00000000 #*
107: 107 00000000 # Diagnostic pcb extension
108: 108 00000000 #/
109: 109 00000000 .set PCB_STAT, 104 /*process status,statistics,id,etc*/
110: 110 00000000
111: 111 00000000
112: 112 00000000
113: 113 00000000 #* fundamental constants */
114: 114 00000000
115: 115 00000000 #*
116: 116 00000000 # fundamental constants of the implementation--
117: 117 00000000 # cannot be changed easily.
118: 118 00000000 #/
119: 119 00000000
120: 120 00000000 .set NBPG,1024
121: 121 00000000 .set PGOFSET,(NBPG-1) /* byte offset into page */
122: 122 00000000 .set PGSHIFT,10 /* LOG2(NBPG) */
123: 123 00000000 .set HIGH,0x1f
124: 124 00000000
125: 125 00000000
126: 126 00000000 #* SCB offsets */
127: 127 00000000 #* SCB is at scb */
128: 128 00000000
129: 129 00000000 .set PFVEC,1*4 /*power fail */
130: 130 00000000 .set PRVEC,2*4 /*power restore */
131: 131 00000000 .set CLOCKVEC,7*4 /*hard clock vector */
132: 132 00000000 .set CRVEC,0xa*4 /*console receive */
133: 133 00000000 .set CXVEC,44 /*console transmit */
134: 134 00000000 .set SIVEC1,0x1e*4 /*software int vec #1 */
135: 135 00000000 /*for 2,3,..15, sub 4,8,.. 56 */
136: 136 00000000 /*from SIVEC1 */
137: 137 00000000 .set BEVEC,0x20*4 /*bus error */
138: 138 00000000 .set SYSVEC,0x2b*4 /*system call (kcall) */
139: 139 00000000 .set PINSTVEC,0x2c*4 /*privileged instruction fault */
140: 140 00000000 .set PRIVSVEC,0x2c*4 /*privileged instruction fault */
141: 141 00000000 .set ROVEC,0x2d*4 /*reserved operand fault */
142: 142 00000000 .set RAVEC,0x2e*4 /*reserved addressing fault */
143: 143 00000000 .set PROTVEC,0x2f*4 /*access control violation */
144: 144 00000000 .set TRANS,0x30 /*translation fault vector */
145: 145 00000000 .set TRANSVEC,0x30*4 /*translation fault vector */
146: 146 00000000 .set KSPVEC,0x31*4 /*kernel stack not valid vector */
147: 147 00000000 .set TRACEVEC,0x32*4 /*trace vector */
148: 148 00000000 .set BPTVEC,0x33*4 /*break point fault */
149: 149 00000000 .set ARITHVEC,0x34*4 /*arithmetic trap */
150: 150 00000000 .set ALIGNVEC,0x35*4 /*alignment vector */
151: 151 00000000 .set FPMVEC,0x37*4 /*fpp emulation vector */
152: 152 00000000 .set IO14VEC,256 /*io vector, ipl #14 */
153: 153 00000000 .set IO15VEC,320 /*io vector, ipl #15 */
154: 154 00000000 .set IO16VEC,384 /*io vector, ipl #16 */
155: 155 00000000 .set IO17VEC,448 /*io vector, ipl #17 */
156: 156 00000000
157: 157 00000000 #* SPT (system page table) offsets */
158: 158 00000000 #* SPT is at Sysmap */
159: 159 00000000
160: 160 00000000 .set SCBPTE,8 /*system control block pte offset*/
161: 161 00000000 .set BUFPTE,12 /*buffer pte offset */
162: 162 00000000 .set ISPTE,16 /*interrupt stack page 0 */
163: 163 00000000 .set IS1PTE,20 /*interrupt stack page 1 */
164: 164 00000000 .set SPTPTE,20 /*system page table page 1 */
165: 165 00000000 .set SPT1PTE,20 /*system page table page 2 */
166: 166 00000000 .set IOMAPPTE,24 /*io map */
167: 167 00000000 .set PCBPTE,28 /*process control blocks pte */
168: 168 00000000 .set U0P0PTE,32 /*U0 p0pt pte */
169: 169 00000000 .set U0P1PTE,36 /*U0 p1pt pte */
170: 170 00000000 .set U0P2PTE,40 /*U0 p2pt pte */
171: 171 00000000 .set U1P0PTE,44
172: 172 00000000 .set U1P1PTE,48
173: 173 00000000 .set U1P2PTE,52
174: 174 00000000 .set U2P0PTE,56
175: 175 00000000 .set U2P1PTE,60
176: 176 00000000 .set U2P2PTE,64
177: 177 00000000 .set U3P0PTE,68
178: 178 00000000 .set U3P1PTE,72
179: 179 00000000 .set U3P2PTE,76
180: 180 00000000 .set U4P0PTE,80
181: 181 00000000 .set U4P1PTE,84
182: 182 00000000 .set U4P2PTE,88
183: 183 00000000 .set U5P0PTE,92
184: 184 00000000 .set U5P1PTE,96
185: 185 00000000 .set U5P2PTE,100
186: 186 00000000 .set U6P0PTE,104
187: 187 00000000 .set U6P1PTE,108
188: 188 00000000 .set U6P2PTE,112
189: 189 00000000 .set U7P0PTE,116 /*U7 p0pt pte */
190: 190 00000000 .set U7P1PTE,120 /*U7 p1pt pte */
191: 191 00000000 .set U7P2PTE,124 /*U7 p2pt pte */
192: 192 00000000 .set IOB0PTE,128 /*io buffer 0 pte */
193: 193 00000000 .set IOB1PTE,132
194: 194 00000000 .set IOB2PTE,136
195: 195 00000000 .set IOB3PTE,140
196: 196 00000000 .set IOB4PTE,144
197: 197 00000000 .set IOB5PTE,148
198: 198 00000000 .set IOB6PTE,152
199: 199 00000000 .set IOB7PTE,156 /*io buffer 7 pte */
200: 200 00000000
201: 201 00000000
202: 202 00000000 #* trap.h 4.6 81/03/03 */
203: 203 00000000
204: 204 00000000 #*
205: 205 00000000 #* Trap type values
206: 206 00000000 #/
207: 207 00000000
208: 208 00000000 .set RESADFLT,0 /* reserved addressing fault */
209: 209 00000000 .set PRIVINFLT,1 /* privileged instruction fault */
210: 210 00000000 .set RESOPFLT,2 /* reserved operand fault */
211: 211 00000000 .set BPTFLT,3 /* bpt instruction fault */
212: 212 00000000 .set ALIGNFLT,4 /* alignment fault */
213: 213 00000000 .set SYSCALL,5 /* kcall instruction (syscall trap) */
214: 214 00000000 .set ARITHTRAP,6 /* arithmetic trap */
215: 215 00000000 .set PROTFLT,7 /* protection fault */
216: 216 00000000 .set TRCTRAP,8 /* trace trap */
217: 217 00000000 .set TRANSFLT,9 /* translation not valid fault */
218: 218 00000000 .set DONE,255
219: 219 00000000
220: 220 00000000 #
221: 221 00000000 # Event codes
222: 222 00000000 #
223: 223 00000000 .set RTCLOCK_CODE,7 /* real time clock event */
224: 224 00000000 .set RESOP_CODE,0x2d /* reserved operand fault */
225: 225 00000000 .set RESAD_CODE,0x2e /* reserved address fault */
226: 226 00000000 .set ARITH_CODE,0x34 /* arithmetic fault */
227: 227 00000000 .set FPM_CODE,0x37 /* fpp emulation trap */
228: 228 00000000 .set INTEGER_OVERFLOW,1 /* code for arith. fault */
229: 229 00000000
230: 230 00000000 #
231: 231 00000000 # Arithmetic Event types
232: 232 00000000 #
233: 233 00000000 .set INT_OVFL_CODE,1 /* integer overflow */
234: 234 00000000 .set INT_0_DIV_CODE,2 /* integer divide by 0 */
235: 235 00000000 .set FLT_0_DIV_CODE,3 /* floating divide by 0 */
236: 236 00000000 .set FLT_OVFL_CODE,4 /* floating overflow */
237: 237 00000000 .set FLT_UNDFL_CODE,5 /* floating underflow */
238: 238 00000000
239: 239 00000000 #
240: 240 00000000 # Floating Point Instruction Op-Codes
241: 241 00000000 #
242: 242 00000000 .set LDF_OP_CODE,0x06 /* sgl load acc. instr */
243: 243 00000000 .set LDD_OP_CODE,0x07 /* dbl load acc. instr */
244: 244 00000000 .set LNF_OP_CODE,0x16 /* sgl load-neg acc. instr */
245: 245 00000000 .set LND_OP_CODE,0x17 /* dbl load-neg acc. instr */
246: 246 00000000 .set STF_OP_CODE,0x26 /* sgl store acc. instr */
247: 247 00000000 .set STD_OP_CODE,0x27 /* dbl store acc. instr */
248: 248 00000000 .set CMPF_OP_CODE,0x36 /* sgl compare instr */
249: 249 00000000 .set CMPD_OP_CODE,0x37 /* dbl compare instr */
250: 250 00000000 .set CMPF2_OP_CODE,0x46 /* sgl compare 2 instr */
251: 251 00000000 .set CMPD2_OP_CODE,0x47 /* dbl compare 2 instr */
252: 252 00000000 .set TSTF_OP_CODE,0x56 /* sgl test acc. instr */
253: 253 00000000 .set TSTD_OP_CODE,0x57 /* dbl test acc. instr */
254: 254 00000000 .set PUSHD_OP_CODE,0x67 /* dbl push acc. instr */
255: 255 00000000 .set CVLF_OP_CODE,0x76 /* convert int to sgl instr */
256: 256 00000000 .set CVLD_OP_CODE,0x77 /* convert int to dbl instr */
257: 257 00000000 .set CVFL_OP_CODE,0x86 /* convert sgl to int instr */
258: 258 00000000 .set CVDL_OP_CODE,0x87 /* convert dbl to int instr */
259: 259 00000000 .set LDFD_OP_CODE,0x97 /* load sgl to dbl instr */
260: 260 00000000 .set CVDF_OP_CODE,0xa6 /* convert dbl to sgl instr */
261: 261 00000000 .set NEGF_OP_CODE,0xb6 /* negate sgl acc. instr */
262: 262 00000000 .set NEGD_OP_CODE,0xb7 /* negate dbl acc. instr */
263: 263 00000000 .set ADDF_OP_CODE,0xc6 /* sgl add instr */
264: 264 00000000 .set ADDD_OP_CODE,0xc7 /* dbl add instr */
265: 265 00000000 .set SUBF_OP_CODE,0xd6 /* sgl subtract instr */
266: 266 00000000 .set SUBD_OP_CODE,0xd7 /* dbl subtract instr */
267: 267 00000000 .set MULF_OP_CODE,0xe6 /* sgl multiply instr */
268: 268 00000000 .set MULD_OP_CODE,0xe7 /* dbl multiply instr */
269: 269 00000000 .set DIVF_OP_CODE,0xf6 /* sgl divide instr */
270: 270 00000000 .set DIVD_OP_CODE,0xf7 /* dbl divide instr */
271: 271 00000000 .set SINF_OP_CODE,0x05 /* sgl sine instr */
272: 272 00000000 .set COSF_OP_CODE,0x15 /* sgl cosine instr */
273: 273 00000000 .set ATANF_OP_CODE,0x25 /* sgl arc-tangent instr */
274: 274 00000000 .set LOGF_OP_CODE,0x35 /* sgl natural log instr */
275: 275 00000000 .set SQRTF_OP_CODE,0x45 /* sgl square root instr */
276: 276 00000000 .set EXPF_OP_CODE,0x55 /* sgl "e to the x" instr */
277: 277 00000000 .set MULL2_OP_CODE,0x4c /* integer multiply - 2 ops */
278: 278 00000000 .set MULL3_OP_CODE,0x5c /* integer multiply - 3 ops */
279: 279 00000000
280: 280 00000000
281: 281 00000000 #
282: 282 00000000 # Addressing test constants - These must agree with "fpp_defs.h"
283: 283 00000000 #
284: 284 00000000 .set ADR_ABSOLUTE,1 /* absolute address */
285: 285 00000000 .set ADR_LITERAL,2 /* literal -short immediate byte */
286: 286 00000000 .set ADR_IM_B,3 /* immediate byte */
287: 287 00000000 .set ADR_IM_W,4 /* immediate word */
288: 288 00000000 .set ADR_IM_L,5 /* immediate long-word */
289: 289 00000000 .set ADR_B_DSP,6 /* byte displ relative */
290: 290 00000000 .set ADR_W_DSP,7 /* word displ relative */
291: 291 00000000 .set ADR_L_DSP,8 /* long-word displ relative */
292: 292 00000000 .set ADR_B_DSP_DEF,9 /* byte displ relative deferred */
293: 293 00000000 .set ADR_W_DSP_DEF,10 /* word displ relative deferred */
294: 294 00000000 .set ADR_L_DSP_DEF,11 /* L-word displ relative deferred */
295: 295 00000000 .set ADR_REG,12 /* direct register */
296: 296 00000000 .set ADR_REG_DEF,13 /* register deferred */
297: 297 00000000 .set ADR_FP_DEF,14 /* FP deferred */
298: 298 00000000 .set ADR_SP_DEF,15 /* SP deferred */
299: 299 00000000 .set ADR_PUSH,16 /* auto-decrement SP */
300: 300 00000000 .set ADR_POP,17 /* auto-increment SP */
301: 301 00000000 .set ADR_POP_DEF,18 /* auto-increment SP deferred */
302: 302 00000000 .set ADR_REG_B,19 /* register + byte displ */
303: 303 00000000 .set ADR_REG_W,20 /* register + word displ */
304: 304 00000000 .set ADR_REG_L,21 /* register + long-word displ */
305: 305 00000000 .set ADR_REG_B_DEF,22 /* register + byte displ deferred */
306: 306 00000000 .set ADR_REG_W_DEF,23 /* register + word displ deferred */
307: 307 00000000 .set ADR_REG_L_DEF,24 /* register + L-word displ deferred */
308: 308 00000000 .set ADR_I_FP_DEF,25 /* indexed (frame pointer deferred) */
309: 309 00000000 .set ADR_I_L,26 /* indexed (longword displacement) */
310: 310 00000000
311: 311 00000000
312: 312 00000000 #*************************************************************************
313: 313 00000000 #
314: 314 00000000 # Stuff for the Demand Paging , Events, & Addressing Tests
315: 315 00000000 #
316: 316 00000000 #************************************************************************/
317: 317 00000000 .set SGL,1 /* sgl precision data */
318: 318 00000000 .set DBL,2 /* dbl precision data */
319: 319 00000000 .set ENABLE_EVENTS,0x60 /* enable ovfl & undfl events */
320: 320 00000000 .set NONE,0 /* no operand flag */
321: 321 00000000 .set LOAD,1 /* read-the-operand flag */
322: 322 00000000 .set STORE,2 /* store-the-operand flag */
323: 323 00000000
324: 324 00000000 .set NO_EVT_HLT,1 /* halt code: did not Get event */
325: 325 00000000 .set EVT_MSK_HLT,2 /* halt code: got masked event */
326: 326 00000000 .set BAD_PSL_HLT,3 /* halt code: wrong PSL value */
327: 327 00000000 .set PUSH_CNT_HLT,4 /* halt code: wrong # ops on stk */
328: 328 00000000 .set PUSH_PSL_HLT,5 /* halt code: bad PSL on stack */
329: 329 00000000 .set PUSH_PC_HLT,6 /* halt code: bad PC on stack */
330: 330 00000000 .set BAD_REG_HLT,7 /* halt code: bad final register */
331: 331 00000000 .set BAD_ACC_HLT,8 /* halt code: bad final Acc. */
332: 332 00000000
333: 333 00000000 #
334: 334 00000000 # set DMP_PG_0 to the 1st empty page
335: 335 00000000 #
336: 336 00000000 .set DMP_PG_0,0x36000
337: 337 00000000 .set DMP_PG_1,DMP_PG_0+0x400
338: 338 00000000 .set DMP_PG_2,DMP_PG_1+0x400
339: 339 00000000 .set DMP_PG_3,DMP_PG_2+0x400
340: 340 00000000 .set DMP_PG_4,DMP_PG_3+0x400
341: 341 00000000 .set DMP_PG_5,DMP_PG_4+0x400
342: 342 00000000 .set DMP_PG_6,DMP_PG_5+0x400
343: 343 00000000 .set DMP_PG_7,DMP_PG_6+0x400
344: 344 00000000 .set DMP_PG_8,DMP_PG_7+0x400
345: 345 00000000 .set DMP_PG_9,DMP_PG_8+0x400
346: 346 00000000 .set DMP_PG_10,DMP_PG_9+0x400
347: 347 00000000 .set DMP_PG_11,DMP_PG_10+0x400
348: 348 00000000 .set DMP_PG_12,DMP_PG_11+0x400
349: 349 00000000 .set DMP_PG_13,DMP_PG_12+0x400
350: 350 00000000
351: 351 00000000 #
352: 352 00000000 # test code space for the address / demand page tests
353: 353 00000000 #
354: 354 00000000 .set START_OF_CODE,DMP_PG_1-20 /* 1st addr of test-code space */
355: 355 00000000 .set CODE_BUF_SIZE,40 /* # bytes in test-code space */
356: 356 00000000 .set END_OF_CODE,START_OF_CODE+CODE_BUF_SIZE
357: 357 00000000
358: 358 00000000 #
359: 359 00000000 # data locations used by the event and demand page tests
360: 360 00000000 #
361: 361 00000000 .set _dmp_byte_op_1,DMP_PG_1+0x30 /* 'byte offset' data */
362: 362 00000000 .set _dmp_byte_op_2,DMP_PG_1+0x50 /* 'byte offset' data */
363: 363 00000000 .set _dmp_byte_op_3,DMP_PG_1+0x70 /* 'byte offset' data */
364: 364 00000000 .set _dmp_op_1,DMP_PG_3-4 /* 1st data word */
365: 365 00000000 .set _dmp_op_1_ptr,DMP_PG_4+0x30 /* ptr to 1st data wd */
366: 366 00000000 .set _dmp_op_2_ptr,DMP_PG_5+0x30 /* ptr to 2nd data wd */
367: 367 00000000 .set _dmp_op_2,DMP_PG_7-4 /* 2nd data word */
368: 368 00000000 .set _dmp_op_3,DMP_PG_8 /* 3rd data word */
369: 369 00000000 .set _dmp_op_3_ptr,DMP_PG_9+0x30 /* ptr to 3rd data wd */
370: 370 00000000 .set _dmp_op_4,DMP_PG_10 /* 4th data (for pipes) */
371: 371 00000000 .set _dmp_op_5,DMP_PG_11 /* 5th data (for pipes) */
372: 372 00000000 .set _sp_minus,DMP_PG_13-4 /* SP for POPs */
373: 373 00000000 .set _sp_page,DMP_PG_13 /* SP page boundary */
374: 374 00000000 .set _sp_plus,DMP_PG_13+4 /* SP for PUSHs */
375: 375 00000000
376: 376 00000000
377: 377 00000000
378: 378 00000000
379: 379 00000000 # ***************************************************************************
380: 380 00000000 # *
381: 381 00000000 # * Test an instruction that has no operands
382: 382 00000000 # *
383: 383 00000000 # * Only the 1 byte instruction and some NOPs will go into the code buffer.
384: 384 00000000 # *
385: 385 00000000 # * 30-May-85 : added pipelined tests
386: 386 00000000 # * 22-Jul-85 : don't run pipeline 2 test w/ emulated instructions
387: 387 00000000 # ***************************************************************************
388: 388 00000000 .text
389: 389 00000000 .align 1
390: 390 00000000 .globl _test_0_ops
391: 391 00000000 _test_0_ops:
392: 392 0000EFA8 0000 .word 0
393: 393 0000EFAA /*
394: 396 0000EFAA 1d 01 effffffff7 * Set the sizes for loading and for storing the accumulator
395: 397 0000EFB1 21 14 */
396: 398 0000EFB3 0d 01 efffffffee cmpl $SGL,_precision
397: 399 0000EFBA 0d 01 efffffffe7 bneq 1f
398: 400 0000EFC1 71 ef00000020 movl $SGL,_acc_ld_size /* set ACC. load size */
399: 401 0000EFC7 movl $SGL,_acc_st_size /* set ACC. store size */
400: 402 0000EFC7 0d 02 efffffffda jmp 2f
401: 403 0000EFCE 0d 02 efffffffd3 1:
402: 404 0000EFD5 1d efffffffcd 8900a6 movl $DBL,_acc_ld_size /* set ACC. load size */
403: 405 0000EFDE 21 07 movl $DBL,_acc_st_size /* set ACC. store size */
404: 406 0000EFE0 0d 01 efffffffc1 cmpl _op_code,$CVDF_OP_CODE /* "cvdf" instruction? */
405: 407 0000EFE7 bneq 2f
406: 408 0000EFE7 fe 04 ef00000018 movl $SGL,_acc_st_size /* store sgl acc. for cvdf */
407: 409 0000EFEE fe 04 ef0000008b 2:
408: 410 0000EFF5 1d efffffffad 37 callf $4,_test_0_no_pipe /* test w/o pipelineing */
409: 411 0000EFFC 31 07 callf $4,_test_0_pipe1 /* test pipeline test #1 */
410: 412 0000EFFE fe 04 ef00000133 cmpl _test_event,$FPM_CODE /* Is this the FPM test? */
411: 413 0000F005 40 beql 1f /* don't run pipe #2 w/ FPM */
412: 414 0000F006 callf $4,_test_0_pipe2 /* test pipeline test #2 */
413: 415 0000F006 1: ret /* return */
414: 416 0000F006
415: 417 0000F006
416: 418 0000F006
417: 419 0000F006
418: 420 0000F006 # ***************************************************************************
419: 421 0000F006 # *
420: 422 0000F006 # * TEST A NO OPERAND INSTRUCTION WITH NO FPP INSTRUCTION IN FRONT OF IT
421: 423 0000F006 # *
422: 424 0000F006 # ***************************************************************************
423: 425 0000F006 .text
424: 426 0000F006 .align 1
425: 427 0000F006 0000 .globl _test_0_no_pipe
426: 428 0000F008 4d efffffff9a _test_0_no_pipe:
427: 429 0000F00E fe 04 efffffff93 .word 0
428: 430 0000F015 dd 8f00000000 clrl _pipe_test /* reset the pipe-test flag */
429: 431 0000F01B fe 08 efffffff86 callf $4,_pack_inst /* pack the instr's code */
430: 432 0000F022 dd 8f00000000 pushl $_load_regs /* buffer for loading regs */
431: 433 0000F028 fe 08 efffffff79 callf $8,_fill_reg_buf /* fill the buffer */
432: 434 0000F02F pushl $_exp_regs /* expected reg values */
433: 437 0000F02F 4d efffffff73 callf $8,_fill_reg_buf /* fill the buffer */
434: 438 0000F035 /*
435: 439 0000F035 5c 04 efffffff6c 50 * test the instruction
436: 440 0000F03D 0d 40ffffffff64 */
437: efffffff5f
438: 441 0000F049 6d 50 clrl _index
439: 442 0000F04B 0d 40ffffffff56 3:
440: efffffff55
441: 443 0000F057 mull3 $4,_index,r0 /* get longword offset */
442: 444 0000F057 fe 04 efffffff4a movl *_data_ptr[r0],_dbl_ld_acc /* get load data's MSW */
443: 445 0000F05E 5d efffffff44 incl r0
444: 446 0000F064 21 f1 movl *_data_ptr[r0],_dbl_ld_acc+4 /* get load data's LSW */
445: 447 0000F066 1d efffffff3c efffffff37 2:
446: 448 0000F071 81 0c callf $4,_run_code /* execute the instruction */
447: 449 0000F073 6d efffffff2f tstl _force_loop
448: 450 0000F079 71 efffffffb6 bneq 2b /* loop on an error */
449: 451 0000F07F cmpl _index,_max_index /* last data pattern? */
450: 452 0000F07F 40 bgeq 1f
451: 453 0000F080 incl _index /* bump the index */
452: 454 0000F080 jmp 3b /* test next data pattern */
453: 455 0000F080 1:
454: 456 0000F080 ret /* return to test_code */
455: 457 0000F080
456: 458 0000F080
457: 459 0000F080
458: 460 0000F080
459: 461 0000F080 # ***************************************************************************
460: 462 0000F080 # *
461: 463 0000F080 # * TEST A NO OPERAND INSTRUCTION WITH A LOAD INSTRUCION IN FRONT OF IT
462: 464 0000F080 # *
463: 465 0000F080 # ***************************************************************************
464: 466 0000F080 0000 .text
465: 467 0000F082 0d 01 efffffff1f .align 1
466: 468 0000F089 0d 8862 efffffff17 .globl _test_0_pipe1
467: 469 0000F091 1d 02 efffffff10 _test_0_pipe1:
468: 470 0000F098 31 09 .word 0
469: 471 0000F09A 0d 06 efffffff07 movl $1,_pipe_test /* set the pipe_test flag */
470: 472 0000F0A1 11 07 movl $0x62,_addr_code_p1 /* set the addr mode */
471: 473 0000F0A3 0d 07 effffffefe cmpl $DBL,_acc_ld_size /* DBL or SGL ACC? */
472: 474 0000F0AA beql 1f
473: 475 0000F0AA fe 04 effffffef7 movl $LDF_OP_CODE,_pipe_inst1 /* pipe inst = load single */
474: 476 0000F0B1 dd 8f00000000 brb 2f
475: 477 0000F0B7 fe 08 effffffeea 1: movl $LDD_OP_CODE,_pipe_inst1 /* pipe inst = load double */
476: 478 0000F0BE dd 8f00000000 2:
477: 479 0000F0C4 fe 08 effffffedd callf $4,_pack_inst /* pack the instr's code */
478: 480 0000F0CB ed effffffed7 effffffeda pushl $_load_regs /* buffer for loading regs */
479: 481 0000F0D6 ed effffffecc effffffecf callf $8,_fill_reg_buf /* fill the buffer */
480: 482 0000F0E1 pushl $_exp_regs /* expected reg values */
481: 485 0000F0E1 4d effffffec1 callf $8,_fill_reg_buf /* fill the buffer */
482: 486 0000F0E7 moval _dbl_ld_acc,_load_regs+8 /* R2 points to the data */
483: 487 0000F0E7 5c 04 effffffeba 50 moval _dbl_ld_acc,_exp_regs+8 /* R2 points to the data */
484: 488 0000F0EF 0d 40fffffffeb2 /*
485: effffffead
486: 489 0000F0FB 6d 50 * test the instruction
487: 490 0000F0FD 0d 40fffffffea4 */
488: effffffea3
489: 491 0000F109 clrl _index
490: 492 0000F109 fe 04 effffffe98 3:
491: 493 0000F110 5d effffffe92 mull3 $4,_index,r0 /* get longword offset */
492: 494 0000F116 21 f1 movl *_data_ptr[r0],_dbl_ld_acc /* get load data's MSW */
493: 495 0000F118 1d effffffe8a effffffe85 incl r0
494: 496 0000F123 81 0c movl *_data_ptr[r0],_dbl_ld_acc+4 /* get load data's LSW */
495: 497 0000F125 6d effffffe7d 2:
496: 498 0000F12B 71 efffffffb6 callf $4,_run_code /* execute the instruction */
497: 499 0000F131 tstl _force_loop
498: 500 0000F131 4d effffffe71 bneq 2b /* loop on an error */
499: 501 0000F137 40 cmpl _index,_max_index /* last data pattern? */
500: 502 0000F138 bgeq 1f
501: 503 0000F138 incl _index /* bump the index */
502: 504 0000F138 jmp 3b /* test next data pattern */
503: 505 0000F138 1:
504: 506 0000F138 clrl _pipe_test /* reset the pipe-test flag */
505: 507 0000F138 ret /* return to test_code */
506: 508 0000F138
507: 509 0000F138
508: 510 0000F138
509: 511 0000F138
510: 512 0000F138 # ***************************************************************************
511: 513 0000F138 # *
512: 514 0000F138 # * TEST A NO OPERAND INSTRUCTION WITH AN ADD INSTRUCION IN FRONT OF IT
513: 515 0000F138 0000 # *
514: 516 0000F13A 0d 02 effffffe67 # ***************************************************************************
515: 517 0000F141 0d 8862 effffffe5f .text
516: 518 0000F149 1d 02 effffffe58 .align 1
517: 519 0000F150 31 0b .globl _test_0_pipe2
518: 520 0000F152 0d 8900c6 effffffe4d _test_0_pipe2:
519: 521 0000F15B 11 09 .word 0
520: 522 0000F15D 0d 8900c7 effffffe42 movl $2,_pipe_test /* set the pipe_test flag */
521: 523 0000F166 movl $0x62,_addr_code_p1 /* set the addr mode */
522: 524 0000F166 fe 04 effffffe3b cmpl $DBL,_acc_ld_size /* DBL or SGL ACC? */
523: 525 0000F16D dd 8f00000000 beql 1f
524: 526 0000F173 fe 08 effffffe2e movl $ADDF_OP_CODE,_pipe_inst1 /* pipe inst = add single */
525: 527 0000F17A dd 8f00000000 brb 2f
526: 528 0000F180 fe 08 effffffe21 1: movl $ADDD_OP_CODE,_pipe_inst1 /* pipe inst = add double */
527: 529 0000F187 ed effffffe1b effffffe1e 2:
528: 530 0000F192 ed effffffe10 effffffe13 callf $4,_pack_inst /* pack the instr's code */
529: 531 0000F19D pushl $_load_regs /* buffer for loading regs */
530: 534 0000F19D 4d effffffe05 callf $8,_fill_reg_buf /* fill the buffer */
531: 535 0000F1A3 pushl $_exp_regs /* expected reg values */
532: 536 0000F1A3 5c 04 effffffdfe 50 callf $8,_fill_reg_buf /* fill the buffer */
533: 537 0000F1AB 0d 40fffffffdf6 moval _dbl_ld_acc,_load_regs+8 /* R2 points to the data */
534: effffffdf1
535: 538 0000F1B7 6d 50 moval _dbl_ld_acc,_exp_regs+8 /* R2 points to the data */
536: 539 0000F1B9 0d 40fffffffde8 /*
537: effffffde7
538: 540 0000F1C5 * test the instruction
539: 541 0000F1C5 fe 04 effffffddc */
540: 542 0000F1CC 5d effffffdd6 clrl _index
541: 543 0000F1D2 21 f1 3:
542: 544 0000F1D4 1d effffffdce effffffdc9 mull3 $4,_index,r0 /* get longword offset */
543: 545 0000F1DF 81 0c movl *_data_ptr[r0],_dbl_ld_acc /* get load data's MSW */
544: 546 0000F1E1 6d effffffdc1 incl r0
545: 547 0000F1E7 71 efffffffb6 movl *_data_ptr[r0],_dbl_ld_acc+4 /* get load data's LSW */
546: 548 0000F1ED 2:
547: 549 0000F1ED 4d effffffdb5 callf $4,_run_code /* execute the instruction */
548: 550 0000F1F3 40 tstl _force_loop
549: 551 0000024c * bneq 2b /* loop on an error */
550: 552 0000024c * cmpl _index,_max_index /* last data pattern? */
551: 553 0000024c * bgeq 1f
552: 553 0000024c * bgeq 1f
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.