|
|
1.1 root 1: /* SHAR 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: /* SHIFT RIGHT LONG FROM MEMORY TO REGISTER */
22: .globl _shar
23: _shar:
24: callf $4,_setjmp /* save context for error return */
25: movab _shar,_stpc /* save subtest address */
26: movl $1,_subtst /* subtest number */
27: movl $2,_no_opr /* number of operands */
28: movl $1,_opr /* first operand */
29: movl $0x55555555,_opr + 4 /* second operand */
30: 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */
31: movl $(0x55555555>>1),r12 /* set r12 = 0xaaaaaaaa */
32: bispsw $(V|Z|N) /* set v,z,n flag */
33: bicpsw $C /* clear c flag */
34: /* data memory register */
35: shar $1,srcloc,r11 /* shift left 1 and put in r11 */
36: jlss error1 /* error if n flag set */
37: jvs error1 /* error if v flag set */
38: jeql error1 /* error if z flag set */
39: jcc error1 /* error if c flag not set */
40: jmp 1f
41: error1: movpsl _actual /* actual = psl MAYBE it is incorrect */
42: bbs $0,_scoplp,0b /* if set scope loop on error */
43: movl $2,_ercode /* error code flag failure */
44: jmp *badrtn
45: 1: cmpl r11,r12 /* check result */
46: jeql 1f
47: bbs $0,_scoplp,0b /* if set scope loop on error */
48: movl $1,_ercode /* error code data miscompare */
49: movl r11,_actual /* actual data */
50: movl r12,_expected /* expected data */
51: jmp *badrtn
52: 1: bicpsw $Z
53: cmpl $0x55555555,srcloc /* check if source get affected */
54: jeql s2
55: bbs $0,_scoplp,0b /* if set scope loop on error */
56: movl $3,_ercode /* error code operand miscompare */
57: movl srcloc,_actual /* actual data */
58: movl $0x55555555,_expected /* expected data */
59: jmp *badrtn
60: /* SHIFT RIGHT LONG FROM REGISTER TO MEMORY */
61: s2:
62: bbs $0,_force_lp,0b /* if set loop on last subtest */
63: as2: callf $4,_setjmp /* save context for error return */
64: movab as2,_stpc /* save subtest address */
65: movl $2,_subtst /* subtest number */
66: movl $2,_no_opr /* number of operands */
67: movl $1,_opr /* first operand */
68: movl $0x80000000,_opr + 4 /* second operand */
69: 0: movl $0x80000000,r11
70: movb $1,temp /* set temp = shift count */
71: bispsw $(V|Z) /* set v,z flags */
72: bicpsw $(N|C) /* clear c,n flag */
73: /* memory register memory */
74: shar temp,r11,dstloc /* shift r11 left 1 and put in dstloc */
75: jgeq error2 /* error if n flag not set */
76: jcc error2 /* error if c flag not set */
77: jeql error2 /* error if z flag set */
78: jvs error2 /* error if v flag set */
79: jmp 1f
80: error2: movpsl _actual /* actual = psl MAYBE it is incorrect */
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,$0xc0000000 /* check result */
85: jeql 1f
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 $0xc0000000,_expected /* expected data */
90: jmp *badrtn
91: 1: bicpsw $Z
92: cmpl r11,$0x80000000 /* make sure source unchanged */
93: jeql s3
94: bbs $0,_scoplp,0b /* if set scope loop on error */
95: movl $3,_ercode /* error code operand miscompare */
96: movl r11,_actual /* actual data */
97: movl $0x80000000,_expected /* expected data */
98: jmp *badrtn
99: /* SHIFT RIGHT 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 subtest address */
104: movl $3,_subtst /* subtest number */
105: movl $2,_no_opr /* number of operands */
106: movl $0xffffffe4,_opr /* first operand */
107: movl srcloc,_opr + 4 /* second operand */
108: 0: movl $0xffffffe4,r11 /* set r11[0:4] = shift count = 4 */
109: bispsw $(N|V|Z) /* set n,v,z flag */
110: bicpsw $C /* clear c flag */
111: /* register memory memory */
112: shar r11,srcloc,srcloc /* shift and put result back in srcloc */
113: jlss error3 /* error if n,z,v flag still set */
114: jeql error3
115: jvs error3
116: jcc error3 /* error if c flag not set */
117: jmp 1f
118: error3: movpsl _actual /* actual = psl MAYBE it is incorrect */
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,$0x5555555 /* check result */
123: jeql s4
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 $0x55555555,_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 subtest address */
135: movl $4,_subtst /* subtest number */
136: movl $2,_no_opr /* number of operands */
137: movl $0,_opr /* first operand */
138: movl $0x55555555,_opr + 4 /* second operand */
139: 0: movl $0x55555555,srcloc /* set srcloc = 0x55555555 */
140: movl $-1,r11
141: bispsw $(N|Z|V) /* set n,z,v flags */
142: bicpsw $C /* clear C flag */
143: /* data memory register */
144: shar $0,srcloc,r11 /* shift left 0 and put in r11 */
145: jlss error4 /* error if n,z,v flag still set */
146: jeql error4
147: jvs error4
148: jcc error4 /* error if c flag not set */
149: jmp 1f
150: error4: movpsl _actual /* actual = psl MAYBE it is 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 $0x55555555,r11 /* check result */
155: jeql 1f
156: bbs $0,_scoplp,0b /* if set scope loop on error */
157: movl $1,_ercode /* error code data miscompare */
158: movl r11,_actual /* actual data */
159: movl $0x55555555,_expected /* expected data */
160: jmp *badrtn
161: 1: bicpsw $Z
162: cmpl $0x55555555,srcloc /* check if source get affected */
163: jeql s5
164: bbs $0,_scoplp,0b /* if set scope loop on error */
165: movl $3,_ercode /* error code operand miscompare */
166: movl srcloc,_actual /* actual data */
167: movl $0x55555555,_expected /* expected data */
168: jmp *badrtn
169: /* shift count = MAX COUNT = 31 */
170: s5:
171: bbs $0,_force_lp,0b /* if set loop on last subtest */
172: as5: callf $4,_setjmp /* save context for error return */
173: movab as5,_stpc /* save subtest address */
174: movl $5,_subtst /* subtest number */
175: movl $2,_no_opr /* number of operands */
176: movl $-1,_opr /* first operand */
177: movl $-1,_opr + 4 /* second operand */
178: 0: movb $-1,r11 /* set shift count = 31 */
179: bispsw $(Z|V) /* set z,v flag */
180: bicpsw $(N|C) /* clear n,c flag */
181: shar r11,r11,r11 /* shift r11 left 31 and put back in r11 */
182: jgeq error5 /* error if n,c flag not set */
183: jcc error5
184: jeql error5 /* error if z,v flag set */
185: jvs error5
186: jmp 1f
187: error5: movpsl _actual /* actual = psl MAYBE it is incorrect */
188: bbs $0,_scoplp,0b /* if set scope loop on error */
189: movl $2,_ercode /* error code flag failure */
190: jmp *badrtn
191: 1: bicpsw $Z
192: cmpl r11,$0xffffffff /* check result */
193: jeql aldn
194: bbs $0,_scoplp,0b /* if set scope loop on error */
195: movl $1,_ercode /* error code data miscompare */
196: movl r11,_actual /* actual data */
197: movl $0x55555555,_expected /* expected data */
198: jmp *badrtn
199:
200:
201: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
202: jmp *return
203:
204:
205: /* test data */
206: .align 2
207: srcloc: .long 0
208: dstloc: .long 0
209: temp: .long 0
210:
211:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.