|
|
1.1 root 1: /* MOVAB instruction test */
2: /* */
3: /* Privilege registers */
4:
5: .set IPL,0x8
6: .set MAPEN,0x9
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: .set DISP,2
29: .set LONG,4
30: .set WORD,2
31: .set BYTE,1
32:
33: .globl _movabt
34: _movabt:
35: callf $4,_setjmp /* save context for error return */
36: movab _movabt,_stpc /* save starting address of subtest */
37: movl $1,_subtst /* subtest number */
38: movl $1,_no_opr /* number of operands in use */
39: movab tstloc,_opr /* first operand */
40: 0: bicpsw $(IV|T) /* disable exceptions */
41: /* MOVE ADDRESS FROM MEMORY TO REGISTER */
42: movl $MAXPOSL,tstloc /* initialize tstloc */
43: bispsw $(N|Z|V|C) /* set n,z,v,c flags */
44: movab tstloc,r3 /* move address tstloc to r3 */
45: jlss error1 /* error if any of the n,z,v */
46: jeql error1 /* flags still set */
47: jvs error1
48: jcc error1 /* error if c flag clear */
49: jmp 1f
50: error1: movpsl _actual /* actual data */
51: bbs $0,_scoplp,0b /* if set scope loop on error */
52: movl $2,_ercode /* error code flag failure */
53: jmp *badrtn
54: 1: cmpl r3,result /* check if r3 has valid adr. */
55: jeql m2 /* if no error continue */
56: bbs $0,_scoplp,0b /* if set scope loop on error */
57: movl $1,_ercode /* error code data miscompare */
58: movl r3,_actual /* actual data */
59: movl result,_expected /* expected data */
60: jmp *badrtn
61: /* MOVE ADDRESS FROM REGISTER TO MEMORY */
62: m2:
63: bbs $0,_force_lp,0b /* if set loop on last subtest */
64: am2: callf $4,_setjmp /* save context for error return */
65: movab am2,_stpc /* save starting address of subtest */
66: movl $2,_subtst /* subtest number */
67: movl $1,_no_opr /* number of operands in use */
68: movab (r3),_opr /* first operand */
69: 0: movab (r3),temp /* move address in r3 to temp */
70: cmpl temp,result /* compare result */
71: jeql 1f /* if no error continue */
72: bbs $0,_scoplp,0b /* if set scope loop on error */
73: movl $1,_ercode /* error code data miscompare */
74: movl temp,_actual /* actual data */
75: movl result,_expected /* expected data */
76: jmp *badrtn
77: 1: bicpsw $Z
78: cmpl r3,result /* check source */
79: jeql chkflag /* if no error continue */
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 result,_expected /* expected data */
84: jmp *badrtn
85: /* TESTING CONDITION FLAGS */
86: chkflag:
87: bbs $0,_force_lp,0b /* if set loop on last subtest */
88: am3: callf $4,_setjmp /* save context for error return */
89: movab am3,_stpc /* save starting address of subtest */
90: movl $3,_subtst /* subtest number */
91: movl $1,_no_opr /* number of operands in use */
92: movl $MAXNEGL,_opr /* first operand */
93: 0: movl $0,temp /* clear temp */
94: movl $MAXNEGL,r3 /* set r3 = $MAXNEGL */
95: bispsw $(Z|V) /* set z,v flags */
96: bicpsw $(C|N) /* clear c,n flags */
97: movab (r3),temp /* move adr. in r3 to temp */
98: jgeq error2 /* error if n flag not set */
99: jeql error2 /* error if z flag still set */
100: jvs error2 /* error if v flag still set */
101: jcc error2 /* error if c flag clear */
102: jmp 1f
103: error2: movpsl _actual /* actual data */
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 temp,$MAXNEGL /* check address in temp */
108: jneq error2
109: jeql 1f /* if no error continue */
110: bbs $0,_scoplp,0b /* if set scope loop on error */
111: movl $1,_ercode /* error code data miscompare */
112: movl r3,_actual /* actual data */
113: movl result,_expected /* expected data */
114: jmp *badrtn
115: 1: bicpsw $Z
116: cmpl r3,$MAXNEGL /* check source */
117: jeql m4 /* if no error continue */
118: bbs $0,_scoplp,0b /* if set scope loop on error */
119: movl $1,_ercode /* error code data miscompare */
120: movl r3,_actual /* actual data */
121: movl result,_expected /* expected data */
122: jmp *badrtn
123:
124: m4:
125: bbs $0,_force_lp,0b /* if set loop on last subtest */
126: am4: callf $4,_setjmp /* save context for error return */
127: movab am4,_stpc /* save starting address of subtest */
128: movl $4,_subtst /* subtest number */
129: movl $1,_no_opr /* number of operands in use */
130: movl $0,_opr /* first operand */
131: 0: movl $ONES,temp /* set temp = 0xffffffff */
132: movl $0,r3 /* set r3 = $0 */
133: bispsw $(N|V) /* set n,v flags */
134: bicpsw $(Z|C) /* clear z,c flag */
135: movab (r3),temp /* move adr. in r9 to temp */
136: jlss error3 /* error if n flag still set */
137: jneq error3 /* error if z flag not set */
138: jvs error3 /* error if v flag still set */
139: jcc error3 /* error if c flag clear */
140: cmpl temp,$0 /* check address in temp */
141: jmp m5
142: error3: movpsl _actual /* actual data */
143: bbs $0,_scoplp,0b /* if set scope loop on error */
144: movl $2,_ercode /* error code flag failure */
145: jmp *badrtn
146: /* CHECKING INDEXING MODE */
147: m5:
148: bbs $0,_force_lp,0b /* if set loop on last subtest */
149: am5: callf $4,_setjmp /* save context for error return */
150: movab am5,_stpc /* save starting address of subtest */
151: movl $5,_subtst /* subtest number */
152: movl $1,_no_opr /* number of operands in use */
153: movl $DISP,_opr /* first operand */
154: 0: movl $DISP,r3 /* set r3 = DISP = 2 */
155: bispsw $(N|Z|V|C) /* set n,z,v,c flags */
156: movab tstloc[r3],r4 /* move address tstloc to r4 */
157: jlss error4 /* error if any of the n,z,v */
158: jeql error4 /* flags still set */
159: jvs error4
160: jcc error4 /* error if c flag clear */
161: cmpl r4,resul1 /* check if r4 has valid adr. */
162: jneq error2 /* error if not */
163: jmp aldn
164: error4: movpsl _actual /* actual data */
165: bbs $0,_scoplp,0b /* if set scope loop on error */
166: movl $2,_ercode /* error code flag failure */
167: jmp *badrtn
168:
169: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
170: jmp *return
171:
172: /* test data */
173: .align 2 /* align on longword boundary */
174: tstloc: .long 0
175: result: .long tstloc
176: resul1: .long tstloc+(DISP * BYTE)
177: temp: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.