240 assert(0 <= i && i < _size, "offset out of bounds");
241 _mask[i / BitsPerWord] |= (((uintptr_t) 1 << InterpreterOopMap::oop_bit_number) << (i % BitsPerWord));
242 }
243
244 public:
245 void pass_int() { /* ignore */ }
246 void pass_long() { /* ignore */ }
247 void pass_float() { /* ignore */ }
248 void pass_double() { /* ignore */ }
249 void pass_object() { set_one(offset()); }
250
251 MaskFillerForNative(const methodHandle& method, uintptr_t* mask, int size) : NativeSignatureIterator(method) {
252 _mask = mask;
253 _size = size;
254 // initialize with 0
255 int i = (size + BitsPerWord - 1) / BitsPerWord;
256 while (i-- > 0) _mask[i] = 0;
257 }
258
259 void generate() {
260 NativeSignatureIterator::iterate();
261 }
262 };
263
264 bool OopMapCacheEntry::verify_mask(CellTypeState* vars, CellTypeState* stack, int max_locals, int stack_top) {
265 // Check mask includes map
266 VerifyClosure blk(this);
267 iterate_oop(&blk);
268 if (blk.failed()) return false;
269
270 // Check if map is generated correctly
271 // (Use ?: operator to make sure all 'true' & 'false' are represented exactly the same so we can use == afterwards)
272 Log(interpreter, oopmap) logv;
273 LogStream st(logv.trace());
274
275 st.print("Locals (%d): ", max_locals);
276 for(int i = 0; i < max_locals; i++) {
277 bool v1 = is_oop(i) ? true : false;
278 bool v2 = vars[i].is_reference() ? true : false;
279 assert(v1 == v2, "locals oop mask generation error");
280 st.print("%d", v1 ? 1 : 0);
|
240 assert(0 <= i && i < _size, "offset out of bounds");
241 _mask[i / BitsPerWord] |= (((uintptr_t) 1 << InterpreterOopMap::oop_bit_number) << (i % BitsPerWord));
242 }
243
244 public:
245 void pass_int() { /* ignore */ }
246 void pass_long() { /* ignore */ }
247 void pass_float() { /* ignore */ }
248 void pass_double() { /* ignore */ }
249 void pass_object() { set_one(offset()); }
250
251 MaskFillerForNative(const methodHandle& method, uintptr_t* mask, int size) : NativeSignatureIterator(method) {
252 _mask = mask;
253 _size = size;
254 // initialize with 0
255 int i = (size + BitsPerWord - 1) / BitsPerWord;
256 while (i-- > 0) _mask[i] = 0;
257 }
258
259 void generate() {
260 iterate();
261 }
262 };
263
264 bool OopMapCacheEntry::verify_mask(CellTypeState* vars, CellTypeState* stack, int max_locals, int stack_top) {
265 // Check mask includes map
266 VerifyClosure blk(this);
267 iterate_oop(&blk);
268 if (blk.failed()) return false;
269
270 // Check if map is generated correctly
271 // (Use ?: operator to make sure all 'true' & 'false' are represented exactly the same so we can use == afterwards)
272 Log(interpreter, oopmap) logv;
273 LogStream st(logv.trace());
274
275 st.print("Locals (%d): ", max_locals);
276 for(int i = 0; i < max_locals; i++) {
277 bool v1 = is_oop(i) ? true : false;
278 bool v2 = vars[i].is_reference() ? true : false;
279 assert(v1 == v2, "locals oop mask generation error");
280 st.print("%d", v1 ? 1 : 0);
|