|
|
1.1 root 1: /* PUSHAB 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 MAXPOSW,0x7fff
20: .set MAXNEGL,0x8000ffff
21: .set HIGH,31 /* highest interrupt priority */
22: .set DISP,2
23: .set LONG,4
24: .set WORD,2
25: .set BYTE,1
26:
27: .globl _pushab
28: _pushab:
29: callf $4,_setjmp /* save context for error return */
30: movab _pushab,_stpc /* save subtest starting address */
31: movl $1,_subtst /* subtest number */
32: movl $1,_no_opr /* number of operands in use */
33: movab tstloc,_opr /* first operand */
34: 0: bicpsw $(IV|T) /* disable exceptions */
35: /* */
36: pshab:
37: /* MOVE ADDRESS FROM MEMORY TO STACK(R14) */
38: movab stk,r14 /* initialize stack */
39: movab stk,r10
40: bispsw $(N|Z|V ) /* set n,z,v flags */
41: bicpsw $Z
42: pushab tstloc /* push address tstloc on stack */
43: jlss error1 /* error if any of the n,z,v */
44: jeql error1 /* flags still set */
45: jvs error1
46: jcc error1 /* error if c flag clear */
47: jmp 1f
48: error1: movpsl _actual /* actual = psl MAYBE incorrect */
49: bbs $0,_scoplp,0b /* if set scope loop on error */
50: movl $2,_ercode /* error code flag failure */
51: jmp *badrtn
52: 1: cmpl (r14),result /* check if stack has valid adr */
53: jeql 1f /* no error then continue */
54: bbs $0,_scoplp,0b /* if set scope loop on error */
55: movl $1,_ercode /* error code data miscompare */
56: movl (r14),_actual /* actual data */
57: movl result,_expected /* expected data */
58: jmp *badrtn
59: 1: bicpsw $Z
60: movab (r14),r13
61: decl r10
62: decl r10
63: decl r10
64: decl r10
65: cmpl r10,r13 /* check if stack get decrement */
66: jeql p2 /* if no error continue */
67: bbs $0,_scoplp,0b /* if set scope loop on error */
68: movl $1,_ercode /* error code data miscompare */
69: movl r10,_actual /* actual data */
70: movl r13,_expected /* expected data */
71: jmp *badrtn
72: /* MOVE ADDRESS FROM REGISTER TO STACK */
73: p2:
74: bbs $0,_force_lp,0b /* if set loop on last subtest */
75: ap2: callf $4,_setjmp /* save context for error return */
76: movab ap2,_stpc /* save subtest starting address */
77: movl $2,_subtst /* subtest number */
78: movl $1,_no_opr /* number of operands in use */
79: movl result,_opr /* first operand */
80: 0: movl result,r12 /* set r12 = address of tstloc */
81: pushab (r12) /* push address in r12 on stack */
82: cmpl (r14),result /* compare result */
83: jeql 1f /* no error then continue */
84: bbs $0,_scoplp,0b /* if set scope loop on error */
85: movl $1,_ercode /* error code data miscompare */
86: movl (r14),_actual /* actual data */
87: movl result,_expected /* expected data */
88: jmp *badrtn
89: 1: bicpsw $Z
90: movab (r14),r13
91: decl r10
92: decl r10
93: decl r10
94: decl r10
95: cmpl r10,r13 /* check if stack get decrement */
96: jeql chkflag /* no error then continue */
97: bbs $0,_scoplp,0b /* if set scope loop on error */
98: movl $1,_ercode /* error code data miscompare */
99: movl r10,_actual /* actual data */
100: movl r13,_expected /* expected data */
101: jmp *badrtn
102: /* TESTING CONDITION FLAGS */
103: chkflag:
104: bbs $0,_force_lp,0b /* if set loop on last subtest */
105: ap3: callf $4,_setjmp /* save context for error return */
106: movab ap3,_stpc /* save subtest starting address */
107: movl $3,_subtst /* subtest number */
108: movl $1,_no_opr /* number of operands in use */
109: movl $MAXNEGL,_opr /* first operand */
110: 0: movl $MAXNEGL,r13 /* set r13 = $MAXNEGL */
111: bispsw $(Z|V) /* set z,v flags */
112: bicpsw $(C|N) /* clear n,c flag */
113: pushab (r13) /* push adr. in r13 on stack */
114: jgeq error2 /* error if n flag clear */
115: jcc error2 /* error if c flag clear */
116: jeql error2 /* error if z flag still set */
117: jvs error2 /* error if v flag still set */
118: jmp 1f
119: error2: movpsl _actual /* actual = psl MAYBE incorrect */
120: bbs $0,_scoplp,0b /* if set scope loop on error */
121: movl $2,_ercode /* error code flag failure */
122: jmp *badrtn
123: 1: cmpl (r14),$MAXNEGL /* check address in temp */
124: jeql p4 /* no error then continue */
125: bbs $0,_scoplp,0b /* if set scope loop on error */
126: movl $1,_ercode /* error code data miscompare */
127: movl r10,_actual /* actual data */
128: movl r13,_expected /* expected data */
129: jmp *badrtn
130:
131: p4:
132: bbs $0,_force_lp,0b /* if set loop on last subtest */
133: ap4: callf $4,_setjmp /* save context for error return */
134: movab ap4,_stpc /* save subtest starting address */
135: movl $4,_subtst /* subtest number */
136: movl $1,_no_opr /* number of operands in use */
137: movl $0,_opr /* first operand */
138: 0: movl $0,r11 /* set r11 = $0 */
139: bispsw $(N|V) /* set n,v flags */
140: bicpsw $(Z|C) /* clear z,c flag */
141: pushab (r11) /* push adr. in r11 on stack */
142: jcc error3 /* error if c flag clear */
143: jneq error3 /* error if z flag clear */
144: jlss error3 /* error if n flag still set */
145: jvs error3 /* error if v flag still set */
146: jmp 1f
147: error3: movpsl _actual /* actual = psl MAYBE incorrect */
148: bbs $0,_scoplp,0b /* if set scope loop on error */
149: movl $2,_ercode /* error code flag failure */
150: jmp *badrtn
151: 1: bicpsw $Z
152: cmpl (r14),$0 /* check address in temp */
153: jeql p5 /* no error then continue */
154: bbs $0,_scoplp,0b /* if set scope loop on error */
155: movl $1,_ercode /* error code data miscompare */
156: movl (r14),_actual /* actual data */
157: movl $0,_expected /* expected data */
158: jmp *badrtn
159: /* CHECKING INDEXING MODE */
160: p5:
161: bbs $0,_force_lp,0b /* if set loop on last subtest */
162: ap5: callf $4,_setjmp /* save context for error return */
163: movab ap5,_stpc /* save subtest starting address */
164: movl $5,_subtst /* subtest number */
165: movl $1,_no_opr /* number of operands in use */
166: movl tstloc,_opr /* first operand */
167: 0: movl $DISP,r0 /* set r0 = DISP = 2 */
168: bispsw $(N|Z|V) /* set n,z,v flags */
169: bicpsw $Z
170: pushab tstloc[r0] /* move address tstloc on stack */
171: jlss error4 /* error if any of the n,z,v */
172: jeql error4 /* flags still set */
173: jvs error4
174: jcc error4 /* error if c flag clear */
175: jmp 1f
176: error4: movpsl _actual /* actual = psl MAYBE incorrect */
177: bbs $0,_scoplp,0b /* if set scope loop on error */
178: movl $2,_ercode /* error code flag failure */
179: jmp *badrtn
180: 1: cmpl (r14),resul1 /* check if stack has valid adr */
181: jeql aldn /* no error then continue */
182: bbs $0,_scoplp,0b /* if set scope loop on error */
183: movl $1,_ercode /* error code data miscompare */
184: movl (r14),_actual /* actual data */
185: movl $0,_expected /* expected data */
186: jmp *badrtn
187:
188:
189: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
190: jmp *return /* good, return to monitor */
191:
192:
193: /* test data */
194: .align 2 /* align on longword boundery */
195: /* STACK SPACE */
196: .space 40 /* 10 long words for stack */
197: stk: .long 0
198: tstloc: .long 0
199: result: .long tstloc
200: resul1: .long tstloc+(DISP*BYTE)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.