|
|
1.1 root 1: /* AOBLSS istruction 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: .set LIMIT,0xffffff
21:
22: .globl _aoblss
23: _aoblss:
24: callf $4,_setjmp /* save context for error return */
25: movab _aoblss,_stpc /* save address of subtest */
26: movl $1,_subtst /* subtest number */
27: movl $2,_no_opr /* number of operands in use */
28: movl $-1,_opr /* first operand */
29: movl $-3,_opr + 4 /* second operand */
30: 0: bicpsw $(IV|T) /* disable exceptions */
31: movl $-1,limit /* set limit = -1 */
32: movl $-3,index /* set index = -3 */
33: bispsw $(Z|V|C) /* set z,v,c flags */
34: bicpsw $N /* clear n flag */
35: aoblss limit,index,loop0 /* data memory entry point */
36: movl $1,_ercode /* error code data miscompare did not branch */
37: bbs $0,_scoplp,0b /* if set scope loop on error */
38: movl index,_actual /* actual data */
39: movl $-2,_expected /* expected data */
40: jmp *badrtn
41: error1: movpsl _actual /* actual = psl */
42: bbs $0,_scoplp,0b /* if set scope loop on error */
43: movl $2,_ercode /* error code flag miscompare */
44: jmp *badrtn
45: error2: movl $3,_ercode /* error code operand was modified */
46: bbs $0,_scoplp,0b /* if set scope loop on error */
47: movl index,_actual /* actual data */
48: movl $-2,_expected /* expected data */
49: jmp *badrtn
50: .space 100 /* reserve 100 bytes */
51: loop0:
52: jlss error1
53: jcc error1
54: jvs error1
55: jeql error1
56: cmpl $-2,index /* check index value */
57: jneq error2
58: bicpsw $Z
59: cmpl $-1,limit /* make sure limit unchanged */
60: jneq error2
61:
62: /* INDEX = LIMIT */
63: bbs $0,_force_lp,0b /* if set loop on last subtest */
64: a2: callf $4,_setjmp /* save context for error return */
65: movab a2,_stpc /* save address of subtest */
66: movl $2,_subtst /* subtest number */
67: movl $2,_no_opr /* number of operands in use */
68: movl $0,_opr /* first operand */
69: movl $-1,_opr + 4 /* second operand */
70: 0: movl $0,r3 /* set limit in r3 = 0 */
71: movl $-1,r4 /* set index = -1 */
72: bispsw $(N|V|C) /* set n,v,c flags */
73: bicpsw $Z /* clear z flag */
74: aoblss r3,r4,loop1 /* register register entry point */
75: jneq error3
76: jcs error3
77: jlss error3
78: jvs error3
79:
80: bicpsw $Z
81: cmpl $0,r4 /* check index value */
82: jneq error4
83: jmp here
84: .space 90 /* reserve 100 bytes */
85: loop1:
86: movl $1,_ercode /* error code data miscompare did not branch */
87: bbs $0,_scoplp,0b /* if set scope loop on error */
88: movl r4,_actual /* actual data */
89: movl $0,_expected /* expected data */
90: jmp *badrtn
91: error3: movpsl _actual /* actual = psl */
92: bbs $0,_scoplp,0b /* if set scope loop on error */
93: movl $2,_ercode /* error code flag miscompare */
94: jmp *badrtn
95: error4: movl $3,_ercode /* error code operand was modified */
96: bbs $0,_scoplp,0b /* if set scope loop on error */
97: movl r4,_actual /* actual data */
98: movl $0,_expected /* expected data */
99: jmp *badrtn
100: /* INDEX > LIMIT */
101: here:
102: bbs $0,_force_lp,0b /* if set loop on last subtest */
103: a3: callf $4,_setjmp /* save context for error return */
104: movab a3,_stpc /* save address of subtest */
105: movl $3,_subtst /* subtest number */
106: movl $2,_no_opr /* number of operands in use */
107: movl $-1,_opr /* first operand */
108: movl $-1,_opr + 4 /* second operand */
109: 0: movl $-1,r3 /* set limit in r3 = -1 */
110: movl $-1,index /* set index = -1 */
111: bispsw $(N|Z|V|C) /* set all flags */
112: aoblss r3,index,loop2 /* regiser to memory entry point */
113: jgeq error5
114: jvs error5
115: jeql error5
116: jcs error5
117:
118: cmpl $0,index /* check index value */
119: jneq error6
120: jmp nxt
121: .space 90 /* reserve 100 bytes */
122: loop2:
123: movl $1,_ercode /* error code data miscompare did not branch */
124: 1: bbs $0,_scoplp,0b /* if set scope loop on error */
125: movl index,_actual /* actual data */
126: movl $-0,_expected /* expected data */
127: jmp *badrtn
128: error5: movpsl _actual /* actual = psl */
129: bbs $0,_scoplp,0b /* if set scope loop on error */
130: movl $2,_ercode /* error code flag miscompare */
131: jmp *badrtn
132: error6: movl $3,_ercode /* error code operand was modified */
133: bbs $0,_scoplp,0b /* if set scope loop on error */
134: movl index,_actual /* actual data */
135: movl $0,_expected /* expected data */
136: jmp *badrtn
137:
138: /* CHECK C FLAG */
139: nxt:
140: bbs $0,_force_lp,0b /* if set loop on last subtest */
141: a4: callf $4,_setjmp /* save context for error return */
142: movab a4,_stpc /* save address of subtest */
143: movl $4,_subtst /* subtest number */
144: movl $2,_no_opr /* number of operands in use */
145: movl $5,_opr /* first operand */
146: movl $0x7fffffff,_opr + 4 /* second operand */
147: 0: movl $5,limit /* set limit in limit = 5 */
148: movl $0x7fffffff,r4 /* set index to max. positive no */
149: bispsw $(Z|N|C) /* set n,z,c flags */
150: bicpsw $V /* clear n flags */
151: aoblss limit,r4,loop3 /* memory to register entry point */
152: jvs error7
153: jeql error7
154: jgeq error7
155: jcs error7
156: cmpl $0x80000000,r4 /* check index value */
157: jneq error8
158: bbs $0,_force_lp,0b /* if set loop on last subtest */
159: jmp *return
160:
161: .space 100
162: loop3:
163: movl $1,_ercode /* error code data miscompare did not branch */
164: 1: bbs $0,_scoplp,0b /* if set scope loop on error */
165: movl r4,_actual /* actual data */
166: movl $0x80000000,_expected /* expected data */
167: jmp *badrtn
168: error7: movpsl _actual /* actual = psl */
169: bbs $0,_scoplp,0b /* if set scope loop on error */
170: movl $2,_ercode /* error code flag miscompare */
171: jmp *badrtn
172: error8: movl $3,_ercode /* error code operand was modified */
173: bbs $0,_scoplp,0b /* if set scope loop on error */
174: movl r4,_actual /* actual data */
175: movl $0x80000000,_expected /* expected data */
176: jmp *badrtn
177:
178:
179: /* test data */
180: .align 2
181: limit:
182: .long 0
183: index:
184: .long 0
185: add:
186: .long 0
187:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.