1# frv testcase for cswap @($GRi,$GRj),$GRk,$CCi,$cond
2# mach: all
3
4	.include "testutils.inc"
5
6	start
7
8	.global cswap
9cswap:
10	set_spr_immed	0x1b1b,cccr
11
12	set_gr_gr		sp,gr20
13	set_mem_limmed		0xdead,0xbeef,sp
14	inc_gr_immed		-4,sp
15	set_gr_gr		sp,gr21
16	set_mem_limmed		0xbeef,0xdead,sp
17	inc_gr_immed		-4,sp
18	set_gr_gr		sp,gr22
19	set_mem_limmed		0xdead,0xbeef,sp
20	inc_gr_immed		4,sp
21
22	set_gr_limmed		0xbeef,0xdead,gr8
23	set_gr_immed		-4,gr7
24	cswap @(sp,gr7),gr8,cc0,1
25	test_gr_limmed		0xdead,0xbeef,gr8
26	test_mem_limmed		0xbeef,0xdead,gr22
27	test_mem_limmed		0xbeef,0xdead,gr21
28	test_mem_limmed		0xdead,0xbeef,gr20
29
30	set_gr_immed		0,gr7
31	cswap @(sp,gr7),gr8,cc0,1
32	test_gr_limmed		0xbeef,0xdead,gr8
33	test_mem_limmed		0xbeef,0xdead,gr22
34	test_mem_limmed		0xdead,0xbeef,gr21
35	test_mem_limmed		0xdead,0xbeef,gr20
36
37	set_gr_immed		4,gr7
38	cswap @(sp,gr7),gr8,cc4,1
39	test_gr_limmed		0xdead,0xbeef,gr8
40	test_mem_limmed		0xbeef,0xdead,gr22
41	test_mem_limmed		0xdead,0xbeef,gr21
42	test_mem_limmed		0xbeef,0xdead,gr20
43
44	set_gr_gr		gr20,sp
45	set_mem_limmed		0xdead,0xbeef,sp
46	inc_gr_immed		-4,sp
47	set_gr_gr		sp,gr21
48	set_mem_limmed		0xbeef,0xdead,sp
49	inc_gr_immed		-4,sp
50	set_gr_gr		sp,gr22
51	set_mem_limmed		0xdead,0xbeef,sp
52	inc_gr_immed		4,sp
53
54	set_gr_limmed		0xbeef,0xdead,gr8
55	set_gr_immed		-4,gr7
56	cswap @(sp,gr7),gr8,cc0,0
57	test_gr_limmed		0xbeef,0xdead,gr8
58	test_mem_limmed		0xdead,0xbeef,gr22
59	test_mem_limmed		0xbeef,0xdead,gr21
60	test_mem_limmed		0xdead,0xbeef,gr20
61
62	set_gr_limmed		0xdead,0xbeef,gr8
63	set_gr_immed		0,gr7
64	cswap @(sp,gr7),gr8,cc0,0
65	test_gr_limmed		0xdead,0xbeef,gr8
66	test_mem_limmed		0xdead,0xbeef,gr22
67	test_mem_limmed		0xbeef,0xdead,gr21
68	test_mem_limmed		0xdead,0xbeef,gr20
69
70	set_gr_limmed		0xbeef,0xdead,gr8
71	set_gr_immed		4,gr7
72	cswap @(sp,gr7),gr8,cc4,0
73	test_gr_limmed		0xbeef,0xdead,gr8
74	test_mem_limmed		0xdead,0xbeef,gr22
75	test_mem_limmed		0xbeef,0xdead,gr21
76	test_mem_limmed		0xdead,0xbeef,gr20
77
78	set_gr_gr		gr20,sp
79	set_mem_limmed		0xdead,0xbeef,sp
80	inc_gr_immed		-4,sp
81	set_gr_gr		sp,gr21
82	set_mem_limmed		0xbeef,0xdead,sp
83	inc_gr_immed		-4,sp
84	set_gr_gr		sp,gr22
85	set_mem_limmed		0xdead,0xbeef,sp
86	inc_gr_immed		4,sp
87
88	set_gr_limmed		0xbeef,0xdead,gr8
89	set_gr_immed		-4,gr7
90	cswap @(sp,gr7),gr8,cc1,0
91	test_gr_limmed		0xdead,0xbeef,gr8
92	test_mem_limmed		0xbeef,0xdead,gr22
93	test_mem_limmed		0xbeef,0xdead,gr21
94	test_mem_limmed		0xdead,0xbeef,gr20
95
96	set_gr_immed		0,gr7
97	cswap @(sp,gr7),gr8,cc1,0
98	test_gr_limmed		0xbeef,0xdead,gr8
99	test_mem_limmed		0xbeef,0xdead,gr22
100	test_mem_limmed		0xdead,0xbeef,gr21
101	test_mem_limmed		0xdead,0xbeef,gr20
102
103	set_gr_immed		4,gr7
104	cswap @(sp,gr7),gr8,cc5,0
105	test_gr_limmed		0xdead,0xbeef,gr8
106	test_mem_limmed		0xbeef,0xdead,gr22
107	test_mem_limmed		0xdead,0xbeef,gr21
108	test_mem_limmed		0xbeef,0xdead,gr20
109
110	set_gr_gr		gr20,sp
111	set_mem_limmed		0xdead,0xbeef,sp
112	inc_gr_immed		-4,sp
113	set_gr_gr		sp,gr21
114	set_mem_limmed		0xbeef,0xdead,sp
115	inc_gr_immed		-4,sp
116	set_gr_gr		sp,gr22
117	set_mem_limmed		0xdead,0xbeef,sp
118	inc_gr_immed		4,sp
119
120	set_gr_limmed		0xbeef,0xdead,gr8
121	set_gr_immed		-4,gr7
122	cswap @(sp,gr7),gr8,cc1,1
123	test_gr_limmed		0xbeef,0xdead,gr8
124	test_mem_limmed		0xdead,0xbeef,gr22
125	test_mem_limmed		0xbeef,0xdead,gr21
126	test_mem_limmed		0xdead,0xbeef,gr20
127
128	set_gr_limmed		0xdead,0xbeef,gr8
129	set_gr_immed		0,gr7
130	cswap @(sp,gr7),gr8,cc1,1
131	test_gr_limmed		0xdead,0xbeef,gr8
132	test_mem_limmed		0xdead,0xbeef,gr22
133	test_mem_limmed		0xbeef,0xdead,gr21
134	test_mem_limmed		0xdead,0xbeef,gr20
135
136	set_gr_limmed		0xbeef,0xdead,gr8
137	set_gr_immed		4,gr7
138	cswap @(sp,gr7),gr8,cc5,1
139	test_gr_limmed		0xbeef,0xdead,gr8
140	test_mem_limmed		0xdead,0xbeef,gr22
141	test_mem_limmed		0xbeef,0xdead,gr21
142	test_mem_limmed		0xdead,0xbeef,gr20
143
144	set_gr_gr		gr20,sp
145	set_mem_limmed		0xdead,0xbeef,sp
146	inc_gr_immed		-4,sp
147	set_gr_gr		sp,gr21
148	set_mem_limmed		0xbeef,0xdead,sp
149	inc_gr_immed		-4,sp
150	set_gr_gr		sp,gr22
151	set_mem_limmed		0xdead,0xbeef,sp
152	inc_gr_immed		4,sp
153
154	set_gr_limmed		0xbeef,0xdead,gr8
155	set_gr_immed		-4,gr7
156	cswap @(sp,gr7),gr8,cc2,0
157	test_gr_limmed		0xbeef,0xdead,gr8
158	test_mem_limmed		0xdead,0xbeef,gr22
159	test_mem_limmed		0xbeef,0xdead,gr21
160	test_mem_limmed		0xdead,0xbeef,gr20
161
162	set_gr_limmed		0xdead,0xbeef,gr8
163	set_gr_immed		0,gr7
164	cswap @(sp,gr7),gr8,cc2,1
165	test_gr_limmed		0xdead,0xbeef,gr8
166	test_mem_limmed		0xdead,0xbeef,gr22
167	test_mem_limmed		0xbeef,0xdead,gr21
168	test_mem_limmed		0xdead,0xbeef,gr20
169
170	set_gr_limmed		0xbeef,0xdead,gr8
171	set_gr_immed		4,gr7
172	cswap @(sp,gr7),gr8,cc6,0
173	test_gr_limmed		0xbeef,0xdead,gr8
174	test_mem_limmed		0xdead,0xbeef,gr22
175	test_mem_limmed		0xbeef,0xdead,gr21
176	test_mem_limmed		0xdead,0xbeef,gr20
177
178	set_gr_gr		gr20,sp
179	set_mem_limmed		0xdead,0xbeef,sp
180	inc_gr_immed		-4,sp
181	set_gr_gr		sp,gr21
182	set_mem_limmed		0xbeef,0xdead,sp
183	inc_gr_immed		-4,sp
184	set_gr_gr		sp,gr22
185	set_mem_limmed		0xdead,0xbeef,sp
186	inc_gr_immed		4,sp
187
188	set_gr_limmed		0xbeef,0xdead,gr8
189	set_gr_immed		-4,gr7
190	cswap @(sp,gr7),gr8,cc3,1
191	test_gr_limmed		0xbeef,0xdead,gr8
192	test_mem_limmed		0xdead,0xbeef,gr22
193	test_mem_limmed		0xbeef,0xdead,gr21
194	test_mem_limmed		0xdead,0xbeef,gr20
195
196	set_gr_limmed		0xdead,0xbeef,gr8
197	set_gr_immed		0,gr7
198	cswap @(sp,gr7),gr8,cc3,0
199	test_gr_limmed		0xdead,0xbeef,gr8
200	test_mem_limmed		0xdead,0xbeef,gr22
201	test_mem_limmed		0xbeef,0xdead,gr21
202	test_mem_limmed		0xdead,0xbeef,gr20
203
204	set_gr_limmed		0xbeef,0xdead,gr8
205	set_gr_immed		4,gr7
206	cswap @(sp,gr7),gr8,cc7,1
207	test_gr_limmed		0xbeef,0xdead,gr8
208	test_mem_limmed		0xdead,0xbeef,gr22
209	test_mem_limmed		0xbeef,0xdead,gr21
210	test_mem_limmed		0xdead,0xbeef,gr20
211
212	pass
213