1//  Test  A0 = ROT    (A0 by imm6);
2# mach: bfin
3
4.include "testutils.inc"
5	start
6
7	init_r_regs 0;
8	ASTAT = R0;
9	A0 = A1 = 0;
10
11// rot
12// left  by 1
13// 00 8000 0001 -> 01 0000 0002 cc=0
14	R0.L = 0x0001;
15	R0.H = 0x8000;
16	R7 = 0;
17	CC = R7;
18	A1 = A0 = 0;
19	A0.w = R0;
20	A0 = ROT A0 BY 1;
21	R1 = A0.w;
22	DBGA ( R1.L , 0x0002 );
23	DBGA ( R1.H , 0x0000 );
24	R1.L = A0.x;
25	DBGA ( R1.L , 0x0001 );
26	R7 = CC;
27	DBGA ( R7.L , 0x0000 );
28
29// rot
30// left  by 1
31// 80 0000 0001 -> 00 0000 0002 cc=1
32	R7 = 0;
33	CC = R7;
34	R0.L = 0x0001;
35	R0.H = 0x0000;
36	R1.L = 0x0080;
37	A1 = A0 = 0;
38	A0.w = R0;
39	A0.x = R1.L;
40	A0 = ROT A0 BY 1;
41	R1 = A0.w;
42	DBGA ( R1.L , 0x0002 );
43	DBGA ( R1.H , 0x0000 );
44	R1.L = A0.x;
45	DBGA ( R1.L , 0x0000 );
46	R7 = CC;
47	DBGA ( R7.L , 0x0001 );
48
49// rot
50// left  by 1 with cc=1
51// 80 8000 0001 -> 01 0000 0003 cc=1
52	R7 = 1;
53	CC = R7;
54	R0.L = 0x0001;
55	R0.H = 0x8000;
56	R1.L = 0x0080;
57	A1 = A0 = 0;
58	A0.w = R0;
59	A0.x = R1.L;
60	A0 = ROT A0 BY 1;
61	R1 = A0.w;
62	DBGA ( R1.L , 0x0003 );
63	DBGA ( R1.H , 0x0000 );
64	R1.L = A0.x;
65	DBGA ( R1.L , 0x0001 );
66	R7 = CC;
67	DBGA ( R7.L , 0x0001 );
68
69// rot
70// left  by 2 with cc=1
71// 80 0000 0001 -> 00 0000 0007 cc=0
72	R7 = 1;
73	CC = R7;
74	R0.L = 0x0001;
75	R0.H = 0x0000;
76	R1.L = 0x0080;
77	A1 = A0 = 0;
78	A0.w = R0;
79	A0.x = R1.L;
80	A0 = ROT A0 BY 2;
81	R1 = A0.w;
82	DBGA ( R1.L , 0x0007 );
83	DBGA ( R1.H , 0x0000 );
84	R1.L = A0.x;
85	DBGA ( R1.L , 0x0000 );
86	R7 = CC;
87	DBGA ( R7.L , 0x0000 );
88
89// rot
90// left  by 3 with cc=0
91	R7 = 0;
92	CC = R7;
93	R0.L = 0x0001;
94	R0.H = 0x0000;
95	R1.L = 0x0080;
96	A1 = A0 = 0;
97	A0.w = R0;
98	A0.x = R1.L;
99	A0 = ROT A0 BY 3;
100	R1 = A0.w;
101	DBGA ( R1.L , 0x000a );
102	DBGA ( R1.H , 0x0000 );
103	R1.L = A0.x;
104	DBGA ( R1.L , 0x0000 );
105	R7 = CC;
106	DBGA ( R7.L , 0x0000 );
107
108// rot
109// left by largest positive magnitude of 31
110// 80 0000 0001 -> 00 a000 0000 cc=0
111	R7 = 0;
112	CC = R7;
113	R0.L = 0x0001;
114	R0.H = 0x0000;
115	R1.L = 0x0080;
116	A1 = A0 = 0;
117	A0.w = R0;
118	A0.x = R1.L;
119	A0 = ROT A0 BY 31;
120	R1 = A0.w;
121	DBGA ( R1.L , 0x0000 );
122	DBGA ( R1.H , 0xa000 );
123	R1.L = A0.x;
124	DBGA ( R1.L , 0x0000 );
125	R7 = CC;
126	DBGA ( R7.L , 0x0000 );
127
128// rot
129// right  by 1
130// 80 0000 0001 -> 40 0000 0000 cc=1
131	R7 = 0;
132	CC = R7;
133	R0.L = 0x0001;
134	R0.H = 0x0000;
135	R1.L = 0x0080;
136	A1 = A0 = 0;
137	A0.w = R0;
138	A0.x = R1.L;
139	A0 = ROT A0 BY -1;
140	R1 = A0.w;
141	DBGA ( R1.L , 0x0000 );
142	DBGA ( R1.H , 0x0000 );
143	R1.L = A0.x;
144	DBGA ( R1.L , 0x0040 );
145	R7 = CC;
146	DBGA ( R7.L , 0x0001 );
147
148// rot
149// right  by 1
150// 80 0000 0001 -> c0 0000 0000 cc=1
151	R7 = 1;
152	CC = R7;
153	R0.L = 0x0001;
154	R0.H = 0x0000;
155	R1.L = 0x0080;
156	A1 = A0 = 0;
157	A0.w = R0;
158	A0.x = R1.L;
159	A0 = ROT A0 BY -1;
160	R1 = A0.w;
161	DBGA ( R1.L , 0x0000 );
162	DBGA ( R1.H , 0x0000 );
163	R1.L = A0.x;
164	DBGA ( R1.L , 0xffc0 );
165	R7 = CC;
166	DBGA ( R7.L , 0x0001 );
167
168// rot
169// right  by 2
170// 80 0000 0001 -> e0 0000 0000 cc=0
171	R7 = 1;
172	CC = R7;
173	R0.L = 0x0001;
174	R0.H = 0x0000;
175	R1.L = 0x0080;
176	A1 = A0 = 0;
177	A0.w = R0;
178	A0.x = R1.L;
179	A0 = ROT A0 BY -2;
180	R1 = A0.w;
181	DBGA ( R1.L , 0x0000 );
182	DBGA ( R1.H , 0x0000 );
183	R1.L = A0.x;
184	DBGA ( R1.L , 0xffe0 );
185	R7 = CC;
186	DBGA ( R7.L , 0x0000 );
187
188// rot
189// right  by 9
190// 80 0000 0001 -> 01 c000 0000 cc=0
191	R7 = 1;
192	CC = R7;
193	R0.L = 0x0001;
194	R0.H = 0x0000;
195	R1.L = 0x0080;
196	A1 = A0 = 0;
197	A0.w = R0;
198	A0.x = R1.L;
199	A0 = ROT A0 BY -9;
200	R1 = A0.w;
201	DBGA ( R1.L , 0x0000 );
202	DBGA ( R1.H , 0xc000 );
203	R1.L = A0.x;
204	DBGA ( R1.L , 0x0001 );
205	R7 = CC;
206	DBGA ( R7.L , 0x0000 );
207
208// rot
209// right  by 9 with reg
210// 80 0000 0001 -> 01 c000 0000 cc=0
211	R7 = 1;
212	CC = R7;
213	R0.L = 0x0001;
214	R0.H = 0x0000;
215	R1.L = 0x0080;
216	A1 = A0 = 0;
217	A0.w = R0;
218	A0.x = R1.L;
219	R5 = -9;
220	A0 = ROT A0 BY R5.L;
221	R1 = A0.w;
222	DBGA ( R1.L , 0x0000 );
223	DBGA ( R1.H , 0xc000 );
224	R1.L = A0.x;
225	DBGA ( R1.L , 0x0001 );
226	R7 = CC;
227	DBGA ( R7.L , 0x0000 );
228
229// rot left by 4 with cc=1
230	R0.L = 0x789a;
231	R0.H = 0x3456;
232	A0.w = R0;
233	R0.L = 0x12;
234	A0.x = R0;
235
236	R0 = 1;
237	CC = R0;
238
239	A0 = ROT A0 BY 4;
240
241	R4 = A0.w;
242	R5 = A0.x;
243	DBGA ( R4.H , 0x4567 );	DBGA ( R4.L , 0x89a8 );
244	DBGA ( R5.H , 0x0000 );	DBGA ( R5.L , 0x0023 );
245
246// rot left by 28 with cc=1
247	R0.L = 0x789a;
248	R0.H = 0x3456;
249	A0.w = R0;
250	R0.L = 0x12;
251	A0.x = R0;
252
253	R0 = 1;
254	CC = R0;
255
256	A0 = ROT A0 BY 28;
257
258	R4 = A0.w;
259	R5 = A0.x;
260	DBGA ( R4.H , 0xa891 );	DBGA ( R4.L , 0xa2b3 );
261	DBGA ( R5.H , 0xffff );	DBGA ( R5.L , 0xff89 );
262
263// rot right by 4 with cc=1
264	R0.L = 0x789a;
265	R0.H = 0x3456;
266	A0.w = R0;
267	R0.L = 0x12;
268	A0.x = R0;
269
270	R0 = 1;
271	CC = R0;
272
273	A0 = ROT A0 BY -4;
274
275	R4 = A0.w;
276	R5 = A0.x;
277	DBGA ( R4.H , 0x2345 );	DBGA ( R4.L , 0x6789 );
278	DBGA ( R5.H , 0x0000 );	DBGA ( R5.L , 0x0051 );
279
280// rot right by 8 with cc=1
281	R0.L = 0x789a;
282	R0.H = 0x3456;
283	A0.w = R0;
284	R0.L = 0x12;
285	A0.x = R0;
286
287	R0 = 1;
288	CC = R0;
289
290	A0 = ROT A0 BY -28;
291
292	R4 = A0.w;
293	R5 = A0.x;
294	DBGA ( R4.H , 0xcf13 );	DBGA ( R4.L , 0x5123 );
295	DBGA ( R5.H , 0xffff );	DBGA ( R5.L , 0xff8a );
296
297	pass
298