@@ -60,263 +60,17 @@ const type name = ((type)value)
6060
6161// Debugging support
6262
63- inline void assert_different_registers (
64- AbstractRegister a,
65- AbstractRegister b
66- ) {
67- assert (
68- a != b,
69- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT " " , p2i (a), p2i (b)
70- );
71- }
72-
73-
74- inline void assert_different_registers (
75- AbstractRegister a,
76- AbstractRegister b,
77- AbstractRegister c
78- ) {
79- assert (
80- a != b && a != c
81- && b != c,
82- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
83- " , c=" INTPTR_FORMAT " " ,
84- p2i (a), p2i (b), p2i (c)
85- );
86- }
87-
88-
89- inline void assert_different_registers (
90- AbstractRegister a,
91- AbstractRegister b,
92- AbstractRegister c,
93- AbstractRegister d
94- ) {
95- assert (
96- a != b && a != c && a != d
97- && b != c && b != d
98- && c != d,
99- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
100- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " " ,
101- p2i (a), p2i (b), p2i (c), p2i (d)
102- );
103- }
104-
105-
106- inline void assert_different_registers (
107- AbstractRegister a,
108- AbstractRegister b,
109- AbstractRegister c,
110- AbstractRegister d,
111- AbstractRegister e
112- ) {
113- assert (
114- a != b && a != c && a != d && a != e
115- && b != c && b != d && b != e
116- && c != d && c != e
117- && d != e,
118- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
119- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT " " ,
120- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e)
121- );
122- }
123-
124-
125- inline void assert_different_registers (
126- AbstractRegister a,
127- AbstractRegister b,
128- AbstractRegister c,
129- AbstractRegister d,
130- AbstractRegister e,
131- AbstractRegister f
132- ) {
133- assert (
134- a != b && a != c && a != d && a != e && a != f
135- && b != c && b != d && b != e && b != f
136- && c != d && c != e && c != f
137- && d != e && d != f
138- && e != f,
139- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
140- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT
141- " , f=" INTPTR_FORMAT " " ,
142- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e), p2i (f)
143- );
144- }
145-
146-
147- inline void assert_different_registers (
148- AbstractRegister a,
149- AbstractRegister b,
150- AbstractRegister c,
151- AbstractRegister d,
152- AbstractRegister e,
153- AbstractRegister f,
154- AbstractRegister g
155- ) {
156- assert (
157- a != b && a != c && a != d && a != e && a != f && a != g
158- && b != c && b != d && b != e && b != f && b != g
159- && c != d && c != e && c != f && c != g
160- && d != e && d != f && d != g
161- && e != f && e != g
162- && f != g,
163- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
164- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT
165- " , f=" INTPTR_FORMAT " , g=" INTPTR_FORMAT " " ,
166- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e), p2i (f), p2i (g)
167- );
168- }
169-
170-
171- inline void assert_different_registers (
172- AbstractRegister a,
173- AbstractRegister b,
174- AbstractRegister c,
175- AbstractRegister d,
176- AbstractRegister e,
177- AbstractRegister f,
178- AbstractRegister g,
179- AbstractRegister h
180- ) {
181- assert (
182- a != b && a != c && a != d && a != e && a != f && a != g && a != h
183- && b != c && b != d && b != e && b != f && b != g && b != h
184- && c != d && c != e && c != f && c != g && c != h
185- && d != e && d != f && d != g && d != h
186- && e != f && e != g && e != h
187- && f != g && f != h
188- && g != h,
189- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
190- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT
191- " , f=" INTPTR_FORMAT " , g=" INTPTR_FORMAT " , h=" INTPTR_FORMAT " " ,
192- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e), p2i (f), p2i (g), p2i (h)
193- );
194- }
195-
196-
197- inline void assert_different_registers (
198- AbstractRegister a,
199- AbstractRegister b,
200- AbstractRegister c,
201- AbstractRegister d,
202- AbstractRegister e,
203- AbstractRegister f,
204- AbstractRegister g,
205- AbstractRegister h,
206- AbstractRegister i
207- ) {
208- assert (
209- a != b && a != c && a != d && a != e && a != f && a != g && a != h && a != i
210- && b != c && b != d && b != e && b != f && b != g && b != h && b != i
211- && c != d && c != e && c != f && c != g && c != h && c != i
212- && d != e && d != f && d != g && d != h && d != i
213- && e != f && e != g && e != h && e != i
214- && f != g && f != h && f != i
215- && g != h && g != i
216- && h != i,
217- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
218- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT
219- " , f=" INTPTR_FORMAT " , g=" INTPTR_FORMAT " , h=" INTPTR_FORMAT
220- " , i=" INTPTR_FORMAT " " ,
221- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e), p2i (f), p2i (g), p2i (h), p2i (i)
222- );
223- }
224-
225- inline void assert_different_registers (
226- AbstractRegister a,
227- AbstractRegister b,
228- AbstractRegister c,
229- AbstractRegister d,
230- AbstractRegister e,
231- AbstractRegister f,
232- AbstractRegister g,
233- AbstractRegister h,
234- AbstractRegister i,
235- AbstractRegister j
236- ) {
237- assert (
238- a != b && a != c && a != d && a != e && a != f && a != g && a != h && a != i && a != j
239- && b != c && b != d && b != e && b != f && b != g && b != h && b != i && b != j
240- && c != d && c != e && c != f && c != g && c != h && c != i && c != j
241- && d != e && d != f && d != g && d != h && d != i && d != j
242- && e != f && e != g && e != h && e != i && e != j
243- && f != g && f != h && f != i && f != j
244- && g != h && g != i && g != j
245- && h != i && h != j
246- && i != j,
247- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
248- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT
249- " , f=" INTPTR_FORMAT " , g=" INTPTR_FORMAT " , h=" INTPTR_FORMAT
250- " , i=" INTPTR_FORMAT " , j=" INTPTR_FORMAT " " ,
251- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e), p2i (f), p2i (g), p2i (h), p2i (i), p2i (j)
252- );
253- }
254-
255- inline void assert_different_registers (
256- AbstractRegister a,
257- AbstractRegister b,
258- AbstractRegister c,
259- AbstractRegister d,
260- AbstractRegister e,
261- AbstractRegister f,
262- AbstractRegister g,
263- AbstractRegister h,
264- AbstractRegister i,
265- AbstractRegister j,
266- AbstractRegister k
267- ) {
268- assert (
269- a != b && a != c && a != d && a != e && a != f && a != g && a != h && a != i && a != j && a !=k
270- && b != c && b != d && b != e && b != f && b != g && b != h && b != i && b != j && b !=k
271- && c != d && c != e && c != f && c != g && c != h && c != i && c != j && c !=k
272- && d != e && d != f && d != g && d != h && d != i && d != j && d !=k
273- && e != f && e != g && e != h && e != i && e != j && e !=k
274- && f != g && f != h && f != i && f != j && f !=k
275- && g != h && g != i && g != j && g !=k
276- && h != i && h != j && h !=k
277- && i != j && i !=k
278- && j !=k,
279- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
280- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT
281- " , f=" INTPTR_FORMAT " , g=" INTPTR_FORMAT " , h=" INTPTR_FORMAT
282- " , i=" INTPTR_FORMAT " , j=" INTPTR_FORMAT " , k=" INTPTR_FORMAT " " ,
283- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e), p2i (f), p2i (g), p2i (h), p2i (i), p2i (j), p2i (k)
284- );
285- }
286-
287- inline void assert_different_registers (
288- AbstractRegister a,
289- AbstractRegister b,
290- AbstractRegister c,
291- AbstractRegister d,
292- AbstractRegister e,
293- AbstractRegister f,
294- AbstractRegister g,
295- AbstractRegister h,
296- AbstractRegister i,
297- AbstractRegister j,
298- AbstractRegister k,
299- AbstractRegister l
300- ) {
301- assert (
302- a != b && a != c && a != d && a != e && a != f && a != g && a != h && a != i && a != j && a !=k && a !=l
303- && b != c && b != d && b != e && b != f && b != g && b != h && b != i && b != j && b !=k && b !=l
304- && c != d && c != e && c != f && c != g && c != h && c != i && c != j && c !=k && c !=l
305- && d != e && d != f && d != g && d != h && d != i && d != j && d !=k && d !=l
306- && e != f && e != g && e != h && e != i && e != j && e !=k && e !=l
307- && f != g && f != h && f != i && f != j && f !=k && f !=l
308- && g != h && g != i && g != j && g !=k && g !=l
309- && h != i && h != j && h !=k && h !=l
310- && i != j && i !=k && i !=l
311- && j !=k && j !=l
312- && k !=l,
313- " registers must be different: a=" INTPTR_FORMAT " , b=" INTPTR_FORMAT
314- " , c=" INTPTR_FORMAT " , d=" INTPTR_FORMAT " , e=" INTPTR_FORMAT
315- " , f=" INTPTR_FORMAT " , g=" INTPTR_FORMAT " , h=" INTPTR_FORMAT
316- " , i=" INTPTR_FORMAT " , j=" INTPTR_FORMAT " , k=" INTPTR_FORMAT
317- " , l=" INTPTR_FORMAT " " ,
318- p2i (a), p2i (b), p2i (c), p2i (d), p2i (e), p2i (f), p2i (g), p2i (h), p2i (i), p2i (j), p2i (k), p2i (l)
319- );
63+ template <typename R, typename ... Rx>
64+ inline void assert_different_registers (R first_register, Rx... more_registers) {
65+ #ifdef ASSERT
66+ const R regs[] = { first_register, more_registers... };
67+ // Verify there are no equal entries.
68+ for (size_t i = 0 ; i < ARRAY_SIZE (regs) - 1 ; ++i) {
69+ for (size_t j = i + 1 ; j < ARRAY_SIZE (regs); ++j) {
70+ assert (regs[i] != regs[j], " Multiple uses of register: %s" , regs[i]->name ());
71+ }
72+ }
73+ #endif
32074}
32175
32276#endif // SHARE_ASM_REGISTER_HPP
0 commit comments