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