1//  Immediate SHIFT test program.
2//  Test  r4 = ASHIFT (r2 by 10);
3//  Test  r4 = LSHIFT (r2 by 10);
4//  Test  r4 = ROT    (r2 by 10);
5# mach: bfin
6
7.include "testutils.inc"
8	start
9
10
11	init_r_regs 0;
12	ASTAT = R0;
13
14// load r0=0x80000001
15// load r1=0x00000000
16// load r2=0x00000000
17// load r3=0x00000000
18// load r4=0x00000000
19// load r5=0x00000000
20	loadsym P0, data0;
21	R0 = [ P0 ++ ];
22	R1 = [ P0 ++ ];
23	R2 = [ P0 ++ ];
24	R3 = [ P0 ++ ];
25	R4 = [ P0 ++ ];
26	R5 = [ P0 ++ ];
27
28// arithmetic
29//  left by largest positive magnitude of 31 (0x1f)
30// 8000 0001 -> 8000 0000
31	R7 = 0;
32	ASTAT = R7;
33	R6 = R0 << 31;
34	DBGA ( R6.L , 0x0000 );
35	DBGA ( R6.H , 0x8000 );
36	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
37	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
38	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
39	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
40	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
41
42// arithmetic
43//  left by 1
44// 8000 0001 -> 0000 0002
45	R6 = R0 << 1;
46	DBGA ( R6.L , 0x0002 );
47	DBGA ( R6.H , 0x0000 );
48	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
49	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
50	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
51	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
52	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
53
54// arithmetic
55//  right by 1
56// 8000 0001 -> c000 0000
57	R7 = 0;
58	ASTAT = R7;
59	R6 = R0 >>> 1;
60	DBGA ( R6.L , 0x0000 );
61	DBGA ( R6.H , 0xc000 );
62	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x0 );
63	CC = AN;	R7 = CC; DBGA ( R7.L , 0x1 );
64	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
65	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
66	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
67
68// arithmetic
69//  right by largest negative magnitude of -31
70// 8000 0001 -> ffff ffff
71	R6 = R0 >>> 31;
72	DBGA ( R6.L , 0xffff );
73	DBGA ( R6.H , 0xffff );
74
75// logic
76//  left by largest positive magnitude of 31 (0x1f)
77// 8000 0001 -> 8000 0000
78	R6 = R0 << 31;
79	DBGA ( R6.L , 0x0000 );
80	DBGA ( R6.H , 0x8000 );
81
82// logic
83//  left by 1
84// 8000 0001 -> 0000 0002
85	R6 = R0 << 1;
86	DBGA ( R6.L , 0x0002 );
87	DBGA ( R6.H , 0x0000 );
88
89// logic
90//  right by 1
91// 8000 0001 -> 4000 0000
92	R6 = R0 >> 1;
93	DBGA ( R6.L , 0x0000 );
94	DBGA ( R6.H , 0x4000 );
95
96// logic
97//  right by largest negative magnitude of -31
98// 8000 0001 -> 0000 0001
99	R6 = R0 >> 31;
100	DBGA ( R6.L , 0x0001 );
101	DBGA ( R6.H , 0x0000 );
102
103// rot
104//  left  by 1
105// 8000 0001 -> 0000 0002 cc=1
106	R7 = 0;
107	CC = R7;
108	R6 = ROT R0 BY 1;
109	DBGA ( R6.L , 0x0002 );
110	DBGA ( R6.H , 0x0000 );
111	R7 = CC;
112	DBGA ( R7.L , 0x0001 );
113
114// rot
115//  right by -1
116// 8000 0001 -> 4000 0000 cc=1
117	R7 = 0;
118	CC = R7;
119	R6 = ROT R0 BY -1;
120	DBGA ( R6.L , 0x0000 );
121	DBGA ( R6.H , 0x4000 );
122	R7 = CC;
123	DBGA ( R7.L , 0x0001 );
124
125// rot
126//  right by largest positive magnitude of 31
127// 8000 0001 -> a000 0000 cc=0
128	R7 = 0;
129	CC = R7;
130	R6 = ROT R0 BY 31;
131	DBGA ( R6.L , 0x0000 );
132	DBGA ( R6.H , 0xa000 );
133	R7 = CC;
134	DBGA ( R7.L , 0x0000 );
135
136// rot
137//  right by largest positive magnitude of 31 with cc=1
138// 8000 0001 cc=1 -> a000 0000 cc=0
139	R7 = 1;
140	CC = R7;
141	R6 = ROT R0 BY 31;
142	DBGA ( R6.L , 0x0000 );
143	DBGA ( R6.H , 0xe000 );
144	R7 = CC;
145	DBGA ( R7.L , 0x0000 );
146
147// rot
148//  right by largest negative magnitude of -31
149// 8000 0001 -> 0000 0005 cc=0
150	R7 = 0;
151	CC = R7;
152	R6 = ROT R0 BY -31;
153	DBGA ( R6.L , 0x0005 );
154	DBGA ( R6.H , 0x0000 );
155	R7 = CC;
156	DBGA ( R7.L , 0x0000 );
157
158// rot
159//  right by largest negative magnitude of -31 with cc=1
160// 8000 0001 cc=1 -> 0000 0007 cc=0
161	R7 = 1;
162	CC = R7;
163	R6 = ROT R0 BY -31;
164	DBGA ( R6.L , 0x0007 );
165	DBGA ( R6.H , 0x0000 );
166	R7 = CC;
167	DBGA ( R7.L , 0x0000 );
168
169// rot
170//  left by 7
171// 8000 0001 cc=1 -> 0000 00e0 cc=0
172	R7 = 1;
173	CC = R7;
174	R6 = ROT R0 BY 7;
175	DBGA ( R6.L , 0x00e0 );
176	DBGA ( R6.H , 0x0000 );
177	R7 = CC;
178	DBGA ( R7.L , 0x0000 );
179
180// rot by zero
181// 8000 0001 -> 8000 000
182	R7 = 1;
183	CC = R7;
184	R6 = ROT R0 BY 0;
185	DBGA ( R6.L , 0x0001 );
186	DBGA ( R6.H , 0x8000 );
187	R7 = CC;
188	DBGA ( R7.L , 0x0001 );
189
190//  0 by 1
191	R7 = 0;
192	R0 = 0;
193	ASTAT = R7;
194	R6 = R0 << 1;
195	DBGA ( R6.L , 0x0000 );
196	DBGA ( R6.H , 0x0000 );
197	CC = AZ;	R7 = CC; DBGA ( R7.L , 0x1 );
198	CC = AN;	R7 = CC; DBGA ( R7.L , 0x0 );
199	CC = AC0;	R7 = CC; DBGA ( R7.L , 0x0 );
200	CC = AV0;	R7 = CC; DBGA ( R7.L , 0x0 );
201	CC = AV1;	R7 = CC; DBGA ( R7.L , 0x0 );
202
203	pass
204
205	.data
206data0:
207	.dw 0x0001
208	.dw 0x8000
209	.dd 0x0000
210	.dd 0x0
211	.dd 0x0
212	.dd 0x0
213	.dd 0x0
214	.dd 0x0
215