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