|
|
1.1 root 1: /* INCB instruction test */
2: /* Privilege registers */
3:
4: .set IPL,0x8
5: .set MAPEN,0x9
6: .set KSP,0x19
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 MAXPOSW,0x7fff
22: .set MAXNEGW,0x8000
23: .set MAXPOSB,0x7f
24: .set MAXNEGB,0x80
25: .set ZERO,0
26: .set ONES,0xffffffff
27: .set HIGH,31 /* highest interrupt priority */
28:
29: .globl _inc_b
30: _inc_b:
31: callf $4,_setjmp /* save context for error return */
32: movab _inc_b,_stpc /* save address of subtest start */
33: movl $1,_subtst /* subtest number */
34: movl $1,_no_opr /* number of operands in use */
35: movl $0xfffffffe,_opr /* first operand */
36: 0: bicpsw $(IV|T) /* disable overflow,trace exceptions */
37: incrb: /* INCREMENT REGISTER */
38: movl $0xfffffffe,r3 /* load r3 with -2 */
39: bispsw $(Z|V|C) /* set z,v,c flags */
40: bicpsw $N /* clear n flag */
41: incb r3 /* increment r3 */
42: jgeq error1 /* error if n flag not set */
43: jeql error1 /* error if z flag still set */
44: jvs error1 /* error if v flag still set */
45: jcs error1 /* error if c flag still set */
46: jmp 1f
47: error1: movpsl _actual /* actual = psl MAYBE 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 $0xffffffff,r3 /* is r3 = -1 */
52: jeql step2
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 $0xffffffff,_expected /* expected data */
57: jmp *badrtn
58: step2:
59: bbs $0,_force_lp,0b /* if set loop on last subtest */
60: ai2: callf $4,_setjmp /* save context for error return */
61: movab ai2,_stpc /* save address of subtest start */
62: movl $2,_subtst /* subtest number */
63: movl $1,_no_opr /* number of operands in use */
64: movl $0xfffffffe,_opr /* first operand */
65: 0: bispsw $(N|V) /* set n,v flags */
66: bicpsw $(Z|C) /* clear z,c flag */
67: incb r3 /* increment r3 */
68: jlss error2 /* error if n flag still set */
69: jvs error2 /* error if v flag still set */
70: jneq error2 /* error if z flag not set */
71: jcc error2 /* error if c flag not set */
72: jmp 1f
73: error2: movpsl _actual /* actual = psl MAYBE is incorrect */
74: bbs $0,_scoplp,0b /* if set scope loop on error */
75: movl $2,_ercode /* error code flag failure */
76: jmp *badrtn
77: 1: bicpsw $Z
78: cmpl $0x0,r3 /* is r3 == 0x0 */
79: jeql ovfl
80: bbs $0,_scoplp,0b /* if set scope loop on error */
81: movl $1,_ercode /* error code data miscompare */
82: movl r3,_actual /* actual data */
83: movl $0,_expected /* expected data */
84: jmp *badrtn
85: ovfl:
86: # To be investigate : what hareware does if this happen !! an incb is executed
87: # to an incorrect data
88: bbs $0,_force_lp,0b /* if set loop on last subtest */
89: ai3: callf $4,_setjmp /* save context for error return */
90: movab ai3,_stpc /* save address of subtest start */
91: movl $3,_subtst /* subtest number */
92: movl $1,_no_opr /* number of operands in use */
93: movl $0x7fffffff,_opr /* first operand */
94: 0: movl $0x7fffffff,r3 /* set r3 = 0x7fffffff */
95: bispsw $(Z|C|N) /* set n,z,c flags */
96: bicpsw $V /* clear v flags */
97: incb r3 /* increment r3 */
98: jvs error3 /* error if v flag not set */
99: jlss error3 /* error if n flag set */
100: jeql error3 /* error if z flag still set */
101: jcs error3 /* error if c flag still set */
102: jmp 1f
103: error3: movpsl _actual /* actual = psl MAYBE 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 $MAXNEGL,r3 /* is r3 == 0x80000000 */
108: jeql incmb
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 $MAXNEGL,_expected /* expected data */
113: jmp *badrtn
114: incmb: /* INCREMENT MEMORY */
115: bbs $0,_force_lp,0b /* if set loop on last subtest */
116: ai4: callf $4,_setjmp /* save context for error return */
117: movab ai4,_stpc /* save address of subtest start */
118: movl $4,_subtst /* subtest number */
119: movl $1,_no_opr /* number of operands in use */
120: movl $0xfeffffff,_opr /* first operand */
121: 0: movl $0xfeffffff,tstloc /* load tstloc with -2 (byte) */
122: bispsw $(Z|V|C) /* set z,v,c flags */
123: bicpsw $N /* clear n flag */
124: incb tstloc /* increment tstloc */
125: jgeq error4 /* error if n flag not set */
126: jeql error4 /* error if z flag still set */
127: jvs error4 /* error if v flag still set */
128: jcs error4 /* error if c flag still set */
129: jmp 1f
130: error4: movpsl _actual /* actual = psl MAYBE is incorrect */
131: bbs $0,_scoplp,0b /* if set scope loop on error */
132: movl $2,_ercode /* error code flag failure */
133: jmp *badrtn
134: 1: cmpl $0xffffffff,tstloc /* is tstloc == -1 */
135: jeql stp2
136: bbs $0,_scoplp,0b /* if set scope loop on error */
137: movl $1,_ercode /* error code data miscompare */
138: movl tstloc,_actual /* actual data */
139: movl $0xffffffff,_expected /* expected data */
140: jmp *badrtn
141: stp2:
142: bbs $0,_force_lp,0b /* if set loop on last subtest */
143: ai5: callf $4,_setjmp /* save context for error return */
144: movab ai5,_stpc /* save address of subtest start */
145: movl $5,_subtst /* subtest number */
146: movl $1,_no_opr /* number of operands in use */
147: movl $0xffffffff,_opr /* first operand */
148: 0: bispsw $(N|V) /* set n,v flags */
149: bicpsw $(Z|C) /* clear z,c flag */
150: incb tstloc /* increment tstloc */
151: jlss error5 /* error if n flag still set */
152: jvs error5 /* error if v flag still set */
153: jneq error5 /* error if z flag not set */
154: jcc error5 /* error if c flag not set */
155: jmp 1f
156: error5: movpsl _actual /* actual = psl MAYBE is incorrect */
157: bbs $0,_scoplp,0b /* if set scope loop on error */
158: movl $2,_ercode /* error code flag failure */
159: jmp *badrtn
160: 1: bicpsw $Z
161: cmpl $0x00ffffff,tstloc /* is tstloc == 0x00ffffff */
162: jeql ovfl1
163: bbs $0,_scoplp,0b /* if set scope loop on error */
164: movl $1,_ercode /* error code data miscompare */
165: movl tstloc,_actual /* actual data */
166: movl $0x00ffffff,_expected /* expected data */
167: jmp *badrtn
168: ovfl1:
169: bbs $0,_force_lp,0b /* if set loop on last subtest */
170: ai6: callf $4,_setjmp /* save context for error return */
171: movab ai6,_stpc /* save address of subtest start */
172: movl $6,_subtst /* subtest number */
173: movl $1,_no_opr /* number of operands in use */
174: movl $0x7fffffff,_opr /* first operand */
175: 0: movl $0x7fffffff,tstloc /* tstloc = 0x7fffffff */
176: bispsw $(Z|C|N) /* set n,z,c flags */
177: bicpsw $V /* clear n,v flags */
178: incb tstloc /* increment tstloc */
179: jvc error6 /* error if v flag not set */
180: jlss error6 /* error if n flag set */
181: jeql error6 /* error if z flag still set */
182: jcs error6 /* error if c flag still set */
183: jmp 1f
184: error6: movpsl _actual /* actual = psl MAYBE is incorrect */
185: bbs $0,_scoplp,0b /* if set scope loop on error */
186: movl $2,_ercode /* error code flag failure */
187: jmp *badrtn
188: 1: cmpl $0x80ffffff,tstloc /* is tstloc == 0x80ffffff */
189: jeql aldn
190: bbs $0,_scoplp,0b /* if set scope loop on error */
191: movl $1,_ercode /* error code data miscompare */
192: movl tstloc,_actual /* actual data */
193: movl $0x80ffffff,_expected /* expected data */
194: jmp *badrtn
195:
196: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
197: jmp *return
198: /* */
199: /* test data */
200: .align 2
201: tstloc: .long 0
202:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.