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