|
|
1.1 root 1: /* SHRQ instruction test */
2: /* Privilege registers */
3:
4: .set IPL,8
5: .set MAPEN,9
6: .set KSP,19
7:
8: /* PSL fields */
9: .set IV,32
10: .set T,16
11: .set N,8
12: .set Z,4
13: .set V,2
14: .set C,1
15:
16: /* constants */
17: .set DISABLE,0
18: .set ENABLE,1
19: .set HIGH,31 /* highest interrupt priority */
20:
21: .globl _shrq
22: _shrq:
23: callf $4,_setjmp /* save context for error return */
24: movab _shrq,_stpc /* starting address of subtest */
25: movl $1,_subtst /* subtest number */
26: movl $3,_no_opr /* number of operands in use */
27: movl $32,_opr /* first operand */
28: movl $0,_opr + 4 /* second operand */
29: movl $0xffffffff,_opr + 8 /* third operand */
30: 0: bicpsw $(IV|T) /* disable exceptions */
31: /* */
32: srq: /* SHIFT RIGHT QUAD FROM MEMORY TO REGISTER */
33: movl $0,sloc0 /* set sloc0 */
34: movl $0xffffffff,sloc1 /* set sloc1 = 0xffffffff */
35: movl $0xffffffff,r4
36: movl $0xffffffff,r5
37: bispsw $(V|N|C) /* set n,v,c flags */
38: bicpsw $Z /* clear z flag */
39: shrq $32,sloc0,r4 /* shift right 32 and put in r4,r5 */
40: jneq error1 /* error if z flag not set */
41: jcc error1 /* error if c flag not set */
42: jvs error1 /* error if v flag set */
43: jlss error1 /* error if n flag set */
44: jmp 1f
45: error1: movpsl _actual /* actual = psl maybe incorrect */
46: bbs $0,_scoplp,0b /* if set scope loop on error */
47: movl $2,_ercode /* error code flag failure */
48: jmp *badrtn
49: 1: bicpsw $Z
50: cmpl r5,$0 /* check result */
51: jeql 1f /* if correct continue */
52: bbs $0,_scoplp,0b /* if set scope loop on error */
53: movl $1,_ercode /* error code data miscompare */
54: movl r5,_actual /* actual data */
55: movl $0,_expected /* expected data */
56: jmp *badrtn
57: 1: bicpsw $Z
58: cmpl r4,$0
59: jeql 1f /* if correct continue */
60: bbs $0,_scoplp,0b /* if set scope loop on error */
61: movl $1,_ercode /* error code data miscompare */
62: movl r4,_actual /* actual data */
63: movl $0,_expected /* expected data */
64: jmp *badrtn
65: 1: bicpsw $Z
66: cmpl $0xffffffff,sloc1 /* check if source get affected */
67: jeql 1f /* if correct continue */
68: bbs $0,_scoplp,0b /* if set scope loop on error */
69: movl $3,_ercode /* error code operand miscompare */
70: movl sloc1,_actual /* actual data */
71: movl $0xffffffff,_expected /* expected data */
72: jmp *badrtn
73: 1: bicpsw $Z
74: cmpl sloc0,$0
75: jeql s2 /* if correct continue */
76: bbs $0,_scoplp,0b /* if set scope loop on error */
77: movl $3,_ercode /* error code operand miscompare */
78: movl sloc0,_actual /* actual data */
79: movl $0,_expected /* expected data */
80: jmp *badrtn
81: /* SHIFT RIGHT QUAD FROM REGISTER TO MEMORY */
82: s2:
83: bbs $0,_force_lp,0b /* if set loop on last subtest */
84: as2: callf $4,_setjmp /* save context for error return */
85: movab as2,_stpc /* starting address of subtest */
86: movl $2,_subtst /* subtest number */
87: movl $3,_no_opr /* number of operands in use */
88: movl $30,_opr /* first operand */
89: movl $0xffffffff,_opr + 4 /* second operand */
90: movl $0xffffffff,_opr + 8 /* third operand */
91: 0: movl $0xffffffff,dloc0 /* set dloc0 = dloc1 = 0xffffffff */
92: movl dloc0,dloc1
93: movb $30,temp /* set temp = shift count */
94: bispsw $(N|V|C) /* set n,v,c flags */
95: bicpsw $Z /* clear z flag */
96: shrq temp,r4,dloc0 /* shift r4,r5 left 32 and put in dloc */
97: jneq error2 /* error if z flag not set */
98: jcc error2 /* error if c flag not set */
99: jvs error2 /* error if v flag set */
100: jlss error2 /* error if n flag set */
101: jmp 1f
102: error2: movpsl _actual /* actual = psl maybe incorrect */
103: bbs $0,_scoplp,0b /* if set scope loop on error */
104: movl $2,_ercode /* error code flag failure */
105: jmp *badrtn
106: 1: cmpl dloc0,$0 /* check result */
107: jeql 1f /* if correct continue */
108: bbs $0,_scoplp,0b /* if set scope loop on error */
109: movl $1,_ercode /* error code data miscompare */
110: movl dloc0,_actual /* actual data */
111: movl $0,_expected /* expected data */
112: jmp *badrtn
113: 1: bicpsw $Z
114: cmpl dloc1,dloc0
115: jeql 1f /* if correct continue */
116: bbs $0,_scoplp,0b /* if set scope loop on error */
117: movl $1,_ercode /* error code data miscompare */
118: movl dloc1,_actual /* actual data */
119: movl dloc0,_expected /* expected data */
120: jmp *badrtn
121: 1: bicpsw $Z
122: cmpl r4,$0 /* make sure source unchanged */
123: jeql 1f /* if correct continue */
124: bbs $0,_scoplp,0b /* if set scope loop on error */
125: movl $3,_ercode /* error code operand miscompare */
126: movl r4,_actual /* actual data */
127: movl $0,_expected /* expected data */
128: jmp *badrtn
129: 1: bicpsw $Z
130: cmpl r5,$0
131: jeql s3 /* if correct continue */
132: bbs $0,_scoplp,0b /* if set scope loop on error */
133: movl $3,_ercode /* error code operand miscompare */
134: movl r5,_actual /* actual data */
135: movl $0,_expected /* expected data */
136: jmp *badrtn
137: /* SHIFT RIGHT QUAD FROM MEMORY TO MEMORY */
138: s3:
139: bbs $0,_force_lp,0b /* if set loop on last subtest */
140: as3: callf $4,_setjmp /* save context for error return */
141: movab as3,_stpc /* starting address of subtest */
142: movl $3,_subtst /* subtest number */
143: movl $3,_no_opr /* number of operands in use */
144: movl $3,_opr /* first operand */
145: movl $0x55555555,_opr + 4 /* second operand */
146: movl $0x55555555,_opr + 8 /* third operand */
147: 0: movl $0x55555555,sloc0 /* set sloc0 = sloc1 = 0x55555555 */
148: movl sloc0,sloc1
149: movb $3,r3 /* set r3 = shift count */
150: bispsw $(Z|V|C) /* set v,z,c flags */
151: bicpsw $N
152: shrq r3,sloc0,sloc0 /* shift and put result back in sloc0 */
153: jlss error3 /* error if n flag still set */
154: jvs error3 /* error if v flag still set */
155: jeql error3 /* error if z flag still set */
156: jcc error3 /* error if c flag not set */
157: jmp 1f
158: error3: movpsl _actual /* actual = psl maybe incorrect */
159: bbs $0,_scoplp,0b /* if set scope loop on error */
160: movl $2,_ercode /* error code flag failure */
161: jmp *badrtn
162: 1: cmpl sloc0,$0xaaaaaaa /* check result */
163: jeql 1f /* if correct continue */
164: bbs $0,_scoplp,0b /* if set scope loop on error */
165: movl $1,_ercode /* error code data miscompare */
166: movl sloc0,_actual /* actual data */
167: movl $0xaaaaaaaa,_expected /* expected data */
168: jmp *badrtn
169: 1: bicpsw $Z
170: cmpl sloc1,$0xaaaaaaaa
171: jeql s4 /* if correct continue */
172: bbs $0,_scoplp,0b /* if set scope loop on error */
173: movl $1,_ercode /* error code data miscompare */
174: movl sloc1,_actual /* actual data */
175: movl $0xaaaaaaaa,_expected /* expected data */
176: jmp *badrtn
177: /* SPECIAL CASES */
178: /* shift count = 0 */
179: s4:
180: bbs $0,_force_lp,0b /* if set loop on last subtest */
181: as4: callf $4,_setjmp /* save context for error return */
182: movab as4,_stpc /* starting address of subtest */
183: movl $4,_subtst /* subtest number */
184: movl $3,_no_opr /* number of operands in use */
185: movl $0,_opr /* first operand */
186: movl $0xfedcba98,_opr + 4 /* second operand */
187: movl $0x76543210,_opr + 8 /* third operand */
188: 0: movl $0,r10 /* set r10 = r11 = 0 */
189: movl r10,r11
190: movl r11,r6 /* set r6 = shift count */
191: movl $0xfedcba98,r4 /* set r4 = 0xfedcba98 */
192: movl $0x76543210,r5 /* set r8 = 0x76543210 */
193: bispsw $(C|Z|V) /* set c,z,v flags */
194: bicpsw $N
195: shrq r6,r4,r10 /* shift right 0 and put in r10,r11 */
196: jgeq error4 /* error if n flag not set */
197: jcc error4 /* error if c flag not set */
198: jeql error4 /* error if z flag still set */
199: jvs error4 /* error if v flag still set */
200: jmp 1f
201: error4: movpsl _actual /* actual = psl maybe incorrect */
202: bbs $0,_scoplp,0b /* if set scope loop on error */
203: movl $2,_ercode /* error code flag failure */
204: jmp *badrtn
205: 1: cmpl $0xfedcba98,r10 /* check result */
206: jeql 1f /* if correct continue */
207: bbs $0,_scoplp,0b /* if set scope loop on error */
208: movl $1,_ercode /* error code data miscompare */
209: movl r10,_actual /* actual data */
210: movl $0xfedcba98,_expected /* expected data */
211: jmp *badrtn
212: 1: bicpsw $Z
213: cmpl $0x76543210,r11
214: jeql 1f /* if correct continue */
215: bbs $0,_scoplp,0b /* if set scope loop on error */
216: movl $1,_ercode /* error code data miscompare */
217: movl r11,_actual /* actual data */
218: movl $0x76543210,_expected /* expected data */
219: jmp *badrtn
220: 1: bicpsw $Z
221: cmpl r4,r10 /* make sure source unchanged */
222: jeql 1f /* if correct continue */
223: bbs $0,_scoplp,0b /* if set scope loop on error */
224: movl $3,_ercode /* error code operand miscompare */
225: movl r4,_actual /* actual data */
226: movl r10,_expected /* expected data */
227: jmp *badrtn
228: 1: bicpsw $Z
229: cmpl r5,r11
230: jeql s5 /* if correct continue */
231: bbs $0,_scoplp,0b /* if set scope loop on error */
232: movl $3,_ercode /* error code operand miscompare */
233: movl r5,_actual /* actual data */
234: movl r11,_expected /* expected data */
235: jmp *badrtn
236: /* shift count = 64 */
237: s5:
238: bbs $0,_force_lp,0b /* if set loop on last subtest */
239: as5: callf $4,_setjmp /* save context for error return */
240: movab as5,_stpc /* starting address of subtest */
241: movl $5,_subtst /* subtest number */
242: movl $3,_no_opr /* number of operands in use */
243: movl $64,_opr /* first operand */
244: movl $0xfedcba98,_opr + 4 /* second operand */
245: movl $0x76543210,_opr + 8 /* third operand */
246: 0: movl $0xffffffff,r4
247: movl r4,r5
248: movb $64,temp /* set shift count = 64 */
249: bispsw $(N|V|C) /* set n,c,v flags */
250: bicpsw $Z /* clear z flag */
251: shrq temp,r10,r4 /* shift r10,r11 left 64 and put in r4,r5*/
252: jneq error5 /* error if z flag not set */
253: jcc error5 /* error if c flag not set */
254: jlss error5 /* error if v,n flag set */
255: jvs error5
256: jmp 1f
257: error5: movpsl _actual /* actual = psl maybe incorrect */
258: bbs $0,_scoplp,0b /* if set scope loop on error */
259: movl $2,_ercode /* error code flag failure */
260: jmp *badrtn
261: 1: bicpsw $Z
262: cmpl r4,$0 /* check result */
263: jeql 1f /* if correct continue */
264: bbs $0,_scoplp,0b /* if set scope loop on error */
265: movl $1,_ercode /* error code data miscompare */
266: movl r4,_actual /* actual data */
267: movl $0,_expected /* expected data */
268: jmp *badrtn
269: 1: bicpsw $Z
270: cmpl r4,r5
271: jeql 1f /* if correct continue */
272: bbs $0,_scoplp,0b /* if set scope loop on error */
273: movl $1,_ercode /* error code data miscompare */
274: movl r5,_actual /* actual data */
275: movl r4,_expected /* expected data */
276: jmp *badrtn
277: 1: bicpsw $Z
278: cmpl r10,$0xfedcba98 /* make sure source unchanged */
279: jeql 1f /* if correct continue */
280: bbs $0,_scoplp,0b /* if set scope loop on error */
281: movl $3,_ercode /* error code operand miscompare */
282: movl r10,_actual /* actual data */
283: movl $0xfedcba98,_expected /* expected data */
284: jmp *badrtn
285: 1: bicpsw $Z
286: cmpl r11,$0x76543210
287: jeql s6 /* if correct continue */
288: bbs $0,_scoplp,0b /* if set scope loop on error */
289: movl $3,_ercode /* error code operand miscompare */
290: movl r11,_actual /* actual data */
291: movl $0x76543210,_expected /* expected data */
292: jmp *badrtn
293:
294: /* SHIFT RIGHT QUAD FROM DATA TO MEMORY */
295: s6:
296: bbs $0,_force_lp,0b /* if set loop on last subtest */
297: as6: callf $4,_setjmp /* save context for error return */
298: movab as6,_stpc /* starting address of subtest */
299: movl $6,_subtst /* subtest number */
300: movl $3,_no_opr /* number of operands in use */
301: movl $32,_opr /* first operand */
302: movl $0xffffffff,_opr + 4 /* second operand */
303: movl $0,_opr + 8 /* third operand */
304: 0: movl $0xffffffff,dloc0 /* set dloc0 = dloc1 = 0xffffffff */
305: movl dloc0,dloc1
306: movb $32,temp /* set temp = shift count */
307: bispsw $(N|V|C) /* set n,v,c flags */
308: bicpsw $Z /* clear z flag */
309: shrq temp,$0xffffffff,dloc0 /* shift data left 32 and put in dloc */
310: jeql error6 /* error if z flag set */
311: jcc error6 /* error if c flag not set */
312: jvs error6 /* error if v flag set */
313: jlss error6 /* error if n flag set */
314: jmp 1f
315: error6: movpsl _actual /* actual = psl maybe incorrect */
316: bbs $0,_scoplp,0b /* if set scope loop on error */
317: movl $2,_ercode /* error code flag failure */
318: jmp *badrtn
319: 1: cmpl dloc0,$0 /* check result */
320: jeql 1f /* if correct continue */
321: bbs $0,_scoplp,0b /* if set scope loop on error */
322: movl $1,_ercode /* error code data miscompare */
323: movl dloc0,_actual /* actual data */
324: movl $0,_expected /* expected data */
325: jmp *badrtn
326: 1: bicpsw $Z
327: cmpl dloc1,$0xffffffff
328: jeql aldn /* if correct continue */
329: bbs $0,_scoplp,0b /* if set scope loop on error */
330: movl $1,_ercode /* error code data miscompare */
331: movl dloc1,_actual /* actual data */
332: movl $0xffffffff,_expected /* expected data */
333: jmp *badrtn
334:
335:
336: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
337: jmp *return
338:
339:
340: /* test data */
341: .align 2 /* align on longword */
342: sloc0: .long 0
343: sloc1: .long 0
344: dloc0: .long 0
345: dloc1: .long 0
346: temp: .long 0
347:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.