Skip to content

Commit 93cab7d

Browse files
author
Kim Barrett
committed
8272315: Improve assert_different_registers
Reviewed-by: adinn, vlivanov, thartmann
1 parent 9980b41 commit 93cab7d

1 file changed

Lines changed: 11 additions & 257 deletions

File tree

src/hotspot/share/asm/register.hpp

Lines changed: 11 additions & 257 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)