|
|
1.1 root 1: /* PUSHB 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 NEGB,0xffffff80
20: .set MAXNEGB,0x80ffffff
21: .set HIGH,31 /* highest interrupt priority */
22:
23: .globl _pushbt
24: _pushbt:
25: callf $4,_setjmp /* save context for error return */
26: movab _pushbt,_stpc /* starting address of subtest */
27: movl $1,_subtst /* subtest number */
28: movl $1,_no_opr /* number of operands in use */
29: movl $NEGB,_opr /* first operand */
30: 0: bicpsw $(IV|T) /* disable exceptions */
31: /* */
32: pushmw: /* PUSH MEMORY ON STACK */
33: movab stk,r14 /* initialize stack pointer */
34: movab stk,r10
35: bispsw $(Z|V) /* set z,v flags */
36: bicpsw $(C|N) /* clear c,n flag */
37: pushb negval /* push negative value on stack */
38: jgeq error1 /* error if n flag not set */
39: jcc error1 /* error if c flag not set */
40: jeql error1 /* error if z flag set */
41: jvs error1 /* error if v flag set */
42: jmp 1f
43: error1: movpsl _actual /* actual = psl maybe incorrect */
44: bbs $0,_scoplp,0b /* if set scope loop on error */
45: movl $2,_ercode /* error code flag miscompare */
46: jmp *badrtn
47: 1: movab (r14),r13
48: decl r10
49: decl r10
50: decl r10
51: decl r10
52: cmpl r13,r10 /* check if stack get decrement */
53: jeql 1f
54: bbs $0,_scoplp,0b /* if set scope loop on error */
55: movl $1,_ercode /* error code data miscompare */
56: movl r10,_actual /* actual data */
57: movl r13,_expected /* expected data */
58: jmp *badrtn
59: 1: bicpsw $Z
60: cmpl $NEGB,(r14) /* check if value get put on stack */
61: jeql 1f
62: bbs $0,_scoplp,0b /* if set scope loop on error */
63: movl $1,_ercode /* error code data miscompare */
64: movl (r14),_actual /* actual data */
65: movl $NEGB,_expected /* expected data */
66: jmp *badrtn
67: 1: bicpsw $Z
68: cmpl negval,$MAXNEGB /* check if source get affected */
69: jeql p2
70: bbs $0,_scoplp,0b /* if set scope loop on error */
71: movl $3,_ercode /* error code operand miscompare */
72: movl negval,_actual /* actual data */
73: movl $MAXNEGB,_expected /* expected data */
74: jmp *badrtn
75:
76: p2:
77: bbs $0,_force_lp,0b /* if set loop on last subtest */
78: ap2: callf $4,_setjmp /* save context for error return */
79: movab _pushbt,_stpc /* starting address of subtest */
80: movl $2,_subtst /* subtest number */
81: movl $1,_no_opr /* number of operands in use */
82: movl result,_opr /* first operand */
83: 0: bispsw $(Z|V|N) /* set z,v,n flags */
84: bicpsw $C /* clear c flag */
85: pushb posval
86: jcc error2 /* error if c flag not set */
87: jlss error2 /* error if n flag set */
88: jeql error2 /* error if z flag set */
89: jvs error2 /* error if v flag set */
90: jmp 1f
91: error2: movpsl _actual /* actual = psl maybe incorrect */
92: bbs $0,_scoplp,0b /* if set scope loop on error */
93: movl $2,_ercode /* error code flag miscompare */
94: jmp *badrtn
95: 1: movab (r14),r13
96: decl r10
97: decl r10
98: decl r10
99: decl r10
100: 1: cmpl r13,r10 /* check if stack get decrement */
101: jeql 1f
102: bbs $0,_scoplp,0b /* if set scope loop on error */
103: movl $1,_ercode /* error code data miscompare */
104: movl r10,_actual /* actual data */
105: movl r13,_expected /* expected data */
106: jmp *badrtn
107: 1: bicpsw $Z
108: cmpl result,(r14) /* check if value get put on stack */
109: jeql 1f
110: bbs $0,_scoplp,0b /* if set scope loop on error */
111: movl $1,_ercode /* error code data miscompare */
112: movl (r14),_actual /* actual data */
113: movl result,_expected /* expected data */
114: jmp *badrtn
115: 1: bicpsw $Z
116: cmpl posval,$0x7faaaaaa /* check if source get affected */
117: jeql pushrw
118: bbs $0,_scoplp,0b /* if set scope loop on error */
119: movl $3,_ercode /* error code operand miscompare */
120: movl posval,_actual /* actual data */
121: movl $0x7faaaaaa,_expected /* expected data */
122: jmp *badrtn
123: pushrw: /* PUSH REGISTER ON STACK */
124: bbs $0,_force_lp,0b /* if set loop on last subtest */
125: ap3: callf $4,_setjmp /* save context for error return */
126: movab ap3,_stpc /* starting address of subtest */
127: movl $3,_subtst /* subtest number */
128: movl $1,_no_opr /* number of operands in use */
129: movl tstdat,_opr /* first operand */
130: 0: movl tstdat,r0 /* move test data to r0 */
131: bispsw $(Z|V) /* set z,v flags */
132: bicpsw $(C|N) /* clear n,c flag */
133: pushb r0 /* push r0 on stack */
134: jgeq error3 /* error if n flag not set */
135: jeql error3 /* error if z flag set */
136: jvs error3 /* error if v flag set */
137: jcc error3 /* error if c flag not set */
138: jmp 1f
139: error3: movpsl _actual /* actual = psl maybe incorrect */
140: bbs $0,_scoplp,0b /* if set scope loop on error */
141: movl $2,_ercode /* error code flag miscompare */
142: jmp *badrtn
143: 1: movab (r14),r13
144: decl r10
145: decl r10
146: decl r10
147: decl r10
148: cmpl r13,r10 /* check if stack get decrement */
149: jeql 1f
150: bbs $0,_scoplp,0b /* if set scope loop on error */
151: movl $1,_ercode /* error code data miscompare */
152: movl r10,_actual /* actual data */
153: movl r13,_expected /* expected data */
154: jmp *badrtn
155: 1: bicpsw $Z
156: cmpl tstdat,(r14) /* check if value get pushed */
157: jeql 1f
158: bbs $0,_scoplp,0b /* if set scope loop on error */
159: movl $1,_ercode /* error code data miscompare */
160: movl (r14),_actual /* actual data */
161: movl tstdat,_expected /* expected data */
162: jmp *badrtn
163: 1: bicpsw $Z
164: cmpl r0,tstdat /* make sure source unchanged */
165: jeql zflag
166: bbs $0,_scoplp,0b /* if set scope loop on error */
167: movl $3,_ercode /* error code operand miscompare */
168: movl tstdat,_actual /* actual data */
169: movl r0,_expected /* expected data */
170: jmp *badrtn
171: zflag: /* check z flag */
172: bbs $0,_force_lp,0b /* if set loop on last subtest */
173: ap4: callf $4,_setjmp /* save context for error return */
174: movab ap4,_stpc /* starting address of subtest */
175: movl $4,_subtst /* subtest number */
176: movl $1,_no_opr /* number of operands in use */
177: movl $0,_opr /* first operand */
178: 0: movl $0x0,r11
179: bispsw $(N|V) /* set n,v flags */
180: bicpsw $(C|Z) /* clear z,c flag */
181: pushb r11 /* push r11 on stack */
182: jlss error4 /* error if n flag set */
183: jvs error4 /* error if v flag set */
184: jneq error4 /* error if z flag not set */
185: jcc error4 /* error if c flag not set */
186: jmp 1f
187: error4: movpsl _actual /* actual = psl maybe incorrect */
188: bbs $0,_scoplp,0b /* if set scope loop on error */
189: movl $2,_ercode /* error code flag miscompare */
190: jmp *badrtn
191: 1: movab (r14),r13
192: decl r10
193: decl r10
194: decl r10
195: decl r10
196: cmpl r13,r10 /* check if stack get decrement */
197: jeql 1f
198: bbs $0,_scoplp,0b /* if set scope loop on error */
199: movl $1,_ercode /* error code data miscompare */
200: movl r13,_actual /* actual data */
201: movl r10,_expected /* expected data */
202: jmp *badrtn
203: 1: bicpsw $Z
204: cmpl $0,(r14) /* compare r14 to 0 */
205: jeql 1f
206: bbs $0,_scoplp,0b /* if set scope loop on error */
207: movl $1,_ercode /* error code data miscompare */
208: movl (r14),_actual /* actual data */
209: movl $0,_expected /* expected data */
210: jmp *badrtn
211: 1: bicpsw $Z
212: cmpl $0,r11 /* compare source to 0 */
213: jeql p5
214: bbs $0,_scoplp,0b /* if set scope loop on error */
215: movl $3,_ercode /* error code operand miscompare */
216: movl r11,_actual /* actual data */
217: movl $0,_expected /* expected data */
218: jmp *badrtn
219:
220:
221: p5:
222: bbs $0,_force_lp,0b /* if set loop on last subtest */
223: ap5: callf $4,_setjmp /* save context for error return */
224: movab ap5,_stpc /* starting address of subtest */
225: movl $5,_subtst /* subtest number */
226: movl $1,_no_opr /* number of operands in use */
227: movl $0x11,_opr /* first operand */
228: 0: bispsw $(N|V) /* set n,v flags */
229: bicpsw $(C|Z) /* clear z,c flag */
230: pushb $0x11 /* push literal */
231: jlss error5 /* error if n flag set */
232: jvs error5 /* error if v flag set */
233: jeql error5 /* error if z flag set */
234: jcc error5 /* error if c flag not set */
235: jmp 1f
236: error5: movpsl _actual /* actual = psl maybe incorrect */
237: bbs $0,_scoplp,0b /* if set scope loop on error */
238: movl $2,_ercode /* error code flag miscompare */
239: jmp *badrtn
240: 1: movab (r14),r13
241: decl r10
242: decl r10
243: decl r10
244: decl r10
245: cmpl r13,r10 /* check if stack get decrement */
246: jeql 1f
247: bbs $0,_scoplp,0b /* if set scope loop on error */
248: movl $1,_ercode /* error code data miscompare */
249: movl r13,_actual /* actual data */
250: movl r10,_expected /* expected data */
251: jmp *badrtn
252: 1: bicpsw $Z
253: cmpl $0x11,(r14) /* compare r14 to literal */
254: jeql aldn
255: bbs $0,_scoplp,0b /* if set scope loop on error */
256: movl $1,_ercode /* error code data miscompare */
257: movl (r14),_actual /* actual data */
258: movl $0x11,_expected /* expected data */
259: jmp *badrtn
260:
261: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
262: jmp *return /* good, return to monitor */
263:
264:
265: /* test data */
266: .align 2
267: /* stack */
268: .space 40
269: stk: .long 0
270: negval: .long MAXNEGB
271: tstdat: .long 0xffffff7a
272: posval: .long 0x7faaaaaa
273: result: .long 0x7f
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.