|
|
1.1 root 1:
2:
3: /* CMPB (compare byte) test */
4: /* */
5: /*Test name = cmpb */
6: /*Description = */
7: /* This test checks 'cmpb' 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 /*+2*/
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_b
125: _cmp_b:
126: callf $4,_setjmp /* save context for error return */
127: movab _cmp_b,_stpc /* save address of subtest start */
128: movl $1,_subtst /* subtest number */
129: movl $2,_no_opr /* number of operands in use */
130: movl $SRC1B1,_opr /* first operand */
131: movl $SRC2B1,_opr + 4 /* second operand */
132: 0: movl $SRC1B1,tloc1 /*tloc1 = source1 */
133: movl $SRC2B1,tloc2 /*tloc2 = source2 */
134: bicpsw $PSWMASK /*disable overflow & other enable bits */
135: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */
136: cmpb tloc1+3,tloc2+3 /*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 data psl MAYBE is incorrect */
143: bbs $0,_scoplp,0b /* if set scope loop on error */
144: movl $2,_ercode /* error code flag miscompare */
145: jmp *badrtn
146: 1: bicpsw $Z /*clear Z flag */
147: cmpl $SRC1B1,tloc1 /*check tloc1+3 & tlco2 unchanged */
148: beql 1f /* if no error continue */
149: bbs $0,_scoplp,0b /* if set scope loop on error */
150: movl $3,_ercode /* error code operand was modified */
151: movl tloc1,_actual /* actual data */
152: movl $SRC1B1,_expected /* expected data */
153: jmp *badrtn
154: 1: bicpsw $Z
155: cmpl $SRC2B1,tloc2
156: beql c2 /* if no error continue */
157: bbs $0,_scoplp,0b /* if set scope loop on error */
158: movl $3,_ercode /* error code operand was modified */
159: movl tloc1,_actual /* actual data */
160: movl $SRC1B1,_expected /* expected data */
161: jmp *badrtn
162: /* */
163: /* different patterns for source1 & source2 */
164: /* */
165: c2: bbs $0,_force_lp,0b /* if set loop on last subtest */
166: ac2: callf $4,_setjmp /* save context for error return */
167: movab ac2,_stpc /* save address of subtest start */
168: movl $2,_subtst /* subtest number */
169: movl $2,_no_opr /* number of operands in use */
170: movl $SRC1B2,_opr /* first operand */
171: movl $-1,_opr + 4 /* second operand */
172: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
173: movl $SRC1B2,tloc1 /*tloc1 = source1 */
174: bispsw $(N|V|C) /*turn neg, overflow, & carry ON */
175: cmpb tloc1+3,$-1 /*execute compare mem to data */
176: bneq error2 /*error if Z = 0 */
177: blss error2 /*error if N = 1 */
178: bvs error2 /*error if V = 1 */
179: bcc error2 /*error if C = 0 */
180: jmp cmpbnc
181: error2: movpsl _actual /* actual data psl MAYBE is incorrect */
182: bbs $0,_scoplp,0b /* if set scope loop on error */
183: movl $2,_ercode /* error code flag miscompare */
184: jmp *badrtn
185:
186: cmpbnc:
187: bbs $0,_force_lp,0b /* if set loop on last subtest */
188: ac3: callf $4,_setjmp /* save context for error return */
189: movab ac3,_stpc /* save address of subtest start */
190: movl $3,_subtst /* subtest number */
191: movl $2,_no_opr /* number of operands in use */
192: movl $SRC2B3,_opr /* first operand */
193: movl $SRC1B3,_opr + 4 /* second operand */
194: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
195: movl $SRC2B3,tloc2 /*tloc2 = source2 */
196: bispsw $(Z|V) /*turn overflow, & zero ON */
197: cmpb $SRC1B3,tloc2+3 /*execute compare data to mem */
198: beql error3 /*error if Z = 1 */
199: bgeq error3 /*error if N = 0 */
200: bvs error3 /*error if V = 1 */
201: bcs error3 /*error if C = 1 */
202: jmp c4
203: error3: movpsl _actual /* actual data psl MAYBE is incorrect */
204: bbs $0,_scoplp,0b /* if set scope loop on error */
205: movl $2,_ercode /* error code flag miscompare */
206: jmp *badrtn
207: /* */
208: /* different patterns for source1 & source2 */
209: /* */
210: c4: bbs $0,_force_lp,0b /* if set loop on last subtest */
211: ac4: callf $4,_setjmp /* save context for error return */
212: movab ac4,_stpc /* save address of subtest start */
213: movl $4,_subtst /* subtest number */
214: movl $2,_no_opr /* number of operands in use */
215: movl $SRC1B4,_opr /* first operand */
216: movl $SRC2B4,_opr + 4 /* second operand */
217: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
218: movl $SRC1B4,tloc1 /*tloc1 = source1 */
219: movl $SRC2B4,r4 /* r4 = source2 */
220: bispsw $(Z|V) /*turn overflow, & zero ON */
221: cmpb tloc1+3,r4 /*execute compare memory to reg */
222: beql error4 /*error if Z = 1 */
223: bgeq error4 /*error if N = 0 */
224: bvs error4 /*error if V = 1 */
225: bcc error4 /*error if C = 0 */
226: jmp cmpbn
227: error4: movpsl _actual /* actual data psl MAYBE is incorrect */
228: bbs $0,_scoplp,0b /* if set scope loop on error */
229: movl $2,_ercode /* error code flag miscompare */
230: jmp *badrtn
231:
232:
233: cmpbn:
234: bbs $0,_force_lp,0b /* if set loop on last subtest */
235: ac5: callf $4,_setjmp /* save context for error return */
236: movab ac5,_stpc /* save address of subtest start */
237: movl $5,_subtst /* subtest number */
238: movl $2,_no_opr /* number of operands in use */
239: movl $SRC1B5,_opr /* first operand */
240: movl $SRC2B5,_opr + 4 /* second operand */
241: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
242: movl $SRC1B5,r3 /* r3 = source1 */
243: movl $SRC2B5,tloc2 /*tloc2 = source2 */
244: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */
245: cmpb r3,tloc2+3 /* execute compare reg to mem */
246: beql error5 /*error if Z = 1 */
247: blss error5 /*error if N = 1 */
248: bvs error5 /*error if V = 1 */
249: bcc error5 /*error if C = 0 */
250: jmp c6
251: error5: movpsl _actual /* actual data psl MAYBE is incorrect */
252: bbs $0,_scoplp,0b /* if set scope loop on error */
253: movl $2,_ercode /* error code flag miscompare */
254: jmp *badrtn
255: /* */
256: /* different patterns for source1 & source2 */
257: /* */
258: c6:
259: bbs $0,_force_lp,0b /* if set loop on last subtest */
260: ac6: callf $4,_setjmp /* save context for error return */
261: movab ac6,_stpc /* save address of subtest start */
262: movl $6,_subtst /* subtest number */
263: movl $2,_no_opr /* number of operands in use */
264: movl $-2,_opr /* first operand */
265: movl $SRC2B6,_opr + 4 /* second operand */
266: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
267: movl $SRC2B6,r4 /*tloc2 = source2 */
268: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */
269: cmpb $-2,r4 /*execute compare data to reg */
270: beql error6 /*error if Z = 1 */
271: bgeq error6 /*error if N = 0 */
272: bvs error6 /*error if V = 1 */
273: bcc error6 /*error if C = 0 */
274: jmp c7
275: error6: movpsl _actual /* actual data psl MAYBE is incorrect */
276: bbs $0,_scoplp,0b /* if set scope loop on error */
277: movl $2,_ercode /* error code flag miscompare */
278: jmp *badrtn
279: /* */
280: /* different patterns for source1 & source2 */
281: /* */
282: c7:
283: bbs $0,_force_lp,0b /* if set loop on last subtest */
284: ac7: callf $4,_setjmp /* save context for error return */
285: movab ac7,_stpc /* save address of subtest start */
286: movl $7,_subtst /* subtest number */
287: movl $2,_no_opr /* number of operands in use */
288: movl $SRC1B7,_opr /* first operand */
289: movl $SRC2B7,_opr + 4 /* second operand */
290: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
291: movl $SRC1B7,r3 /*tloc1 = source1 */
292: movl $SRC2B7,r4 /*tloc2 = source2 */
293: bispsw $(Z|V|C) /*turn zero, overflow, & carry ON */
294: cmpb r3,r4 /*execute compare reg to reg */
295: beql error7 /*error if Z = 1 */
296: blss error7 /*error if N = 1 */
297: bvs error7 /*error if V = 1 */
298: bcc error7 /*error if C = 0 */
299: jmp cmpbc
300: error7: movpsl _actual /* actual data psl MAYBE is incorrect */
301: bbs $0,_scoplp,0b /* if set scope loop on error */
302: movl $2,_ercode /* error code flag miscompare */
303: jmp *badrtn
304:
305: cmpbc:
306: bbs $0,_force_lp,0b /* if set loop on last subtest */
307: ac8: callf $4,_setjmp /* save context for error return */
308: movab ac8,_stpc /* save address of subtest start */
309: movl $8,_subtst /* subtest number */
310: movl $2,_no_opr /* number of operands in use */
311: movl $SRC1B8,_opr /* first operand */
312: movl $-2,_opr + 4 /* second operand */
313: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
314: movl $SRC1B8,r3 /*tloc1 = source1 */
315: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */
316: cmpb r3,$-2 /*execute compare reg to data */
317: beql error8 /*error if Z = 1 */
318: blss error8 /*error if N = 1 */
319: bvs error8 /*error if V = 1 */
320: bcs error8 /*error if C = 1 */
321: jmp c9
322: error8: movpsl _actual /* actual data psl MAYBE is incorrect */
323: bbs $0,_scoplp,0b /* if set scope loop on error */
324: movl $2,_ercode /* error code flag miscompare */
325: jmp *badrtn
326: /* */
327: /* different patterns for source1 & source2 */
328: /* */
329: c9:
330: bbs $0,_force_lp,0b /* if set loop on last subtest */
331: ac9: callf $4,_setjmp /* save context for error return */
332: movab ac9,_stpc /* save address of subtest start */
333: movl $9,_subtst /* subtest number */
334: movl $2,_no_opr /* number of operands in use */
335: movl $SRC1B9,_opr /* first operand */
336: movl $SRC2B9,_opr + 4 /* second operand */
337: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
338: movl $SRC1B9,tloc1 /*tloc1 = source1 */
339: movl $SRC2B9,tloc2 /*tloc2 = source2 */
340: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */
341: cmpb tloc1+3,tloc2+3 /*execute compare */
342: beql error9 /*error if Z = 1 */
343: blss error9 /*error if N = 1 */
344: bvs error9 /*error if V = 1 */
345: bcs error9 /*error if C = 1 */
346: jmp c10
347: error9: movpsl _actual /* actual data psl MAYBE is incorrect */
348: bbs $0,_scoplp,0b /* if set scope loop on error */
349: movl $2,_ercode /* error code flag miscompare */
350: jmp *badrtn
351: /* */
352: /* different patterns for source1 & source2 */
353: /* */
354: c10:
355: bbs $0,_force_lp,0b /* if set loop on last subtest */
356: ac10: callf $4,_setjmp /* save context for error return */
357: movab ac10,_stpc /* save address of subtest start */
358: movl $0xa,_subtst /* subtest number */
359: movl $2,_no_opr /* number of operands in use */
360: movl $SRC1B10,_opr /* first operand */
361: movl $SRC2B10,_opr + 4 /* second operand */
362: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
363: movl $SRC1B10,tloc1 /*tloc1 = source1 */
364: movl $SRC2B10,tloc2 /*tloc2 = source2 */
365: bispsw $(Z|V|N) /*turn zero, overflow, & neg ON */
366: cmpb tloc1+3,tloc2+3 /*execute compare */
367: jeql error10 /*error if Z = 1 */
368: jlss error10 /*error if N = 1 */
369: jvs error10 /*error if V = 1 */
370: jcs error10 /*error if C = 1 */
371: jmp cmpboff
372: error10: movpsl _actual /* actual data psl MAYBE is incorrect */
373: bbs $0,_scoplp,0b /* if set scope loop on error */
374: movl $2,_ercode /* error code flag miscompare */
375: jmp *badrtn
376:
377: cmpboff:
378: bbs $0,_force_lp,0b /* if set loop on last subtest */
379: ac11: callf $4,_setjmp /* save context for error return */
380: movab ac11,_stpc /* save address of subtest start */
381: movl $0xb,_subtst /* subtest number */
382: movl $2,_no_opr /* number of operands in use */
383: movl $SRC1B11,_opr /* first operand */
384: movl $SRC2B11,_opr + 4 /* second operand */
385: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
386: movl $SRC1B11,tloc1 /*tloc1 = source1 */
387: movl $SRC2B11,tloc2 /*tloc2 = source2 */
388: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */
389: cmpb tloc1+3,tloc2+3 /*execute compare */
390: beql error11 /*error if Z = 1 */
391: blss error11 /*error if N = 1 */
392: bvs error11 /*error if V = 1 */
393: bcc error11 /*error if C = 0 */
394: jmp cmpboff1
395: error11: movpsl _actual /* actual data psl MAYBE is incorrect */
396: bbs $0,_scoplp,0b /* if set scope loop on error */
397: movl $2,_ercode /* error code flag miscompare */
398: jmp *badrtn
399:
400: cmpboff1:
401: bbs $0,_force_lp,0b /* if set loop on last subtest */
402: ac12: callf $4,_setjmp /* save context for error return */
403: movab ac12,_stpc /* save address of subtest start */
404: movl $0xc,_subtst /* subtest number */
405: movl $2,_no_opr /* number of operands in use */
406: movl $SRC1B12,_opr /* first operand */
407: movl $SRC2B12,_opr + 4 /* second operand */
408: 0: bicpsw $PSWMASK /*disable overflow & other enable bits */
409: movl $SRC1B12,tloc1 /*tloc1 = source1 */
410: movl $SRC2B12,tloc2 /*tloc2 = source2 */
411: bispsw $(Z|N|V|C) /*turn Z, neg, overflow, & carry ON */
412: cmpb tloc1+3,tloc2+3 /*execute compare */
413: beql error12 /*error if Z = 1 */
414: blss error12 /*error if N = 1 */
415: bvs error12 /*error if V = 1 */
416: bcc error12 /*error if C = 0 */
417: jmp aldn
418: error12: movpsl _actual /* actual data psl MAYBE is incorrect */
419: bbs $0,_scoplp,0b /* if set scope loop on error */
420: movl $2,_ercode /* error code flag miscompare */
421: jmp *badrtn
422:
423: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
424: jmp *return /* good, return to monitor */
425:
426:
427: /* Variables */
428: .align 2
429: tloc1: .space 4
430: tloc2: .space 4
431:
432: /* end of file */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.