|
|
1.1 root 1: /* SHLL 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 _shiftll
22: _shiftll:
23: callf $4,_setjmp /* save context for error return */
24: movab _shiftll,_stpc /* save starting address of subtest */
25: movl $1,_subtst /* subtest number */
26: movl $2,_no_opr /* number of operands in use */
27: movl $1,_opr /* first operand */
28: movl $0x55555555,_opr + 4 /* second operand */
29: 0: bicpsw $(IV|T) /* disable exceptions */
30: shftl: /* SHIFT LEFT LONG FROM MEMORY TO REGISTER */
31: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */
32: movl $0xaaaaaaaa,r4 /* set r4 = 0xaaaaaaaa */
33: bispsw $(Z|V) /* set z,v flags */
34: bicpsw $(N|C) /* clear n,c flag */
35: /* data memory register */
36: shll $1,srcloc,r3 /* shift left 1 and put in r3 */
37: jgeq error1 /* error if n flag not set */
38: jcc error1 /* error if c flag not set */
39: jeql error1 /* error if z flag still set */
40: jvs error1 /* error if v flag still set */
41: jmp 1f
42: error1: movpsl _actual /* actual = psl MAYBE */
43: bbs $0,_scoplp,0b /* if set scope loop on error */
44: movl $2,_ercode /* error code flag failure */
45: jmp *badrtn
46: 1: cmpl r3,r4 /* check result */
47: jeql 1f /* no error then continue */
48: bbs $0,_scoplp,0b /* if set scope loop on error */
49: movl $1,_ercode /* error code data miscompare */
50: movl r3,_actual /* actual data */
51: movl r4,_expected /* expected data */
52: jmp *badrtn
53: 1: bicpsw $Z
54: cmpl $0x55555555,srcloc /* check if source get affected */
55: jeql s2 /* no error then continue */
56: bbs $0,_scoplp,0b /* if set scope loop on error */
57: movl $3,_ercode /* error code operand miscompare */
58: movl srcloc,_actual /* actual data */
59: movl $0x55555555,_expected /* expected data */
60: jmp *badrtn
61: /* SHIFT LEFT LONG FROM REGISTER TO MEMORY */
62: s2:
63: bbs $0,_force_lp,0b /* if set loop on last subtest */
64: as2: callf $4,_setjmp /* save context for error return */
65: movab as2,_stpc /* save starting address of subtest */
66: movl $2,_subtst /* subtest number */
67: movl $2,_no_opr /* number of operands in use */
68: movl $1,_opr /* first operand */
69: movl r3,_opr + 4 /* second operand */
70: 0: movb $1,temp /* set temp = shift count */
71: bispsw $(N|Z|V) /* set n,z,v flags */
72: bicpsw $C /* clear C flag */
73: /* memory reg memory */
74: shll temp,r3,dstloc /* shift r3 left 1 and put in dstloc */
75: jlss error2 /* error if n,z,v flag still set */
76: jeql error2
77: jvs error2
78: jcc error2 /* error if c flag not set */
79: jmp 1f
80: error2: movpsl _actual /* actual = psl MAYBE */
81: bbs $0,_scoplp,0b /* if set scope loop on error */
82: movl $2,_ercode /* error code flag failure */
83: jmp *badrtn
84: 1: cmpl dstloc,$0x55555554 /* check result */
85: jeql 1f /* no error then continue */
86: bbs $0,_scoplp,0b /* if set scope loop on error */
87: movl $1,_ercode /* error code data miscompare */
88: movl dstloc,_actual /* actual data */
89: movl $0x55555554,_expected /* expected data */
90: jmp *badrtn
91: 1: bicpsw $Z
92: cmpl r3,$0xaaaaaaaa /* make sure source unchanged */
93: jeql s3 /* no error then continue */
94: bbs $0,_scoplp,0b /* if set scope loop on error */
95: movl $3,_ercode /* error code operand miscompare */
96: movl r3,_actual /* actual data */
97: movl $0xaaaaaaaa,_expected /* expected data */
98: jmp *badrtn
99: /* SHIFT LEFT LONG FROM MEMORY TO MEMORY */
100: s3:
101: bbs $0,_force_lp,0b /* if set loop on last subtest */
102: as3: callf $4,_setjmp /* save context for error return */
103: movab as3,_stpc /* save starting address of subtest */
104: movl $3,_subtst /* subtest number */
105: movl $2,_no_opr /* number of operands in use */
106: movl $4,_opr /* first operand */
107: movl srcloc,_opr + 4 /* second operand */
108: 0: movl $4,r3 /* set r3 = shift count */
109: bispsw $(N|Z|V) /* set n,z,v flags */
110: bicpsw $C /* clear C flag */
111: /* reg memory memory */
112: shll r3,srcloc,srcloc /* shift and put result back in srcloc */
113: jlss error3 /* error if n flag still set */
114: jeql error3 /* error if z flag still set */
115: jvs error3
116: jcc error3 /* error if c flags not set */
117: jmp 1f
118: error3: movpsl _actual /* actual = psl MAYBE */
119: bbs $0,_scoplp,0b /* if set scope loop on error */
120: movl $2,_ercode /* error code flag failure */
121: jmp *badrtn
122: 1: cmpl srcloc,$0x55555550 /* check result */
123: jeql s4 /* no error then continue */
124: bbs $0,_scoplp,0b /* if set scope loop on error */
125: movl $1,_ercode /* error code data miscompare */
126: movl srcloc,_actual /* actual data */
127: movl $0x55555550,_expected /* expected data */
128: jmp *badrtn
129: /* SPECIAL CASES */
130: /* shift count = 0 */
131: s4:
132: bbs $0,_force_lp,0b /* if set loop on last subtest */
133: as4: callf $4,_setjmp /* save context for error return */
134: movab as4,_stpc /* save starting address of subtest */
135: movl $4,_subtst /* subtest number */
136: movl $2,_no_opr /* number of operands in use */
137: movl $0,_opr /* first operand */
138: movl $0x55555555,_opr + 4 /* second operand */
139: 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */
140: bispsw $(N|Z|V) /* set n,z,v flags */
141: bicpsw $C /* clear C flag */
142: shll $0,srcloc,r3 /* shift left 0 and put in r3 */
143: jlss error4 /* error if n flag still set */
144: jeql error4 /* error if z flag still set */
145: jvs error4 /* error if v flag still set */
146: jcc error4 /* error if c flag not set */
147: jmp 1f
148: error4: movpsl _actual /* actual = psl MAYBE */
149: bbs $0,_scoplp,0b /* if set scope loop on error */
150: movl $2,_ercode /* error code flag failure */
151: jmp *badrtn
152: 1: cmpl $0x55555555,r3 /* check result */
153: jeql 1f /* no error then continue */
154: bbs $0,_scoplp,0b /* if set scope loop on error */
155: movl $1,_ercode /* error code data miscompare */
156: movl r3,_actual /* actual data */
157: movl $0x55555555,_expected /* expected data */
158: jmp *badrtn
159: 1: bicpsw $Z
160: cmpl $0x55555555,srcloc /* check if source get affected */
161: jeql s5 /* no error then continue */
162: bbs $0,_scoplp,0b /* if set scope loop on error */
163: movl $3,_ercode /* error code operand miscompare */
164: movl srcloc,_actual /* actual data */
165: movl $0x55555555,_expected /* expected data */
166: jmp *badrtn
167: /* shift count > 32 */
168: s5:
169: bbs $0,_force_lp,0b /* if set loop on last subtest */
170: as5: callf $4,_setjmp /* save context for error return */
171: movab as5,_stpc /* save starting address of subtest */
172: movl $5,_subtst /* subtest number */
173: movl $2,_no_opr /* number of operands in use */
174: movl $0,_opr /* first operand */
175: movl $0x55555555,_opr + 4 /* second operand */
176: 0: movb $33,temp /* set shift count = 33 */
177: bispsw $(N|C) /* set n,c flags */
178: bicpsw $(V|Z) /* clear z,v flag */
179: shll temp,r3,r5 /* shift r3 left 33 and put in r5 */
180: jlss error5 /* error if n flag still set */
181: jneq error5 /* error if z flag not set */
182: jvs error5
183: jcc error5 /* error if c flags not set */
184: jmp 1f
185: error5: movpsl _actual /* actual = psl MAYBE */
186: bbs $0,_scoplp,0b /* if set scope loop on error */
187: movl $2,_ercode /* error code flag failure */
188: jmp *badrtn
189: 1: bicpsw $Z
190: cmpl r5,$0 /* check result */
191: jeql 1f /* no error then continue */
192: bbs $0,_scoplp,0b /* if set scope loop on error */
193: movl $1,_ercode /* error code data miscompare */
194: movl r5,_actual /* actual data */
195: movl $0,_expected /* expected data */
196: jmp *badrtn
197: 1: bicpsw $Z
198: cmpl r3,$0x55555555 /* make sure source unchanged */
199: jeql s6 /* no error then continue */
200: bbs $0,_scoplp,0b /* if set scope loop on error */
201: movl $3,_ercode /* error code operand miscompare */
202: movl r3,_actual /* actual data */
203: movl $0x55555555,_expected /* expected data */
204: jmp *badrtn
205:
206: s6:
207: bbs $0,_force_lp,0b /* if set loop on last subtest */
208: as6: callf $4,_setjmp /* save context for error return */
209: movab as6,_stpc /* save starting address of subtest */
210: movl $6,_subtst /* subtest number */
211: movl $2,_no_opr /* number of operands in use */
212: movl $32,_opr /* first operand */
213: movl $0xffffffff,_opr + 4 /* second operand */
214: 0: movb $32,r6 /* set r6 = shift count */
215: movl $0xffffffff,srcloc /* set srcloc = 0xffffffff */
216: bispsw $(N|C|V) /* set n,c,v flags */
217: bicpsw $Z /* clear z flag */
218: shll r6,srcloc,r3 /* shift left 32 and put in r3 */
219: jlss error6 /* error if n flag set */
220: jvs error6 /* error if v flag set */
221: jneq error6 /* error if z flag not set */
222: jcc error6 /* error if c flag not set */
223: jmp 1f
224: error6: movpsl _actual /* actual = psl MAYBE */
225: bbs $0,_scoplp,0b /* if set scope loop on error */
226: movl $2,_ercode /* error code flag failure */
227: jmp *badrtn
228: 1: bicpsw $Z
229: cmpl r3,$0 /* check result */
230: jeql 1f /* no error then continue */
231: bbs $0,_scoplp,0b /* if set scope loop on error */
232: movl $1,_ercode /* error code data miscompare */
233: movl r3,_actual /* actual data */
234: movl $0,_expected /* expected data */
235: jmp *badrtn
236: 1: bicpsw $Z
237: cmpl $0xffffffff,srcloc /* check if source get affected */
238: jeql aldn /* no error then continue */
239: bbs $0,_scoplp,0b /* if set scope loop on error */
240: movl $3,_ercode /* error code operand miscompare */
241: movl srcloc,_actual /* actual data */
242: movl $0xffffffff,_expected /* expected data */
243: jmp *badrtn
244:
245:
246: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
247: jmp *return
248:
249:
250: /* test data */
251: .align 2
252: srcloc: .long 0
253: dstloc: .long 0
254: temp: .long 0
255:
256:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.