|
|
1.1 root 1: /* MOVAW instruction test */
2: /* MOVL,MOVW,MOVB have been tested prior to this test */
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 _movaw
34: _movaw:
35: callf $4,_setjmp /* save context for error return */
36: movab _movaw,_stpc /* save subtest starting address */
37: movl $1,_subtst /* subtest number */
38: movl $1,_no_opr /* number of operands in use */
39: movl $MAXPOSL,_opr /* first operand */
40: 0: bicpsw $(IV|T) /* disable exceptions */
41: movaw1:
42: movl $MAXPOSL,tstloc /* initialize tstloc */
43: bispsw $(N|Z|V|C) /* set n,z,v,c flags */
44: movaw 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 = psl MAYBE it is incorrect */
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 /* error if not */
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 subtest starting address */
66: movl $2,_subtst /* subtest number */
67: movl $1,_no_opr /* number of operands in use */
68: movl $MAXPOSL,_opr /* first operand */
69: 0: movaw (r3),temp /* move address in r3 to temp */
70: cmpl temp,result /* compare result */
71: jeql chkflag /* error if not */
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: /* TESTING CONDITION FLAGS */
78: chkflag:
79: bbs $0,_force_lp,0b /* if set loop on last subtest */
80: am3: callf $4,_setjmp /* save context for error return */
81: movab am3,_stpc /* save subtest starting address */
82: movl $3,_subtst /* subtest number */
83: movl $1,_no_opr /* number of operands in use */
84: movl $MAXNEGL,_opr /* first operand */
85: 0: movl $0,temp /* clear temp */
86: movl $MAXNEGL,r3 /* set r3 = $MAXNEGL */
87: bispsw $(Z|V|C) /* set z,v,c flags */
88: bicpsw $N /* clear n flag */
89: movaw (r3),temp /* move adr. in r3 to temp */
90: jgeq error2 /* error if n flag not set */
91: jeql error2 /* error if z flag still set */
92: jvs error2 /* error if v flag still set */
93: jcc error2 /* error if c flag clear */
94: jmp 1f
95: error2: movpsl _actual /* actual = psl MAYBE it is incorrect */
96: bbs $0,_scoplp,0b /* if set scope loop on error */
97: movl $2,_ercode /* error code flag failure */
98: jmp *badrtn
99: 1: cmpl temp,$MAXNEGL /* check address in temp */
100: jeql 1f /* error if not */
101: bbs $0,_scoplp,0b /* if set scope loop on error */
102: movl $1,_ercode /* error code data miscompare */
103: movl temp,_actual /* actual data */
104: movl $MAXNEGL,_expected /* expected data */
105: jmp *badrtn
106: 1: bicpsw $Z
107: cmpl r3,$MAXNEGL /* check source */
108: jeql m4 /* error if not */
109: bbs $0,_scoplp,0b /* if set scope loop on error */
110: movl $3,_ercode /* error code operand was modified */
111: movl r4,_actual /* actual data */
112: movl $MAXNEGL,_expected /* expected data */
113: jmp *badrtn
114:
115: m4:
116: bbs $0,_force_lp,0b /* if set loop on last subtest */
117: am4: callf $4,_setjmp /* save context for error return */
118: movab am4,_stpc /* save subtest starting address */
119: movl $4,_subtst /* subtest number */
120: movl $1,_no_opr /* number of operands in use */
121: movl $MAXNEGL,_opr /* first operand */
122: 0: movl $ONES,temp /* set temp = 0xffffffff */
123: movl $0,r3 /* set r3 = $0 */
124: bispsw $(N|V) /* set n,v flags */
125: bicpsw $(Z|C) /* clear z,c flag */
126: moval (r3),temp /* move adr. in r3 to temp */
127: jlss error3 /* error if n flag still set */
128: jneq error3 /* error if z flag not set */
129: jvs error3 /* error if v flag still set */
130: jcc error3 /* error if c flag clear */
131: jmp 1f
132: error3: movpsl _actual /* actual = psl MAYBE it is incorrect */
133: bbs $0,_scoplp,0b /* if set scope loop on error */
134: movl $2,_ercode /* error code flag failure */
135: jmp *badrtn
136: 1: cmpl temp,$0 /* check address in temp */
137: jeql 1f /* error if not */
138: bbs $0,_scoplp,0b /* if set scope loop on error */
139: movl $1,_ercode /* error code data miscompare */
140: movl temp,_actual /* actual data */
141: movl $0,_expected /* expected data */
142: jmp *badrtn
143: 1: bicpsw $Z
144: cmpl r3,$0 /* check source */
145: jeql m5 /* error if not */
146: bbs $0,_scoplp,0b /* if set scope loop on error */
147: movl $3,_ercode /* error code operand was modified */
148: movl r3,_actual /* actual data */
149: movl $0,_expected /* expected data */
150: jmp *badrtn
151: /* CHECKING INDEXING MODE */
152: m5:
153: bbs $0,_force_lp,0b /* if set loop on last subtest */
154: am5: callf $4,_setjmp /* save context for error return */
155: movab am5,_stpc /* save subtest starting address */
156: movl $5,_subtst /* subtest number */
157: movl $1,_no_opr /* number of operands in use */
158: movl $DISP,_opr /* first operand */
159: 0: movl $DISP,r3 /* set r3 = DISP = 2 */
160: bispsw $(N|Z|V|C) /* set n,z,v,c flags */
161: movaw tstloc[r3],r4 /* move address tstloc to r4 */
162: jlss error4 /* error if any of the n,z,v */
163: jeql error4 /* flags still set */
164: jvs error4
165: jcc error4 /* error if c flag clear */
166: jmp 1f
167: error4: movpsl _actual /* actual = psl MAYBE it is incorrect */
168: bbs $0,_scoplp,0b /* if set scope loop on error */
169: movl $2,_ercode /* error code flag failure */
170: jmp *badrtn
171: 1: cmpl r4,resul1 /* check if r4 has valid adr. */
172: jeql aldn /* error if not */
173: bbs $0,_scoplp,0b /* if set scope loop on error */
174: movl $1,_ercode /* error code data miscompare */
175: movl r4,_actual /* actual data */
176: movl resul1,_expected /* expected data */
177: jmp *badrtn
178:
179: aldn: bbs $0,_force_lp,0b /* if set loop on last subtest */
180: jmp *return
181:
182:
183: /* test data */
184: .align 2 /* align on longword boundary */
185: tstloc: .long 0
186: result: .long tstloc
187: resul1: .long tstloc+(DISP*WORD)
188: temp: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.