|
|
1.1 root 1: /* SHLQ 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 MAXPOSL,0x7fffffff
20: .set MAXNEGL,0x80000000
21: .set MAXPOSW,0x7fff
22: .set MAXNEGW,0x8000
23: .set MAXPOSB,0x7f
24: .set MAXNEGB,0x80
25: .set ZERO,0
26: .set ONES,0xffffffff
27: .set HIGH,31 /* highest interrupt priority */
28:
29: .globl _shlq
30: _shlq:
31: callf $4,_setjmp /* save context for error return */
32: movab _shlq,_stpc /* save subtest starting address */
33: movl $1,_subtst /* subtest number */
34: movl $2,_no_opr /* number of operands in use */
35: movl $32,_opr /* first operand */
36: movl $0xffffffff,_opr + 4 /* second operand */
37: 0: bicpsw $(IV|T) /* disable exceptions */
38: slq: /* SHIFT LEFT QUAD FROM MEMORY TO REGISTER */
39: movl $1,r1 /* R1 : indicate which part of the test */
40: movl $0,sloc1 /* set sloc1 */
41: movl $0xffffffff,sloc0 /* set sloc0 = 0xffffffff */
42: movl $0xffffffff,r4
43: movl $0xffffffff,r5
44: bispsw $(V|N) /* set n,v flags */
45: bicpsw $(Z|C) /* clear z,c flag */
46: /* data memory register */
47: shlq $32,sloc0,r4 /* shift left 32 and put in r4,r5 */
48: jlss error1 /* error if n flag set */
49: jvs error1 /* error if v flag set */
50: jneq error1 /* error if z flag not set */
51: jcc error1 /* error if c flag not set */
52: jmp 1f
53: error1: movpsl _actual /* actual = psl maybe is incorrect */
54: bbs $0,_scoplp,0b /* if set scope loop on error */
55: movl $2,_ercode /* error code flag failure */
56: jmp *badrtn
57: 1: cmpl r5,$0x0 /* check result */
58: jeql 1f /* if no error continue */
59: bbs $0,_scoplp,0b /* if set scope loop on error */
60: movl $1,_ercode /* error code data miscompare */
61: movl r5,_actual /* actual data */
62: movl $0,_expected /* expected data */
63: jmp *badrtn
64: 1: bicpsw $Z
65: cmpl r4,$0
66: jeql 1f /* if no error continue */
67: bbs $0,_scoplp,0b /* if set scope loop on error */
68: movl $1,_ercode /* error code data miscompare */
69: movl r4,_actual /* actual data */
70: movl $0,_expected /* expected data */
71: jmp *badrtn
72: 1: bicpsw $Z
73: cmpl $0xffffffff,sloc0 /* check if source get affected */
74: jeql 1f /* if no error continue */
75: bbs $0,_scoplp,0b /* if set scope loop on error */
76: movl $3,_ercode /* error code operand miscompare */
77: movl sloc0,_actual /* actual data */
78: movl $0xffffffff,_expected /* expected data */
79: jmp *badrtn
80: 1: bicpsw $Z
81: cmpl sloc1,$0
82: jeql s2 /* if no error continue */
83: bbs $0,_scoplp,0b /* if set scope loop on error */
84: movl $3,_ercode /* error code operand miscompare */
85: movl sloc1,_actual /* actual data */
86: movl $0,_expected /* expected data */
87: jmp *badrtn
88: /* SHIFT LEFT QUAD FROM REGISTER TO MEMORY */
89: s2:
90: bbs $0,_force_lp,0b /* if set loop on last subtest */
91: as2: callf $4,_setjmp /* save context for error return */
92: movab as2,_stpc /* save subtest starting address */
93: movl $2,_subtst /* subtest number */
94: movl $2,_no_opr /* number of operands in use */
95: movl $32,_opr /* first operand */
96: movl $0,_opr + 4 /* second operand */
97: 0: movl $0xffffffff,dloc0 /* set dloc0 = dloc1 = 0xffffffff */
98: movl dloc0,dloc1
99: movb $32,temp /* set temp = shift count */
100: bispsw $(V|N) /* set v,n flags */
101: bicpsw $(Z|C) /* clear z,c flags */
102: /* memory register memory */
103: shlq temp,r4,dloc0 /* shift r4,r5 left 32 and put in dloc */
104: jvs error2 /* error if v flag set */
105: jlss error2 /* error if n flag set */
106: jneq error2 /* error if z flag not set */
107: jcc error2 /* error if c flag not set */
108: jmp 1f
109: error2: movpsl _actual /* actual = psl maybe is incorrect */
110: bbs $0,_scoplp,0b /* if set scope loop on error */
111: movl $2,_ercode /* error code flag failure */
112: jmp *badrtn
113: 1: bicpsw $Z
114: cmpl dloc0,$0 /* check result */
115: jeql 1f /* if no error continue */
116: bbs $0,_scoplp,0b /* if set scope loop on error */
117: movl $1,_ercode /* error code data miscompare */
118: movl dloc0,_actual /* actual data */
119: movl $0,_expected /* expected data */
120: jmp *badrtn
121: 1: bicpsw $Z
122: cmpl dloc1,dloc0
123: jeql 1f /* if no error continue */
124: bbs $0,_scoplp,0b /* if set scope loop on error */
125: movl $1,_ercode /* error code data miscompare */
126: movl dloc1,_actual /* actual data */
127: movl dloc0,_expected /* expected data */
128: jmp *badrtn
129: 1: bicpsw $Z
130: cmpl r5,$0x0 /* make sure source unchanged */
131: jeql 1f /* if no error 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: 1: bicpsw $Z
138: cmpl r4,$0
139: jeql s3 /* if no error continue */
140: bbs $0,_scoplp,0b /* if set scope loop on error */
141: movl $3,_ercode /* error code operand miscompare */
142: movl r4,_actual /* actual data */
143: movl $0,_expected /* expected data */
144: jmp *badrtn
145: /* SHIFT LEFT QUAD FROM MEMORY TO MEMORY */
146: s3:
147: bbs $0,_force_lp,0b /* if set loop on last subtest */
148: as3: callf $4,_setjmp /* save context for error return */
149: movab as3,_stpc /* save subtest starting address */
150: movl $3,_subtst /* subtest number */
151: movl $2,_no_opr /* number of operands in use */
152: movl $3,_opr /* first operand */
153: movl $0x55555555,_opr + 4 /* second operand */
154: 0: movl $0x55555555,sloc0 /* set sloc0 = sloc1 = 0x55555555 */
155: movl sloc0,sloc1
156: movl $3,r3 /* set r3 = shift count */
157: bispsw $(V|Z) /* set z flags */
158: bicpsw $(C|N) /* clear c,n flags */
159: /* register memory memory */
160: shlq r3,sloc0,sloc0 /* shift and put result back in sloc0 */
161: jgeq error3 /* error if n flag not set */
162: jvs error3 /* error if v flag set */
163: jcc error3 /* error if c flags not set */
164: jeql error3 /* error if z flag still set */
165: jmp 1f
166: error3: movpsl _actual /* actual = psl maybe is incorrect */
167: bbs $0,_scoplp,0b /* if set scope loop on error */
168: movl $2,_ercode /* error code flag failure */
169: jmp *badrtn
170: 1: cmpl sloc0,$0xaaaaaaaa /* check result */
171: jeql 1f /* if no error continue */
172: bbs $0,_scoplp,0b /* if set scope loop on error */
173: movl $1,_ercode /* error code data miscompare */
174: movl sloc0,_actual /* actual data */
175: movl $0xaaaaaaaa,_expected /* expected data */
176: jmp *badrtn
177: 1: bicpsw $Z
178: cmpl sloc1,$0xaaaaaaa8
179: jeql s4 /* if no error continue */
180: bbs $0,_scoplp,0b /* if set scope loop on error */
181: movl $1,_ercode /* error code data miscompare */
182: movl sloc1,_actual /* actual data */
183: movl $0xaaaaaaa8,_expected /* expected data */
184: jmp *badrtn
185: /* SPECIAL CASES */
186: /* shift count = 0 */
187: s4:
188: bbs $0,_force_lp,0b /* if set loop on last subtest */
189: as4: callf $4,_setjmp /* save context for error return */
190: movab as4,_stpc /* save subtest starting address */
191: movl $4,_subtst /* subtest number */
192: movl $3,_no_opr /* number of operands in use */
193: movl $0,_opr /* first operand */
194: movl $0x12345678,_opr + 4 /* second operand */
195: movl $0x9abcdef0,_opr + 8 /* third operand */
196: 0: movl $0,r10 /* set r10 = r11 = 0 */
197: movl r10,r11
198: movl r11,r6 /* set r6 = shift count */
199: movl $0x12345678,r8 /* set r8 = 0x12345678 */
200: movl $0x9abcdef0,r9 /* set r9 = 0x9abcdef0 */
201: bispsw $(N|Z|V|C) /* set n,z,v,c flags */
202: /* register register register */
203: shlq r6,r8,r10 /* shift left 0 and put in r10,r11 */
204: jlss error4 /* error if n flag still set */
205: jeql error4 /* error if z flag still set */
206: jvs error4 /* error if v flag still set */
207: jcc error4 /* error if c flag not set */
208: jmp 1f
209: error4: movpsl _actual /* actual = 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: 1: cmpl $0x12345678,r10 /* check result */
214: jeql 1f /* if no error continue */
215: bbs $0,_scoplp,0b /* if set scope loop on error */
216: movl $1,_ercode /* error code data miscompare */
217: movl r10,_actual /* actual data */
218: movl $0x12345678,_expected /* expected data */
219: jmp *badrtn
220: 1: bicpsw $Z
221: cmpl $0x9abcdef0,r11
222: jeql 1f /* if no error continue */
223: bbs $0,_scoplp,0b /* if set scope loop on error */
224: movl $1,_ercode /* error code data miscompare */
225: movl r11,_actual /* actual data */
226: movl $0x9abcdef0,_expected /* expected data */
227: jmp *badrtn
228: 1: bicpsw $Z
229: cmpl r8,r10 /* make sure source unchanged */
230: jeql 1f /* if no error continue */
231: bbs $0,_scoplp,0b /* if set scope loop on error */
232: movl $3,_ercode /* error code operand miscompare */
233: movl r8,_actual /* actual data */
234: movl r10,_expected /* expected data */
235: jmp *badrtn
236: 1: bicpsw $Z
237: cmpl r9,r11
238: jeql s5 /* if no error continue */
239: bbs $0,_scoplp,0b /* if set scope loop on error */
240: movl $3,_ercode /* error code operand miscompare */
241: movl r9,_actual /* actual data */
242: movl r11,_expected /* expected data */
243: jmp *badrtn
244: /* shift count > 64 */
245: s5:
246: bbs $0,_force_lp,0b /* if set loop on last subtest */
247: as5: callf $4,_setjmp /* save context for error return */
248: movab as5,_stpc /* save subtest starting address */
249: movl $5,_subtst /* subtest number */
250: movl $3,_no_opr /* number of operands in use */
251: movl $64,_opr /* first operand */
252: movl $0x12345678,_opr + 4 /* second operand */
253: movl $0x9abcdef0,_opr + 8 /* third operand */
254: 0: movb $64,temp /* set shift count = 64 */
255: bispsw $(N|V) /* set n,v flags */
256: bicpsw $(C|Z) /* clear c,z flag */
257: /* memory register memory */
258: shlq temp,r10,sloc0
259: /* shift r10,11 left 64 and put in sloc0,sloc1 */
260: jneq error5 /* error if z flag not set */
261: jcc error5 /* error if c flags not set */
262: jlss error5 /* error if n,v flags still set */
263: jvs error5
264: jmp 1f
265: error5: movpsl _actual /* actual = psl maybe is incorrect */
266: bbs $0,_scoplp,0b /* if set scope loop on error */
267: movl $2,_ercode /* error code flag failure */
268: jmp *badrtn
269: 1: bicpsw $Z
270: cmpl sloc0,$0 /* check result */
271: jeql 1f /* if no error continue */
272: bbs $0,_scoplp,0b /* if set scope loop on error */
273: movl $1,_ercode /* error code data miscompare */
274: movl sloc0,_actual /* actual data */
275: movl $0,_expected /* expected data */
276: jmp *badrtn
277: 1: bicpsw $Z
278: cmpl sloc0,sloc1
279: jeql 1f /* if no error continue */
280: bbs $0,_scoplp,0b /* if set scope loop on error */
281: movl $1,_ercode /* error code data miscompare */
282: movl sloc0,_actual /* actual data */
283: movl sloc1,_expected /* expected data */
284: jmp *badrtn
285: 1: bicpsw $Z
286: cmpl r10,$0x12345678 /* make sure source unchanged */
287: jeql 1f /* if no error continue */
288: bbs $0,_scoplp,0b /* if set scope loop on error */
289: movl $3,_ercode /* error code operand miscompare */
290: movl r10,_actual /* actual data */
291: movl $0x12345678,_expected /* expected data */
292: jmp *badrtn
293: 1: bicpsw $Z
294: cmpl r11,$0x9abcdef0
295: jeql aldn /* if no error continue */
296: bbs $0,_scoplp,0b /* if set scope loop on error */
297: movl $3,_ercode /* error code operand miscompare */
298: movl r11,_actual /* actual data */
299: movl $0x9abcdef0,_expected /* expected data */
300: jmp *badrtn
301:
302: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
303: jmp *return
304:
305:
306: /* test data */
307:
308: .align 2 /* align on longword */
309: sloc0: .long 0
310: sloc1: .long 0
311: dloc0: .long 0
312: dloc1: .long 0
313: temp: .long 0
314:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.