< prev index next >

src/hotspot/share/interpreter/oopMapCache.cpp

Print this page




 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);


< prev index next >