|
|
1.1 root 1:
2:
3:
4:
5: /* CMPL (compare long) test */
6: /* */
7: /*Test name = cmpl */
8: /*Description = */
9: /* This test checks 'cmpl' instruction as follows: */
10: /* src1 src2 N Z V C (flags) */
11: /* ____ ____ _______________ */
12: /* + = + 0 1 0 1 */
13: /* - = - 0 1 0 1 */
14: /* + > + 1 0 0 0 */
15: /* - < - 1 0 0 0 */
16: /* - = + 1 0 0 1 */
17: /* - > + 1 0 0 1 */
18: /* - < + 1 0 0 1 */
19: /* + < - 0 0 0 0 */
20: /* + = - 0 0 0 0 */
21: /* + > - 0 0 0 0 */
22: /* - > - 0 0 0 1 */
23: /* + > + 0 0 0 1 */
24: /* M ---- M ------- */
25: /* R ---- M ------- */
26: /* */
27: /* */
28: /* */
29:
30: /* */
31: /* constants definition for 'cmpx' tests. */
32: /* */
33:
34: .set SRC1B1,0x7f /*+127, highest +ve number, byte */
35: .set SRC1W1,0x7fff
36: .set SRC1L1,0x7fffffff
37: .set SRC2B1,0x5555557f
38: .set SRC2W1,0x55557fff
39: .set SRC2L1,SRC1L1
40: .set SRC1B2,0xff /*-1, highest -ve number, byte */
41: .set SRC1W2,0xffff
42: .set SRC1L2,0xffffffff
43: .set SRC2B2,SRC1B2
44: .set SRC2W2,SRC1W2
45: .set SRC2L2,SRC1L2
46: .set SRC1B3,0x01
47: .set SRC1W3,0X0001
48: .set SRC1L3,0x00000001
49: .set SRC2B3,0x02
50: .set SRC2W3,0x0002
51: .set SRC2L3,0x00000002
52: .set SRC1B4,0xfe /*-2 */
53: .set SRC1W4,0xfffe
54: .set SRC1L4,0xfffffffe
55: .set SRC2B4,0xff /*-1 */
56: .set SRC2W4,0xffff
57: .set SRC2L4,0xffffffff
58: .set SRC1B5,0x81 /*-127 */
59: .set SRC1W5,0x8001
60: .set SRC1L5,0x80000001
61: .set SRC2B5,0x7f /*+127 */
62: .set SRC2W5,0x7fff
63: .set SRC2L5,0x7fffffff
64: .set SRC1B6,SRC1B4 /*-2 */
65: .set SRC1W6,SRC1W4
66: .set SRC1L6,SRC1L4
67: .set SRC2B6,SRC1B3 /*+1 */
68: .set SRC2W6,SRC1W3
69: .set SRC2L6,SRC1L3
70: .set SRC1B7,SRC2B4 /*-1 */
71: .set SRC1W7,SRC2W4
72: .set SRC1L7,SRC2L4
73: .set SRC2B7,SRC2B3
74: .set SRC2W7,SRC2W3
75: .set SRC2L7,SRC2L3
76: .set SRC1B8,SRC2B6 /*+1*/
77: .set SRC1W8,SRC2W6
78: .set SRC1L8,SRC2L6
79: .set SRC2B8,SRC1B4 /*-2*/
80: .set SRC2W8,SRC1W4
81: .set SRC2L8,SRC1L4
82: .set SRC1B9,SRC1B1 /*127*/
83: .set SRC1W9,SRC1W1
84: .set SRC1L9,SRC1L1
85: .set SRC2B9,SRC1B5 /*-127*/
86: .set SRC2W9,SRC1W5
87: .set SRC2L9,SRC1L5
88: .set SRC1B10,SRC2B3 /*2*/
89: .set SRC1W10,SRC2W3
90: .set SRC1L10,SRC2L3
91: .set SRC2B10,SRC1B2 /*-1*/
92: .set SRC2W10,SRC1W2
93: .set SRC2L10,SRC1L2
94: .set SRC1B11,SRC1B2 /*-1*/
95: .set SRC1W11,SRC1W2
96: .set SRC1L11,SRC1L2
97: .set SRC2B11,SRC1B4 /*-2*/
98: .set SRC2W11,SRC1W4
99: .set SRC2L11,SRC1L4
100: .set SRC1B12,SRC2B3 /*2*/
101: .set SRC1W12,SRC2W3
102: .set SRC1L12,SRC2L3
103: .set SRC2B12,SRC1B3 /*1*/
104: .set SRC2W12,SRC1W3
105: .set SRC2L12,SRC1L3
106:
107: /* */
108: /* Syst.s - Constants */
109: /* */
110: .set IPL,8
111: .set HIGH,31
112: .set ZERO,0
113: .set ONES,0xffffffff
114: .set N,8
115: .set Z,4
116: .set V,2
117: .set C,1
118: .set T,16
119: .set IV,32
120: .set FU,64
121: .set DV,128
122: .set PSWMASK,0x003f
123: /* */
124: /* t1loc = M, t2loc = M */
125: /* */
126: .globl _cmp_l
127: _cmp_l:
128: callf $4,_setjmp /* save context for error return */
129: movab _cmp_l,_stpc /* save address of subtest start */
130: movl $1,_subtst /* subtest number */
131: movl $2,_no_opr /* number of operands in use */
132: movl $SRC1L1,_opr /* first operand */
133: movl $SRC2L1,_opr + 4 /* second operand */
134: 0: movl $SRC1L1,tloc1 /*tloc1 = source1 */
135: movl $SRC2L1,tloc2 /*tloc2 = source2 */
136: bicpsw $PSWMASK /*disable overflow & other enable bits */
137: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */
138: cmpl tloc1,tloc2 /*execute compare mem to mem */
139: bneq error1 /*error if Z = 0 */
140: blss error1 /*error if N = 1 */
141: bvs error1 /*error if V = 1 */
142: bcc error1 /*error if C = 0 */
143: jmp 1f
144: error1: movpsl _actual /* actual data = psl MAYBE is incorrect */
145: bbs $0,_scoplp,0b /* if set scope loop on error */
146: movl $2,_ercode /* error code flag failure */
147: jmp *badrtn
148: 1: bicpsw $Z /*clear Z flag */
149: cmpl $SRC1L1,tloc1 /*check tloc1 & tlco2 unchanged */
150: jeql 1f
151: bbs $0,_scoplp,0b /* if set scope loop on error */
152: movl $3,_ercode /* error code operand was changed */
153: movl tloc1,_actual /* actual data */
154: movl $SRC1L1,_expected /* expected data */
155: jmp *badrtn
156: 1: bicpsw $Z
157: cmpl $SRC2L1,tloc2
158: jeql c2
159: bbs $0,_scoplp,0b /* if set scope loop on error */
160: movl $3,_ercode /* error code operand was changed */
161: movl tloc2,_actual /* actual data */
162: movl $SRC2L1,_expected /* expected data */
163: jmp *badrtn
164: /* */
165: /* different patterns for source1 & source2 */
166: /* */
167: c2:
168: bbs $0,_force_lp,0b /* if set loop on last subtest */
169: ac2: callf $4,_setjmp /* save context for error return */
170: movab ac2,_stpc /* save address of subtest start */
171: movl $2,_subtst /* subtest number */
172: movl $2,_no_opr /* number of operands in use */
173: movl $SRC1L2,_opr /* first operand */
174: movl $SRC2L2,_opr + 4 /* second operand */
175: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
176: movl $SRC1L2,r3 /*tloc1 = source1 */
177: movl $SRC2L2,tloc2 /*tloc2 = source2 */
178: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */
179: cmpl r3,tloc2 /*execute compare reg to mem */
180: bneq error2 /*error if Z = 0 */
181: blss error2 /*error if N = 1 */
182: bvs error2 /*error if V = 1 */
183: bcc error2 /*error if C = 0 */
184: jmp cmplnc
185: error2: movpsl _actual /* actual data = psl MAYBE is incorrect */
186: bbs $0,_scoplp,0b /* if set scope loop on error */
187: movl $2,_ercode /* error code flag failure */
188: jmp *badrtn
189:
190: cmplnc:
191:
192: bbs $0,_force_lp,0b /* if set loop on last subtest */
193: ac3: callf $4,_setjmp /* save context for error return */
194: movab ac3,_stpc /* save address of subtest start */
195: movl $3,_subtst /* subtest number */
196: movl $2,_no_opr /* number of operands in use */
197: movl $SRC1L3,_opr /* first operand */
198: movl $SRC2L3,_opr + 4 /* second operand */
199: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
200: movl $SRC1L3,tloc1 /*tloc1 = source1 */
201: movl $SRC2L3,r4 /*tloc2 = source2 */
202: bispsw $(Z|V) /*turn overflow, & zero ON */
203: cmpl tloc1,r4 /*execute compare memory to reg4 */
204: beql error3 /*error if Z = 1 */
205: bgeq error3 /*error if N = 0 */
206: bvs error3 /*error if V = 1 */
207: bcs error3 /*error if C = 1 */
208: jmp c4
209: error3: movpsl _actual /* actual data = psl MAYBE is incorrect */
210: bbs $0,_scoplp,0b /* if set scope loop on error */
211: movl $2,_ercode /* error code flag failure */
212: jmp *badrtn
213: /* */
214: /* different patterns for source1 & source2 */
215: /* */
216: c4:
217: bbs $0,_force_lp,0b /* if set loop on last subtest */
218: ac4: callf $4,_setjmp /* save context for error return */
219: movab ac4,_stpc /* save address of subtest start */
220: movl $4,_subtst /* subtest number */
221: movl $2,_no_opr /* number of operands in use */
222: movl $SRC1L4,_opr /* first operand */
223: movl $SRC2L4,_opr + 4 /* second operand */
224: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
225: movl $SRC1L4,r3 /*tloc1 = source1 */
226: movl $SRC2L4,r4 /*tloc2 = source2 */
227: bispsw $(Z|V) /*turn overflow, & zero ON */
228: cmpl r3,r4 /*execute compare reg to reg */
229: beql error4 /*error if Z = 1 */
230: bgeq error4 /*error if N = 0 */
231: bvs error4 /*error if V = 1 */
232: bcs error4 /*error if C = 1 */
233: jmp cmpln
234: error4: movpsl _actual /* actual data = psl MAYBE is incorrect */
235: bbs $0,_scoplp,0b /* if set scope loop on error */
236: movl $2,_ercode /* error code flag failure */
237: jmp *badrtn
238:
239:
240: cmpln:
241: bbs $0,_force_lp,0b /* if set loop on last subtest */
242: ac5: callf $4,_setjmp /* save context for error return */
243: movab ac5,_stpc /* save address of subtest start */
244: movl $5,_subtst /* subtest number */
245: movl $2,_no_opr /* number of operands in use */
246: movl $SRC1L5,_opr /* first operand */
247: movl $SRC2L5,_opr + 4 /* second operand */
248: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
249: movl $SRC1L5,tloc1 /*tloc1 = source1 */
250: movl $SRC2L5,tloc2 /*tloc2 = source2 */
251: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */
252: cmpl tloc1,tloc2 /*execute compare */
253: beql error5 /*error if Z = 1 */
254: bgeq error5 /*error if N = 0 */
255: bvs error5 /*error if V = 1 */
256: bcc error5 /*error if C = 0 */
257: jmp c6
258: error5: movpsl _actual /* actual data = psl MAYBE is incorrect */
259: bbs $0,_scoplp,0b /* if set scope loop on error */
260: movl $2,_ercode /* error code flag failure */
261: jmp *badrtn
262: /* */
263: /* different patterns for source1 & source2 */
264: /* */
265: c6:
266: bbs $0,_force_lp,0b /* if set loop on last subtest */
267: ac6: callf $4,_setjmp /* save context for error return */
268: movab ac6,_stpc /* save address of subtest start */
269: movl $6,_subtst /* subtest number */
270: movl $2,_no_opr /* number of operands in use */
271: movl $SRC1L6,_opr /* first operand */
272: movl $SRC2L6,_opr + 4 /* second operand */
273: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
274: movl $SRC1L6,tloc1 /*tloc1 = source1 */
275: movl $SRC2L6,tloc2 /*tloc2 = source2 */
276: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */
277: cmpl tloc1,tloc2 /*execute compare */
278: beql error6 /*error if Z = 1 */
279: bgeq error6 /*error if N = 0 */
280: bvs error6 /*error if V = 1 */
281: bcc error6 /*error if C = 0 */
282: jmp c7
283: error6: movpsl _actual /* actual data = psl MAYBE is incorrect */
284: bbs $0,_scoplp,0b /* if set scope loop on error */
285: movl $2,_ercode /* error code flag failure */
286: jmp *badrtn
287: /* */
288: /* different patterns for source1 & source2 */
289: /* */
290: c7:
291: bbs $0,_force_lp,0b /* if set loop on last subtest */
292: ac7: callf $4,_setjmp /* save context for error return */
293: movab ac7,_stpc /* save address of subtest start */
294: movl $7,_subtst /* subtest number */
295: movl $2,_no_opr /* number of operands in use */
296: movl $SRC1L7,_opr /* first operand */
297: movl $SRC2L7,_opr + 4 /* second operand */
298: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
299: movl $SRC1L7,tloc1 /*tloc1 = source1 */
300: movl $SRC2L7,tloc2 /*tloc2 = source2 */
301: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */
302: cmpl tloc1,tloc2 /*execute compare */
303: beql error7 /*error if Z = 1 */
304: bgeq error7 /*error if N = 0 */
305: bvs error7 /*error if V = 1 */
306: bcc error7 /*error if C = 0 */
307: jmp cmplc
308: error7: movpsl _actual /* actual data = psl MAYBE is incorrect */
309: bbs $0,_scoplp,0b /* if set scope loop on error */
310: movl $2,_ercode /* error code flag failure */
311: jmp *badrtn
312:
313: cmplc:
314: bbs $0,_force_lp,0b /* if set loop on last subtest */
315: ac8: callf $4,_setjmp /* save context for error return */
316: movab ac8,_stpc /* save address of subtest start */
317: movl $8,_subtst /* subtest number */
318: movl $2,_no_opr /* number of operands in use */
319: movl $SRC1L8,_opr /* first operand */
320: movl $SRC2L8,_opr + 4 /* second operand */
321: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
322: movl $SRC1L8,tloc1 /*tloc1 = source1 */
323: movl $SRC2L8,tloc2 /*tloc2 = source2 */
324: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */
325: cmpl tloc1,tloc2 /*execute compare */
326: beql error8 /*error if Z = 1 */
327: blss error8 /*error if N = 1 */
328: bvs error8 /*error if V = 1 */
329: bcs error8 /*error if C = 1 */
330: jmp c9
331: error8: movpsl _actual /* actual data = psl MAYBE is incorrect */
332: bbs $0,_scoplp,0b /* if set scope loop on error */
333: movl $2,_ercode /* error code flag failure */
334: jmp *badrtn
335: /* */
336: /* different patterns for source1 & source2 */
337: /* */
338: c9:
339: bbs $0,_force_lp,0b /* if set loop on last subtest */
340: ac9: callf $4,_setjmp /* save context for error return */
341: movab ac9,_stpc /* save address of subtest start */
342: movl $9,_subtst /* subtest number */
343: movl $2,_no_opr /* number of operands in use */
344: movl $SRC1L9,_opr /* first operand */
345: movl $SRC2L9,_opr + 4 /* second operand */
346: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
347: movl $SRC1L9,tloc1 /*tloc1 = source1 */
348: movl $SRC2L9,tloc2 /*tloc2 = source2 */
349: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */
350: cmpl tloc1,tloc2 /*execute compare */
351: beql error9 /*error if Z = 1 */
352: blss error9 /*error if N = 1 */
353: bvs error9 /*error if V = 1 */
354: bcs error9 /*error if C = 1 */
355: jmp c10
356: error9: movpsl _actual /* actual data = psl MAYBE is incorrect */
357: bbs $0,_scoplp,0b /* if set scope loop on error */
358: movl $2,_ercode /* error code flag failure */
359: jmp *badrtn
360: /* */
361: /* different patterns for source1 & source2 */
362: /* */
363: c10:
364: bbs $0,_force_lp,0b /* if set loop on last subtest */
365: ac10: callf $4,_setjmp /* save context for error return */
366: movab ac10,_stpc /* save address of subtest start */
367: movl $0xa,_subtst /* subtest number */
368: movl $2,_no_opr /* number of operands in use */
369: movl $SRC1L10,_opr /* first operand */
370: movl $SRC2L10,_opr + 4 /* second operand */
371: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
372: movl $SRC1L10,tloc1 /*tloc1 = source1 */
373: movl $SRC2L10,tloc2 /*tloc2 = source2 */
374: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */
375: cmpl tloc1,tloc2 /*execute compare */
376: jeql error10 /*error if Z = 1 */
377: jlss error10 /*error if N = 1 */
378: jvs error10 /*error if V = 1 */
379: jcs error10 /*error if C = 1 */
380: jmp cmploff
381: error10: movpsl _actual /* actual data = psl MAYBE is incorrect */
382: bbs $0,_scoplp,0b /* if set scope loop on error */
383: movl $2,_ercode /* error code flag failure */
384: jmp *badrtn
385:
386: cmploff:
387: bbs $0,_force_lp,0b /* if set loop on last subtest */
388: ac11: callf $4,_setjmp /* save context for error return */
389: movab ac11,_stpc /* save address of subtest start */
390: movl $0xb,_subtst /* subtest number */
391: movl $2,_no_opr /* number of operands in use */
392: movl $SRC1L11,_opr /* first operand */
393: movl $SRC2L11,_opr + 4 /* second operand */
394: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
395: movl $SRC1L11,tloc1 /*tloc1 = source1 */
396: movl $SRC2L11,tloc2 /*tloc2 = source2 */
397: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */
398: cmpl tloc1,tloc2 /*execute compare */
399: beql error11 /*error if Z = 1 */
400: blss error11 /*error if N = 1 */
401: bvs error11 /*error if V = 1 */
402: bcc error11 /*error if C = 0 */
403: jmp cmploff1
404: jmp cmploff
405: error11: movpsl _actual /* actual data = psl MAYBE is incorrect */
406: bbs $0,_scoplp,0b /* if set scope loop on error */
407: movl $2,_ercode /* error code flag failure */
408: jmp *badrtn
409:
410: cmploff1:
411: bbs $0,_force_lp,0b /* if set loop on last subtest */
412: ac12: callf $4,_setjmp /* save context for error return */
413: movab ac12,_stpc /* save address of subtest start */
414: movl $0xc,_subtst /* subtest number */
415: movl $2,_no_opr /* number of operands in use */
416: movl $SRC1L12,_opr /* first operand */
417: movl $SRC2L12,_opr + 4 /* second operand */
418: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
419: movl $SRC1L12,tloc1 /*tloc1 = source1 */
420: movl $SRC2L12,tloc2 /*tloc2 = source2 */
421: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */
422: cmpl tloc1,tloc2 /*execute compare */
423: beql error12 /*error if Z = 1 */
424: blss error12 /*error if N = 1 */
425: bvs error12 /*error if V = 1 */
426: bcc error12 /*error if C = 0 */
427: jmp aldn
428: error12: movpsl _actual /* actual data = psl MAYBE is incorrect */
429: bbs $0,_scoplp,0b /* if set scope loop on error */
430: movl $2,_ercode /* error code flag failure */
431: jmp *badrtn
432: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
433: jmp *return /* good, return to monitor */
434:
435:
436: /* Variables */
437: .align 2
438: tloc1: .space 4
439: tloc2: .space 4
440:
441: /* end of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.