|
|
1.1 root 1: /* DECL 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 MAXPOSL,0x7fffffff
18: .set MAXNEGL,0x80000000
19: .set MAXPOSW,0x7fff
20: .set MAXNEGW,0x8000
21: .set MAXPOSB,0x7f
22: .set MAXNEGB,0x80
23: .set ZERO,0
24: .set ONES,0xffffffff
25: .set HIGH,31 /* highest interrupt priority */
26:
27: .globl _dec_l
28: _dec_l:
29: callf $4,_setjmp /* save context for error return */
30: movab _dec_l,_stpc /* save address of subtest start */
31: movl $1,_subtst /* subtest number */
32: movl $1,_no_opr /* number of operands in use */
33: movl $1,_opr /* first operand */
34: 0: bicpsw $(IV|T) /* disable overflow,trace exceptions */
35: movl $1,r3 /* load r3 with 1 */
36: bispsw $(N|V) /* set n,v flags */
37: bicpsw $(C|Z) /* clear c,z flag */
38: decl r3 /* decrement r3 */
39: jneq error1 /* error if z flag not set */
40: jcc error1 /* error if c flag not set */
41: jlss error1 /* error if n flag still set */
42: jvs error1 /* error if v flag still set */
43: jmp 1f
44: error1: movpsl _actual /* actual = psl MAYBE it is 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: cmpl $0,r3 /* compare r3 to 0 */
49: jeql ovf1 /* if no error continue */
50: bbs $0,_scoplp,0b /* if set scope loop on error */
51: movl $1,_ercode /* error code data miscompare */
52: movl r3,_actual /* actual data */
53: movl $0,_expected /* expected data */
54: jmp *badrtn
55: ovf1:
56: bbs $0,_force_lp,0b /* if set loop on last subtest */
57: ad2: callf $4,_setjmp /* save context for error return */
58: movab ad2,_stpc /* save address of subtest start */
59: movl $2,_subtst /* subtest number */
60: movl $1,_no_opr /* number of operands in use */
61: movl $MAXNEGL,_opr /* first operand */
62: 0: movl $MAXNEGL,r3 /* load r3 with largest neg. value */
63: bispsw $Z /* set z flags */
64: bicpsw $(N|V|C) /* clear n,v,c flag */
65: decl r3 /* decrement r3 */
66: jeql error2 /* error if z flag still set */
67: jgeq error2 /* error if n flag not set */
68: jcc error2 /* error if c flag not set */
69: jvc error2 /* error if v flag not set */
70: jmp 1f
71: error2: movpsl _actual /* actual = psl MAYBE it is incorrect */
72: bbs $0,_scoplp,0b /* if set scope loop on error */
73: movl $2,_ercode /* error code flag failure */
74: jmp *badrtn
75: 1: cmpl $MAXPOSL,r3 /* compare r3 to largest pos. value */
76: jeql d3 /* if no error continue */
77: bbs $0,_scoplp,0b /* if set scope loop on error */
78: movl $1,_ercode /* error code data miscompare */
79: movl r3,_actual /* actual data */
80: movl $MAXPOSL,_expected /* expected data */
81: jmp *badrtn
82:
83: d3:
84: bbs $0,_force_lp,0b /* if set loop on last subtest */
85: ad3: callf $4,_setjmp /* save context for error return */
86: movab ad3,_stpc /* save address of subtest start */
87: movl $3,_subtst /* subtest number */
88: movl $1,_no_opr /* number of operands in use */
89: movl $0,_opr /* first operand */
90: 0: movl $0,r3
91: bispsw $(C|Z|V) /* set c,z,v flags */
92: bicpsw $N /* clear n flag */
93: decl r3
94: jeql error3 /* error if z flag still set */
95: jcs error3 /* error if c flag still set */
96: jvs error3 /* error if v flag still set */
97: jgeq error3 /* error if n flag clear */
98: jmp 1f
99: error3: movpsl _actual /* actual = psl MAYBE it is incorrect */
100: bbs $0,_scoplp,0b /* if set scope loop on error */
101: movl $2,_ercode /* error code flag failure */
102: jmp *badrtn
103: 1: cmpl $0xffffffff,r3 /* compare r3 to -1 */
104: jeql decml /* if no error continue */
105: bbs $0,_scoplp,0b /* if set scope loop on error */
106: movl $1,_ercode /* error code data miscompare */
107: movl r3,_actual /* actual data */
108: movl $0xffffffff,_expected /* expected data */
109: jmp *badrtn
110: decml: /* DECREMENT MEMORY */
111: bbs $0,_force_lp,0b /* if set loop on last subtest */
112: ad4: callf $4,_setjmp /* save context for error return */
113: movab ad4,_stpc /* save address of subtest start */
114: movl $4,_subtst /* subtest number */
115: movl $1,_no_opr /* number of operands in use */
116: movl $1,_opr /* first operand */
117: 0: movl $1,tstloc /* load tstloc with 1 */
118: bispsw $(N|V) /* set n,v flags */
119: bicpsw $(C|Z) /* clear c,z flag */
120: decl tstloc /* decrement value in tstloc */
121: jneq error4 /* error if z flag not set */
122: jcc error4 /* error if c flag not set */
123: jlss error4 /* error if n flag still set */
124: jvs error4 /* error if v flag still set */
125: jmp 1f
126: error4: movpsl _actual /* actual = psl MAYBE it is incorrect */
127: bbs $0,_scoplp,0b /* if set scope loop on error */
128: movl $2,_ercode /* error code flag failure */
129: jmp *badrtn
130: 1: cmpl $0,tstloc /* compare tstloc to 0 */
131: jeql ovf2 /* if no error continue */
132: bbs $0,_scoplp,0b /* if set scope loop on error */
133: movl $1,_ercode /* error code data miscompare */
134: movl tstloc,_actual /* actual data */
135: movl $0,_expected /* expected data */
136: jmp *badrtn
137: ovf2:
138: bbs $0,_force_lp,0b /* if set loop on last subtest */
139: ad5: callf $4,_setjmp /* save context for error return */
140: movab ad5,_stpc /* save address of subtest start */
141: movl $5,_subtst /* subtest number */
142: movl $1,_no_opr /* number of operands in use */
143: movl $MAXNEGL,_opr /* first operand */
144: 0: movl $MAXNEGL,tstloc /* load tstloc with largest neg. value */
145: bispsw $Z /* set z flags */
146: bicpsw $(N|V|C) /* clear n,v,c flags */
147: decl tstloc /* decrement tstloc */
148: jeql error5 /* error if z flag still set */
149: jgeq error5 /* error if n flag not set */
150: jcc error5 /* error if c flag not set */
151: jvc error5 /* error if v flag not set */
152: jmp 1f
153: error5: movpsl _actual /* actual = psl MAYBE it is incorrect */
154: bbs $0,_scoplp,0b /* if set scope loop on error */
155: movl $2,_ercode /* error code flag failure */
156: jmp *badrtn
157: 1: cmpl $MAXPOSL,tstloc /* compare tstloc to largest pos. value */
158: jeql d6 /* if no error continue */
159: bbs $0,_scoplp,0b /* if set scope loop on error */
160: movl $1,_ercode /* error code data miscompare */
161: movl tstloc,_actual /* actual data */
162: movl $MAXPOSL,_expected /* expected data */
163: jmp *badrtn
164:
165: d6:
166: bbs $0,_force_lp,0b /* if set loop on last subtest */
167: ad6: callf $4,_setjmp /* save context for error return */
168: movab ad6,_stpc /* save address of subtest start */
169: movl $6,_subtst /* subtest number */
170: movl $1,_no_opr /* number of operands in use */
171: movl $0,_opr /* first operand */
172: 0: movl $0,tstloc /* clear tstloc */
173: bispsw $(Z|V|C) /* set z,v,c flags */
174: bicpsw $N /* clear n flag */
175: decl tstloc /* decrement tstloc */
176: jgeq error6 /* error if n flag not set */
177: jeql error6 /* error if z flag still set */
178: jvs error6 /* error if v flag still set */
179: jcs error6 /* error if c flag still set */
180: jmp 1f
181: error6: movpsl _actual /* actual = psl MAYBE it is incorrect */
182: bbs $0,_scoplp,0b /* if set scope loop on error */
183: movl $2,_ercode /* error code flag failure */
184: jmp *badrtn
185: 1: cmpl $0xffffffff,tstloc /* tstloc == 0xffffffff */
186: jeql aldn /* if no error continue */
187: bbs $0,_scoplp,0b /* if set scope loop on error */
188: movl $1,_ercode /* error code data miscompare */
189: movl tstloc,_actual /* actual data */
190: movl $0xffffffff,_expected /* expected data */
191: jmp *badrtn
192:
193: aldn:
194: bbs $0,_force_lp,0b /* if set loop on last subtest */
195: jmp *return
196:
197: /* test data */
198: .align 2
199: tstloc: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.