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