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