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