|
|
1.1 root 1: /* SHAL instruction test */
2: # R2 = error code
3: # 1 : error in flags
4: # 2 : result is not as expected
5: # 3 : source 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 _shiftal
25: _shiftal:
26: callf $4,_setjmp /* save context for error return */
27: movab _shiftal,_stpc /* save starting address of subtest */
28: movl $1,_subtst /* subtst 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: shftl: /* SHIFT LEFT LONG FROM MEMORY TO REGISTER */
35: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */
36: movl $(0x55555555<<1),r4 /* set r4 = 0xaaaaaaaa */
37: bispsw $Z /* set z flag */
38: bicpsw $(N|V|C) /* clear n,v,c flag */
39: /* data memory register */
40: shal $1,srcloc,r3 /* shift left 1 and put in r3 */
41: jgeq error1 /* error if n flag not set */
42: jvc error1 /* error if v flag not set */
43: jcc error1 /* error if c flag not set */
44: jeql error1 /* error if z flag not clear */
45: jmp 1f
46: error1: movpsl _actual /* actual = psl maybe incorrect */
47: bbs $0,_scoplp,0b /* if set scope loop on error */
48: movl $2,_ercode /* error code flag failure */
49: jmp *badrtn
50: 1: cmpl r3,r4 /* 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 r3,_actual /* actual data */
55: movl r4,_expected /* expected data */
56: jmp *badrtn
57: 1: bicpsw $Z
58: cmpl $0x55555555,srcloc /* check if source get affected */
59: jeql s2 /* if correct continue */
60: bbs $0,_scoplp,0b /* if set scope loop on error */
61: movl $3,_ercode /* error code operand miscompare */
62: movl srcloc,_actual /* actual data */
63: movl $0x55555555,_expected /* expected data */
64: jmp *badrtn
65: /* SHIFT LEFT LONG FROM REGISTER TO MEMORY */
66: s2:
67: bbs $0,_force_lp,0b /* if set loop on last subtest */
68: as2: callf $4,_setjmp /* save context for error return */
69: movab as2,_stpc /* save starting address of subtest */
70: movl $2,_subtst /* subtst number */
71: movl $2,_no_opr /* number of operands in use */
72: movl $1,_opr /* first operand */
73: movl $0x55555555,_opr + 4 /* second operand */
74: 0: movb $1,temp /* set temp = shift count */
75: bispsw $(N|Z) /* set n,z flags */
76: bicpsw $(V|C) /* clear c,v flag */
77: /* memory register memory entry point */
78: shal temp,r3,dstloc /* shift r3 left 1 and put in dstloc */
79: jlss error2 /* error if n,z flag still set */
80: jeql error2
81: jvc error2 /* error if v,c flag clear */
82: jcc error2
83: jmp 1f
84: error2: movpsl _actual /* actual = psl maybe incorrect */
85: bbs $0,_scoplp,0b /* if set scope loop on error */
86: movl $2,_ercode /* error code flag failure */
87: jmp *badrtn
88: 1: cmpl dstloc,$0x55555554 /* check result */
89: jeql 1f /* if correct continue */
90: bbs $0,_scoplp,0b /* if set scope loop on error */
91: movl $1,_ercode /* error code data miscompare */
92: movl dstloc,_actual /* actual data */
93: movl $0x55555554,_expected /* expected data */
94: jmp *badrtn
95: 1: bicpsw $Z
96: cmpl r3,$0xaaaaaaaa /* make sure source unchanged */
97: jeql s3 /* if correct continue */
98: bbs $0,_scoplp,0b /* if set scope loop on error */
99: movl $3,_ercode /* error code operand miscompare */
100: movl r3,_actual /* actual data */
101: movl $0xaaaaaaaa,_expected /* expected data */
102: jmp *badrtn
103: /* SHIFT LEFT LONG FROM MEMORY TO MEMORY */
104: s3:
105: bbs $0,_force_lp,0b /* if set loop on last subtest */
106: as3: callf $4,_setjmp /* save context for error return */
107: movab as3,_stpc /* save starting address of subtest */
108: movl $3,_subtst /* subtst number */
109: movl $2,_no_opr /* number of operands in use */
110: movl $0xffffffe4,_opr /* first operand */
111: movl srcloc,_opr + 4 /* second operand */
112: 0: movl $0xffffffe4,r3 /* set r3[0:4] = shift count = 4 */
113: bispsw $(N|Z) /* set n,z flag */
114: bicpsw $(V|C) /* clear v,c flag */
115: /* register memory memory entry point */
116: shal r3,srcloc,srcloc /* shift and put result back in srcloc */
117: jlss error3 /* error if n,z flag still set */
118: jeql error3
119: jcc error3 /* error if c,v flags not set */
120: jvc error3
121: jmp 1f
122: error3: movpsl _actual /* actual = psl maybe incorrect */
123: bbs $0,_scoplp,0b /* if set scope loop on error */
124: movl $2,_ercode /* error code flag failure */
125: jmp *badrtn
126: 1: cmpl srcloc,$0x55555550 /* check result */
127: jeql s4 /* if correct continue */
128: bbs $0,_scoplp,0b /* if set scope loop on error */
129: movl $1,_ercode /* error code data miscompare */
130: movl srcloc,_actual /* actual data */
131: movl $0x55555550,_expected /* expected data */
132: jmp *badrtn
133: /* SPECIAL CASES */
134: /* shift count = 0 */
135: s4:
136: bbs $0,_force_lp,0b /* if set loop on last subtest */
137: as4: callf $4,_setjmp /* save context for error return */
138: movab as4,_stpc /* save starting address of subtest */
139: movl $4,_subtst /* subtst number */
140: movl $2,_no_opr /* number of operands in use */
141: movl $0,_opr /* first operand */
142: movl $0x55555555,_opr + 4 /* second operand */
143: 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */
144: movl $-1,r3
145: bispsw $(N|Z|V) /* set n,z,v flags */
146: bicpsw $C /* clear C flag */
147: /* shift zero entry point */
148: shal $0,srcloc,r3 /* shift left 0 and put in r3 */
149: jlss error4 /* error if n,z,v flag still set */
150: jeql error4
151: jvs error4
152: jcc error4 /* error if c flag not set */
153: jmp 1f
154: error4: movpsl _actual /* actual = psl maybe incorrect */
155: bbs $0,_scoplp,0b /* if set scope loop on error */
156: movl $2,_ercode /* error code flag failure */
157: jmp *badrtn
158: 1: cmpl $0x55555555,r3 /* check result */
159: jeql 1f /* if correct continue */
160: bbs $0,_scoplp,0b /* if set scope loop on error */
161: movl $1,_ercode /* error code data miscompare */
162: movl r3,_actual /* actual data */
163: movl $0x55555555,_expected /* expected data */
164: jmp *badrtn
165: 1: bicpsw $Z
166: cmpl $0x55555555,srcloc /* check if source get affected */
167: jeql s5 /* if correct continue */
168: bbs $0,_scoplp,0b /* if set scope loop on error */
169: movl $3,_ercode /* error code operand miscompare */
170: movl srcloc,_actual /* actual data */
171: movl $0x55555555,_expected /* expected data */
172: jmp *badrtn
173: /* shift count = MAX COUNT = 31 */
174: s5:
175: bbs $0,_force_lp,0b /* if set loop on last subtest */
176: as5: callf $4,_setjmp /* save context for error return */
177: movab as5,_stpc /* save starting address of subtest */
178: movl $5,_subtst /* subtst number */
179: movl $2,_no_opr /* number of operands in use */
180: movl $-1,_opr /* first operand */
181: movl $-1,_opr + 4 /* second operand */
182: 0: movb $-1,r3 /* set shift count = 31 */
183: bispsw $(Z|V) /* set z,v flag */
184: bicpsw $(N|C) /* clear n,c flag */
185: /* register register register */
186: shal r3,r3,r3 /* shift r3 left 31 and put back in r3 */
187: jgeq error5 /* error if n,c flag not set */
188: jcc error5
189: jeql error5 /* error if z,v flag set */
190: jvs error5
191: jmp 1f
192: error5: movpsl _actual /* actual = psl maybe incorrect */
193: bbs $0,_scoplp,0b /* if set scope loop on error */
194: movl $2,_ercode /* error code flag failure */
195: jmp *badrtn
196: 1: bicpsw $Z
197: cmpl r3,$0x80000000 /* check result */
198: jeql aldn /* if correct continue */
199: bbs $0,_scoplp,0b /* if set scope loop on error */
200: movl $1,_ercode /* error code data miscompare */
201: movl r3,_actual /* actual data */
202: movl $0x80000000,_expected /* expected data */
203: jmp *badrtn
204:
205:
206:
207:
208:
209: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
210: jmp *return
211:
212:
213: /* test data */
214: .align 2
215: srcloc: .long 0
216: dstloc: .long 0
217: temp: .long 0
218:
219:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.