|
|
1.1 root 1:
2:
3:
4: /* SUBW2 (subtract word2) test */
5: /* */
6: /*Test name = subw2 */
7: /*Description = */
8: /* This test checks 'subw2' instruction as follows: */
9: /*sub dif result N Z V C (flags) */
10: /*___ ___ ______ _______________ */
11: /*0x7f 0x7f 0x00 0 1 0 1 */
12: /*0xff 0x01 0x02 0 0 0 0 */
13: /*0x01 0xff 0xfe 1 0 0 1 */
14: /*0x81 0x7f 0xfe 1 0 1 0 */
15: /*0x81 0x80 0xff 1 0 0 0 */
16: /*0x7f 0x81 0x02 0 0 1 1 */
17: /* */
18: /* */
19:
20: /* */
21: /* */
22: /* constants definition for 'subx' tests. */
23: /* */
24:
25: .set SB1,0x11111f7f/*+127, highest +ve number, byte */
26: .set SW1,0x111f7fff
27: .set SL1,0x7fffffff
28: .set MB1,0x11111f7f/* +127 */
29: .set MW1,0x111f7fff
30: .set ML1,SL1
31: .set RB1,0x11111f00
32: .set RW1,0x111f0000
33: .set RL1,0x00000000
34: .set SB2,0xff /* -1 */
35: .set SW2,0xffff
36: .set SL2,0xffffffff
37: .set MB2,0x01 /* +1 */
38: .set MW2,0x0001
39: .set ML2,0X00000001
40: .set RB2,0x00000002 /* +2 */
41: .set RW2,RB2
42: .set RL2,RB2
43: .set SB3,MB2 /* +1 */
44: .set SW3,MW2
45: .set SL3,ML2
46: .set MB3,0xff /* -1 */
47: .set MW3,0xffff
48: .set ML3,0xffffffff
49: .set RB3,0x000000fe /* -2 */
50: .set RW3,0x0000fffe
51: .set RL3,0Xfffffffe
52: .set SB4,0x81 /* -127 */
53: .set SW4,0x8001
54: .set SL4,0x80000001
55: .set MB4,0x7f /* 127 */
56: .set MW4,0x7fff
57: .set ML4,0x7fffffff
58: .set RB4,0xfe /* -2 */
59: .set RW4,0xfffe
60: .set RL4,0xfffffffe
61: .set SB5,SB4 /* -127 */
62: .set SW5,SW4
63: .set SL5,SL4
64: .set MB5,0x80 /* -128 */
65: .set MW5,0x8000
66: .set ML5,0x80000000
67: .set RB5,0xff /* -1 */
68: .set RW5,0xffff
69: .set RL5,0xffffffff
70: .set SB6,0x7f/* +127 */
71: .set SW6,0x7fff
72: .set SL6,0x7fffffff
73: .set MB6,SB4 /* -127 */
74: .set MW6,SW4
75: .set ML6,SL4
76: .set RB6,0x02
77: .set RW6,0x02
78: .set RL6,0x02
79:
80: .set INITB,0x11111f55/* initialization values for 3 operand */
81: .set INITW,0x111f5555
82: .set INITL,0X55555555
83:
84: /* */
85: /* Syst.s - Constants */
86: /* */
87: .set IPL,8
88: .set HIGH,31
89: .set ZERO,0
90: .set ONES,0xffffffff
91: .set N,8
92: .set Z,4
93: .set V,2
94: .set C,1
95: .set T,16
96: .set IV,32
97: .set FU,64
98: .set DV,128
99: .set PSWMASK,0x003f
100:
101: .globl _subw2
102: _subw2:
103:
104: callf $4,_setjmp /* save context for error return */
105: movab _subw2,_stpc /* starting address of subtest */
106: movl $1,_subtst /* subtest number */
107: movl $2,_no_opr /* number of operands in use */
108: movl $SW1,_opr /* first operand */
109: movl $MW1,_opr + 4 /* second operand */
110: 0: bicpsw $PSWMASK /*PSW = 0 */
111: movl $SW1,sub /*first operand */
112: movl $MW1,dif /*second operand */
113: bicpsw $PSWMASK /*PSW = 0 */
114: bispsw $(N|V|C) /* these flags ON */
115: subw2 sub+2,dif+2 /* try 'sub' instruction mem to mem */
116: jlss e1 /*error if N = 1 */
117: jneq e1 /*error if Z = 0 */
118: jvs e1 /*error if V = 1 */
119: jcc e1 /*error if C = 0 */
120: jmp 1f
121: e1: movpsl _actual /* actual = psl maybe incorrect */
122: bbs $0,_scoplp,0b /* if set scope loop on error */
123: movl $2,_ercode /* error code flag failure */
124: jmp *badrtn
125: 1: bicpsw $Z
126: cmpl $RW1,dif /*dif = expected ? */
127: jeql sw2 /*if no error then continue */
128: bbs $0,_scoplp,0b /* if set scope loop on error */
129: movl $1,_ercode /* error code data miscompare */
130: movl dif,_actual /* actual data */
131: movl $RW1,_expected /* expected data */
132: jmp *badrtn
133:
134: sw2:
135: bbs $0,_force_lp,0b /* if set loop on last subtest */
136: as2: callf $4,_setjmp /* save context for error return */
137: movab as2,_stpc /* starting address of subtest */
138: movl $2,_subtst /* subtest number */
139: movl $2,_no_opr /* number of operands in use */
140: movl $SW2,_opr /* first operand */
141: movl $MW2,_opr + 4 /* second operand */
142: 0: bicpsw $PSWMASK /*PSW = 0 */
143: movl $SW2,sub /*first operand */
144: movl $MW2,r5 /*second operand */
145: bicpsw $PSWMASK /*PSW = 0 */
146: bispsw $(N|Z|V) /* these flags ON */
147: subw2 sub+2,r5 /* try 'sub' instruction mem to reg */
148: jlss e2 /*error if N = 1 */
149: jeql e2 /*error if Z = 1 */
150: jvs e2 /*error if V = 1 */
151: jcs e2 /*error if C = 1 */
152: jmp 1f
153: e2: movpsl _actual /* actual = psl maybe incorrect */
154: bbs $0,_scoplp,0b /* if set scope loop on error */
155: movl $2,_ercode /* error code flag failure */
156: jmp *badrtn
157: 1: bicpsw $Z
158: cmpl $RW2,r5 /*dif = expected ? */
159: jeql sw3 /*if no error then continue */
160: bbs $0,_scoplp,0b /* if set scope loop on error */
161: movl $1,_ercode /* error code data miscompare */
162: movl r5,_actual /* actual data */
163: movl $RW2,_expected /* expected data */
164: jmp *badrtn
165:
166:
167:
168: sw3:
169: bbs $0,_force_lp,0b /* if set loop on last subtest */
170: as3: callf $4,_setjmp /* save context for error return */
171: movab as3,_stpc /* starting address of subtest */
172: movl $3,_subtst /* subtest number */
173: movl $2,_no_opr /* number of operands in use */
174: movl $SW3,_opr /* first operand */
175: movl $MW3,_opr + 4 /* second operand */
176: 0: bicpsw $PSWMASK /*PSW = 0 */
177: movl $SW3,r5 /*first operand */
178: movl $MW3,dif /*second operand */
179: bicpsw $PSWMASK /*PSW = 0 */
180: bispsw $(V|Z|C) /* these flags ON */
181: subw2 r5,dif+2 /* try 'sub' instruction reg to mem */
182: jgeq e3 /*error if N = 0 */
183: jeql e3 /*error if Z = 1 */
184: jvs e3 /*error if V = 1 */
185: jcc e3 /*error if C = 0 */
186: jmp 1f
187: e3: movpsl _actual /* actual = psl maybe incorrect */
188: bbs $0,_scoplp,0b /* if set scope loop on error */
189: movl $2,_ercode /* error code flag failure */
190: jmp *badrtn
191: 1: bicpsw $Z
192: cmpl $RW3,dif /*dif = expected ? */
193: jeql sw4 /*if no error then continue */
194: bbs $0,_scoplp,0b /* if set scope loop on error */
195: movl $1,_ercode /* error code data miscompare */
196: movl dif,_actual /* actual data */
197: movl $RW3,_expected /* expected data */
198: jmp *badrtn
199:
200: sw4:
201: bbs $0,_force_lp,0b /* if set loop on last subtest */
202: as4: callf $4,_setjmp /* save context for error return */
203: movab as4,_stpc /* starting address of subtest */
204: movl $4,_subtst /* subtest number */
205: movl $2,_no_opr /* number of operands in use */
206: movl $SW4,_opr /* first operand */
207: movl $MW4,_opr + 4 /* second operand */
208: 0: bicpsw $PSWMASK /*PSW = 0 */
209: movl $SW4,sub /*first operand */
210: movl $MW4,dif /*second operand */
211: bicpsw $PSWMASK /*PSW = 0 */
212: bispsw $Z /* these flags ON */
213: subw2 $SW4,dif+2 /* try 'sub' instruction data to mem */
214: jgeq e4 /*error if N = 0 */
215: jeql e4 /*error if Z = 1 */
216: jvc e4 /*error if V = 1 */
217: jcs e4 /*error if C = 1 */
218: jmp 1f
219: e4: movpsl _actual /* actual = psl maybe incorrect */
220: bbs $0,_scoplp,0b /* if set scope loop on error */
221: movl $2,_ercode /* error code flag failure */
222: jmp *badrtn
223: 1: bicpsw $Z
224: cmpl $RW4,dif /*dif = expected ? */
225: jeql sw5 /*if no error then continue */
226: bbs $0,_scoplp,0b /* if set scope loop on error */
227: movl $1,_ercode /* error code data miscompare */
228: movl dif,_actual /* actual data */
229: movl $RW4,_expected /* expected data */
230: jmp *badrtn
231:
232:
233:
234: sw5:
235: bbs $0,_force_lp,0b /* if set loop on last subtest */
236: as5: callf $4,_setjmp /* save context for error return */
237: movab as5,_stpc /* starting address of subtest */
238: movl $5,_subtst /* subtest number */
239: movl $2,_no_opr /* number of operands in use */
240: movl $SW5,_opr /* first operand */
241: movl $MW5,_opr + 4 /* second operand */
242: 0: bicpsw $PSWMASK /*PSW = 0 */
243: movl $MW5,r5 /*second operand */
244: bicpsw $PSWMASK /*PSW = 0 */
245: bispsw $(V|Z) /* these flags ON */
246: subw2 $SW5,r5 /* try 'sub' instruction data to reg */
247: jgeq e5 /*error if N = 0 */
248: jeql e5 /*error if Z = 1 */
249: jvs e5 /*error if V = 1 */
250: jcs e5 /*error if C = 1 */
251: jmp 1f
252: e5: movpsl _actual /* actual = psl maybe incorrect */
253: bbs $0,_scoplp,0b /* if set scope loop on error */
254: movl $2,_ercode /* error code flag failure */
255: jmp *badrtn
256: 1: bicpsw $Z
257: cmpl $RL5,r5 /*dif = expected ? */
258: jeql sw6 /*if no error then continue */
259: bbs $0,_scoplp,0b /* if set scope loop on error */
260: movl $1,_ercode /* error code data miscompare */
261: movl r5,_actual /* actual data */
262: movl $RL5,_expected /* expected data */
263: jmp *badrtn
264:
265:
266:
267: sw6:
268: bbs $0,_force_lp,0b /* if set loop on last subtest */
269: as6: callf $4,_setjmp /* save context for error return */
270: movab as6,_stpc /* starting address of subtest */
271: movl $6,_subtst /* subtest number */
272: movl $2,_no_opr /* number of operands in use */
273: movl $SW6,_opr /* first operand */
274: movl $MW6,_opr + 4 /* second operand */
275: 0: bicpsw $PSWMASK /*PSW = 0 */
276: movl $SW6,r5 /*first operand */
277: movl $MW6,r6 /*second operand */
278: bicpsw $PSWMASK /*PSW = 0 */
279: bispsw $(Z|C|N) /* these flags ON */
280: subw2 r5,r6 /* try 'sub' instruction reg to reg */
281: jlss e6 /*error if N = 1 */
282: jeql e6 /*error if Z = 1 */
283: jvc e6 /*error if V = 1 */
284: jcc e6 /*error if C = 0 */
285: jmp 1f
286: e6: movpsl _actual /* actual = psl maybe incorrect */
287: bbs $0,_scoplp,0b /* if set scope loop on error */
288: movl $2,_ercode /* error code flag failure */
289: jmp *badrtn
290: 1: bicpsw $Z
291: cmpl $RW6,r6 /*dif = expected ? */
292: jeql aldn /*if no error then continue */
293: bbs $0,_scoplp,0b /* if set scope loop on error */
294: movl $1,_ercode /* error code data miscompare */
295: movl r6,_actual /* actual data */
296: movl $RW6,_expected /* expected data */
297: jmp *badrtn
298:
299:
300: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
301: jmp *return
302:
303: /* */
304: /* Variables */
305: /* */
306: .align 2
307: min: .space 4
308: dif: .space 4
309: sub: .space 4
310:
311: /* End of file */
312:
313:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.