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