|
|
1.1 root 1:
2: /* standard definition file */
3: /* for 'C' diagnostic porgrams. */
4: /* */
5: /* */
6: #define HIGH 31
7: #define IPL 18
8: #define PSWMASK 255
9: #define T 16
10: #define IV 32
11: #define FU 64
12: #define DV 128
13: #define FLAGS 0x0000000f
14:
15: extern long scoplp;
16: extern long force_lp;
17:
18: asm(".set PSWMASK,0xf");
19:
20: /* constants definition for mcomplemented instructions test */
21: /* */
22: /* */
23:
24: #define MCOMB 0x29 /*opcodes */
25: #define MCOMW 0x2b
26: #define MCOML 0x2d
27:
28: #define MAX_PATTERNS 4 /*max test patterns */
29:
30: #define IDEST 0x11111111/*initialization */
31: /*for destination */
32:
33: #define S1 0 /*source values */
34: #define S2 0x55555555
35: #define S3 0xaaaaaaaa
36: #define S4 -1
37:
38: #define EB1 0x111111ff/*expected data*/
39: #define EW1 0x1111ffff
40: #define EL1 0xffffffff
41: #define EB2 0x111111aa
42: #define EW2 0x1111aaaa
43: #define EL2 0xaaaaaaaa
44: #define EB3 0x11111155
45: #define EW3 0x11115555
46: #define EL3 0x55555555
47: #define EB4 0x11111100
48: #define EW4 0x11110000
49: #define EL4 0
50:
51: #define EB11 0x000000ff
52: #define EW11 0x0000ffff
53: #define EL11 0xffffffff
54: #define EB22 0x555555aa
55: #define EW22 0x5555aaaa
56: #define EL22 0xaaaaaaaa
57: #define EB33 0xaaaaaa55
58: #define EW33 0xaaaa5555
59: #define EL33 0x55555555
60: #define EB44 0xffffff00
61: #define EW44 0xffff0000
62: #define EL44 0
63:
64:
65: #define FLG1 6 /*initial flag val*/
66: #define FLG2 6
67: #define FLG3 15
68: #define FLG4 11
69:
70:
71: #define EFLG1 9 /*expected flag val*/
72: #define EFLG2 9
73: #define EFLG3 1
74: #define EFLG4 5
75:
76: #define ERROR1 1 /*error definitions */
77: #define ERROR2 2
78: #define ERROR3 3
79: #define ERROR4 4
80: #define ERROR5 5
81: /*error messages */
82: #define EM1 "destination not equal to expected \n"
83: #define EM2 "source altered by the instruction \n"
84: #define EM3 "flags not equal to expected \n"
85:
86:
87:
88: /* Global variables for mcom test */
89: /* */
90: /* */
91:
92: static short index = 0;
93: static long dest = 0; /*destination location */
94: static long source = 0; /*source location */
95: static long psw; /*processor status word */
96:
97: static short flag_value[MAX_PATTERNS] = {FLG1,FLG2,FLG3,FLG4};
98: /*flag values for initialization */
99:
100: static long error_count = 0;
101:
102:
103: static long expb[MAX_PATTERNS] = {EB1,EB2,EB3,EB4};
104: /*expected values */
105:
106: static long expb1[MAX_PATTERNS] = {EB11,EB22,EB33,EB44};
107:
108: static long expw[MAX_PATTERNS] = {EW1,EW2,EW3,EW4};
109: static long expw1[MAX_PATTERNS] = {EW11,EW22,EW33,EW44};
110:
111: static long expl[MAX_PATTERNS] = {EL1,EL2,EL3,EL4};
112: static long expl1[MAX_PATTERNS] = {EL11,EL22,EL33,EL44};
113:
114: static short exp_psw[MAX_PATTERNS] = {EFLG1,EFLG2,EFLG3,EFLG4};
115: /*expected psw */
116:
117: static long src[MAX_PATTERNS] = {S1,S2,S3,S4};
118: /*source values */
119:
120:
121: static char *title;
122: static char *msg;
123: static long op1, op2, *lptr, exp_dest;
124: static short init_flg;
125:
126: mcom()
127: {
128: asm("movl $2,_no_opr"); /* two operands in use */
129: title = "** MCOM_L **\n";
130: mcoml();
131: title = "** MCOM_W **\n";
132: mcomw();
133: title = "** MCOM_B **\n";
134: mcomb();
135: asm("jmp *return");
136: }
137:
138:
139: static mcoml()
140: {
141: for (index = 0; index < MAX_PATTERNS; index++)
142: {
143: t_mcoml ();
144: t_mcoml1(); /*one more test where */
145: /* dest address = source address */
146: }
147: }
148:
149:
150: static t_mcoml()
151: {
152:
153: for (;;)
154: {
155: setjmp();
156: asm("mc1: movab mc1,_stpc");
157: op2 = dest = IDEST; /* Init destination, source, & psw */
158: lptr = src + index;
159: op1 = source = *lptr; /* do not use index */
160: init_flg = (short)flag_value[index];
161:
162: asm("movl $0x1,_subtst");
163: asm("bicpsw $PSWMASK");
164: asm("bispsw _init_flg");
165: asm("mcoml _source,_dest");
166: asm("movpsl _psw"); /*save psw */
167: psw &= FLAGS; /*mask out all bits except flag bits */
168: lptr = expl + index;
169: exp_dest = *lptr;
170: if (dest != exp_dest)
171: {
172: asm("movl $1,_ercode"); /* error data miscompare */
173: if (scoplp) longjmp();
174: error(dest,exp_dest,op1,op2);
175: }
176: if (source != op1)
177: {
178: asm("movl $3,_ercode"); /* error operand miscompare */
179: if (scoplp) longjmp();
180: error(source,op1,op1,op2);
181: }
182: if (psw != exp_psw[index])
183: {
184: asm("movl $2,_ercode"); /* error flag miscompare */
185: if (scoplp) longjmp();
186: error(psw,exp_psw[index],op1,op2);
187: }
188: else
189: if (force_lp) longjmp();
190: return(0);
191: }
192: }
193:
194:
195: static t_mcoml1()
196: {
197: for (;;)
198: {
199: setjmp();
200: asm("mc2: movab mc2,_stpc");
201: /*initialize source, & psw */
202: lptr = src + index;
203: op1 = source = *lptr; /* do not use index */
204: init_flg = (short)flag_value[index];
205:
206: if (index==0) {
207: asm("movl $0x2,_subtst");
208: asm("bicpsw $PSWMASK")
209: asm("bispsw _init_flg")
210: asm("mcoml _source,_source") /* memory to memory */
211: asm("movpsl _psw") /*save psw */
212: }
213: if (index==1) {
214: asm("movl $0x3,_subtst");
215: asm("bicpsw $PSWMASK")
216: asm("movl _source,r7") /* load register */
217: asm("bispsw _init_flg")
218: asm("mcoml _source,r7") /* memory to register */
219: asm("movl r7,_source") /* reload target address */
220: asm("movpsl _psw") /*save psw */
221: }
222: if (index==2) {
223: asm("movl $0x4,_subtst");
224: asm("bicpsw $PSWMASK")
225: asm("movl _source,r6") /* load register */
226: asm("bispsw _init_flg")
227: asm("mcoml r6,_source") /* register to memory */
228: asm("movpsl _psw") /*save psw */
229: }
230: if (index==3) {
231: asm("movl $0x5,_subtst");
232: asm("bicpsw $PSWMASK")
233: asm("movl _source,r6") /* load register */
234: asm("movl _source,r7") /* load register */
235: asm("bispsw _init_flg")
236: asm("mcoml r6,r7") /* register to register */
237: asm("movl r7,_source") /* reload target address */
238: asm("movpsl _psw") /*save psw */
239: }
240: psw &= FLAGS; /*mask out all bits except flag bits */
241: lptr = expl1 + index;
242: exp_dest = *lptr;
243: if (source != exp_dest)
244: {
245: asm("movl $1,_ercode"); /* error data miscompare */
246: if (scoplp) longjmp();
247: error(source,exp_dest,op1,op1);
248: }
249: if (psw != exp_psw[index])
250: {
251: asm("movl $2,_ercode"); /* error flag miscompare */
252: if (scoplp) longjmp();
253: error(psw,exp_psw[index],op1,op1);
254: }
255: else
256: if (force_lp) longjmp();
257: return(0);
258: }
259: }
260:
261:
262:
263: static mcomw()
264: {
265: for (index = 0; index < MAX_PATTERNS; index++)
266: {
267: t_mcomw();
268: t_mcomw1(); /*one more test where */
269: /* dest address = source address */
270: }
271: }
272:
273: static t_mcomw()
274: {
275:
276: for (;;)
277: {
278: setjmp();
279: asm("mc3: movab mc3,_stpc");
280: op2 = dest = IDEST; /* Init destination, source, & psw */
281: lptr = src + index;
282: op1 = source = *lptr; /* do not use index */
283: init_flg = (short)flag_value[index];
284:
285: if (index==0) {
286: asm("movl $0x6,_subtst");
287: asm("bicpsw $PSWMASK")
288: asm("bispsw _init_flg")
289: asm("mcomw _source+2,_dest+2") /* memory to memory */
290: asm("movpsl _psw") /*save psw */
291: }
292: if (index==1) {
293: asm("movl $0x7,_subtst");
294: asm("bicpsw $PSWMASK")
295: asm("movl _source,r6") /* load register */
296: asm("movl _dest,r7") /* load register */
297: asm("bispsw _init_flg")
298: asm("mcomw r6,r7") /* register to register */
299: asm("movpsl _psw") /*save psw */
300: asm("movw r7,_dest+2") /* reload memory location for check */
301: }
302: if (index==2) {
303: asm("movl $0x8,_subtst");
304: asm("bicpsw $PSWMASK")
305: asm("movl _source,r6") /* load register */
306: asm("bispsw _init_flg")
307: asm("mcomw r6,_dest+2") /* register to memory */
308: asm("movpsl _psw") /*save psw */
309: }
310: if (index==3) {
311: asm("movl $0x9,_subtst");
312: asm("bicpsw $PSWMASK")
313: asm("movl _dest,r7") /* load register */
314: asm("bispsw _init_flg")
315: asm("mcomw _source+2,r7") /* memory to register */
316: asm("movw r7,_dest+2") /* reload compare location */
317: asm("movpsl _psw") /*save psw */
318: }
319: psw &= FLAGS; /*mask out all bits except flag bits */
320: lptr = expw + index;
321: exp_dest = *lptr;
322: if (dest != exp_dest)
323: {
324: asm("movl $1,_ercode"); /* error data miscompare */
325: if (scoplp) longjmp();
326: error(dest,exp_dest,op1,op2);
327: }
328: if (source != op1)
329: {
330: asm("movl $3,_ercode"); /* error operand miscompare */
331: if (scoplp) longjmp();
332: error(source,op1,op1,op2);
333: }
334: if (psw != exp_psw[index])
335: {
336: asm("movl $2,_ercode"); /* error flag miscompare */
337: if (scoplp) longjmp();
338: error(psw,exp_psw[index],op1,op2);
339: }
340: else
341: if (force_lp) longjmp();
342: return(0);
343: }
344: }
345:
346: static t_mcomw1()
347: {
348: for ( ; ; )
349: {
350: /*initialize source, & psw */
351: setjmp();
352: asm("mc4: movab mc4,_stpc");
353: lptr = src + index;
354: op1 = source = *lptr; /* do not use index */
355: init_flg = (short)flag_value[index];
356: asm("movl $0xa,_subtst");
357: asm("bicpsw $PSWMASK")
358: asm("bispsw _init_flg")
359: asm("mcomw _source+2,_source+2")
360: asm("movpsl _psw") /*save psw */
361: psw &= FLAGS; /*mask out all bits except flag bits */
362: lptr = expw1 + index;
363: exp_dest = *lptr;
364: if (source != exp_dest)
365: {
366: asm("movl $1,_ercode"); /* error data miscompare */
367: if (scoplp) longjmp();
368: error(source,exp_dest,op1,op1);
369: }
370: if (psw != exp_psw[index])
371: {
372: asm("movl $2,_ercode"); /* error flag miscompare */
373: if (scoplp) longjmp();
374: error(psw,exp_psw[index],op1,op1);
375: }
376: else
377: if (force_lp) longjmp();
378: return(0);
379: }
380: }
381:
382:
383: static mcomb()
384: {
385: for (index = 0; index < MAX_PATTERNS; index++)
386: {
387: t_mcomb();
388: t_mcomb1(); /*one more test where */
389: /* dest address = source address */
390: }
391: }
392:
393: static t_mcomb()
394: {
395: for ( ; ; )
396: {
397: setjmp();
398: asm("mc5: movab mc5,_stpc");
399: op2 = dest = IDEST; /* Init destination, source, & psw */
400: lptr = src + index;
401: op1 = source = *lptr; /* do not use index */
402: init_flg = (short)flag_value[index];
403:
404: if (index==0) {
405: asm("movl $0xb,_subtst")
406: asm("bicpsw $PSWMASK")
407: asm("bispsw _init_flg")
408: asm("mcomb _source+3,_dest+3") /* memory to memory */
409: asm("movpsl _psw") /*save psw */
410: }
411: if (index==1) {
412: asm("movl $0xc,_subtst")
413: asm("bicpsw $PSWMASK")
414: asm("bispsw _init_flg")
415: asm("movl _source,r6") /* load data into reg */
416: asm("mcomb r6,_dest+3") /* register to memory */
417: asm("movpsl _psw") /*save psw */
418: }
419: if (index==2) {
420: asm("movl $0xd,_subtst")
421: asm("bicpsw $PSWMASK")
422: asm("bispsw _init_flg")
423: asm("movl _dest,r7") /* load dest register */
424: asm("mcomb _source+3,r7") /* memory to register */
425: asm("movpsl _psw") /*save psw */
426: asm("movb r7,_dest+3") /* reload memory */
427: }
428: if (index==3) {
429: asm("movl $0xe,_subtst")
430: asm("bicpsw $PSWMASK")
431: asm("movl _source,r6") /* load data into reg */
432: asm("movl _dest,r7") /* load dest register */
433: asm("bispsw _init_flg")
434: asm("mcomb r6,r7") /* register to register */
435: asm("movpsl _psw") /*save psw */
436: asm("movb r7,_dest+3") /* reload memory */
437: }
438: psw &= FLAGS; /*mask out all bits except flag bits */
439: lptr = expb + index;
440: exp_dest = *lptr;
441: if (dest != exp_dest)
442: {
443: asm("movl $1,_ercode"); /* error data miscompare */
444: if (scoplp) longjmp();
445: error(dest,exp_dest,op1,op2);
446: }
447: if (source != op1)
448: {
449: asm("movl $3,_ercode"); /* error operand miscompare */
450: if (scoplp) longjmp();
451: error(source,op1,op1,op2);
452: }
453: if (psw != exp_psw[index])
454: {
455: asm("movl $2,_ercode"); /* error flag miscompare */
456: if (scoplp) longjmp();
457: error(psw,exp_psw[index],op1,op2);
458: }
459: else
460: if (force_lp) longjmp();
461: return(0);
462: }
463: }
464:
465:
466:
467: static t_mcomb1()
468: {
469: for (;;)
470: {
471: setjmp();
472: asm("mc6: movab mc6,_stpc");
473: /*initialize source, & psw */
474: lptr = src + index;
475: op1 = source = *lptr; /* do not use index */
476: init_flg = (short)flag_value[index];
477: asm("movl $0xf,_subtst")
478: asm("bicpsw $PSWMASK")
479: asm("bispsw _init_flg")
480: asm("mcomb _source+3,_source+3")
481: asm("movpsl _psw") /*save psw */
482: psw &= FLAGS; /*mask out all bits except flag bits */
483: lptr = expb1 + index;
484: exp_dest = *lptr;
485: if (source != exp_dest)
486: {
487: asm("movl $1,_ercode"); /* error data miscompare */
488: if (scoplp) longjmp();
489: error(source,exp_dest,op1,op1);
490: }
491: if (psw != exp_psw[index])
492: {
493: asm("movl $2,_ercode"); /* error flag miscompare */
494: if (scoplp) longjmp();
495: error(psw,exp_psw[index],op1,op1);
496: }
497: else
498: if (force_lp) longjmp();
499: return(0);
500: }
501: }
502:
503:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.