|
|
1.1 root 1: /* BISPSW 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:
22: .globl _bispsw
23: _bispsw:
24: bicpsw $(IV|T) /* disable exceptions */
25: /* */
26: spsw:
27: callf $4,_setjmp /* save context for error return */
28: movab spsw,_stpc /* save address of subtest */
29: movl $1,_subtst /* subtest number */
30: movl $0,_no_opr /* no operands we manipulate psw */
31: movl $0,_actual /* no actual data */
32: movl $0,_expected /* no expected data */
33: 0: movl $0xf,r3 /* R3 : mask clear all flags N Z V C */
34: bicpsw r3 /* clear all flags */
35: bispsw $(N|Z|V|C) /* set all flags */
36: movpsl r4
37: andl2 $0xf,r4
38: cmpl $0xf,r4
39: jeql nxt /* if correct continue */
40: bbs $0,_scoplp,0b /* if set scope loop on error */
41: movl $1,_ercode /* error code data miscompare */
42: movl r4,_actual /* actual data */
43: movl $0xf,_expected /* expected data */
44: jmp *badrtn
45:
46: nxt:
47: bbs $0,_force_lp,0b /* if set loop on error */
48: st2: callf $4,_setjmp /* save context for error return */
49: movab st2,_stpc /* save address of subtest */
50: movl $2,_subtst /* subtest number */
51: 0: movl $0xf,r3 /* R3 : mask clear all flags N Z V C */
52: bicpsw r3 /* clear all flags */
53: bispsw $N /* set n flag */
54: jlss nxt1
55: bbs $0,_scoplp,0b /* if set scope loop on error */
56: movl $1,_ercode /* error code data miscompare */
57: movl r4,_actual /* actual data */
58: movl $0xf,_expected /* expected data */
59: jmp *badrtn
60: nxt1:
61: jeql error1 /* error if z also set */
62: jvs error1 /* error if v also set */
63: jcs error1 /* error if c also set */
64: jmp t3
65: error1: movpsl _actual /* actual psl may be bad */
66: bbs $0,_scoplp,0b /* if set scope loop on error */
67: movl $2,_ercode /* error code flag failure */
68: jmp *badrtn
69:
70: t3: bbs $0,_force_lp,0b /* if set loop on error */
71: st3: callf $4,_setjmp /* save context for error return */
72: movab st3,_stpc /* save address of subtest */
73: movl $3,_subtst /* subtest number */
74: 0: bicpsw $(N|Z|V|C) /* clear all flags */
75: bispsw $Z /* set z flag */
76: jeql nxt2
77: jmp error2
78: nxt2:
79: jlss error2 /* error if n also set */
80: jvs error2 /* error if v also set */
81: jcs error2 /* error if c also set */
82: jmp t4
83: error2: movpsl _actual /* actual psl may be bad */
84: bbs $0,_scoplp,0b /* if set scope loop on error */
85: movl $2,_ercode /* error code flag failure */
86: jmp *badrtn
87: t4:
88: bbs $0,_force_lp,0b /* if set loop on error */
89: st4: callf $4,_setjmp /* save context for error return */
90: movab st4,_stpc /* save address of subtest */
91: movl $4,_subtst /* subtest number */
92: 0: movl vflg,r3 /* r3 = mask */
93: bicpsw $(N|Z|V|C) /* clear all flags */
94: bispsw r3 /* set v flag */
95: jvs nxt3
96: jmp error3
97: nxt3:
98: jlss error3 /* error if n also set */
99: jeql error3 /* error if z also set */
100: jcs error3 /* error if c also set */
101: jmp t5
102: error3: movpsl _actual /* actual psl may be bad */
103: bbs $0,_scoplp,0b /* if set scope loop on error */
104: movl $2,_ercode /* error code flag failure */
105: jmp *badrtn
106:
107: t5: bbs $0,_force_lp,0b /* if set loop on error */
108: st5: callf $4,_setjmp /* save context for error return */
109: movab st5,_stpc /* save address of subtest */
110: movl $5,_subtst /* subtest number */
111: 0: bicpsw $(N|Z|V|C) /* clear all flags */
112: bispsw cflg /* set c flag */
113: jcs nxt4
114: jmp error4
115: nxt4:
116: jlss error4 /* error if n also set */
117: jeql error4 /* error if z also set */
118: jvs error4 /* error if v also set */
119: jmp comb
120: error4: movpsl _actual /* actual psl may be bad */
121: bbs $0,_scoplp,0b /* if set scope loop on error */
122: movl $2,_ercode /* error code flag failure */
123: jmp *badrtn
124:
125: comb:
126: bbs $0,_force_lp,0b /* if set loop on error */
127: st6: callf $4,_setjmp /* save context for error return */
128: movab st6,_stpc /* save address of subtest */
129: movl $6,_subtst /* subtest number */
130: 0: bicpsw $(N|V|C|V)
131: bispsw $(V|C)
132: jvc error5
133: jcc error5
134: jlss error5
135: jeql error5
136: jmp t7
137: error5: movpsl _actual /* actual psl may be bad */
138: bbs $0,_scoplp,0b /* if set scope loop on error */
139: movl $2,_ercode /* error code flag failure */
140: jmp *badrtn
141:
142: t7: bbs $0,_force_lp,0b /* if set loop on error */
143: st7: callf $4,_setjmp /* save context for error return */
144: movab st7,_stpc /* save address of subtest */
145: movl $7,_subtst /* subtest number */
146: 0: bicpsw $(N|V|C|V)
147: bispsw $(Z|C)
148: jvs error6
149: jcc error6
150: jlss error6
151: jneq error6
152: jmp t8
153: error6: movpsl _actual /* actual psl may be bad */
154: bbs $0,_scoplp,0b /* if set scope loop on error */
155: movl $2,_ercode /* error code flag failure */
156: jmp *badrtn
157:
158: t8: bbs $0,_force_lp,0b /* if set loop on error */
159: st8: callf $4,_setjmp /* save context for error return */
160: movab st8,_stpc /* save address of subtest */
161: movl $8,_subtst /* subtest number */
162: 0: bicpsw $(N|V|C|V)
163: bispsw $(N|C)
164: jvs error7
165: jcc error7
166: jeql error7
167: jlss 1f
168: error7: movpsl _actual /* actual psl may be bad */
169: bbs $0,_scoplp,0b /* if set scope loop on error */
170: movl $2,_ercode /* error code flag failure */
171: jmp *badrtn
172:
173: 1:
174: bbs $0,_force_lp,0b /* if set loop on error */
175: jmp *return
176:
177: /* test data */
178: .align 2
179: vflg: .long V
180: zflg: .long Z
181: t0: .long 0xffffffff
182: cflg: .word C
183: t1: .word 0xffff
184:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.