48
48
49
49
// OopMapStream
50
50
51
- OopMapStream::OopMapStream (OopMap* oop_map, int oop_types_mask ) {
51
+ OopMapStream::OopMapStream (OopMap* oop_map) {
52
52
_stream = new CompressedReadStream (oop_map->write_stream ()->buffer ());
53
- _mask = oop_types_mask;
54
53
_size = oop_map->omv_count ();
55
54
_position = 0 ;
56
55
_valid_omv = false ;
57
56
}
58
57
59
- OopMapStream::OopMapStream (const ImmutableOopMap* oop_map, int oop_types_mask ) {
58
+ OopMapStream::OopMapStream (const ImmutableOopMap* oop_map) {
60
59
_stream = new CompressedReadStream (oop_map->data_addr ());
61
- _mask = oop_types_mask;
62
60
_size = oop_map->count ();
63
61
_position = 0 ;
64
62
_valid_omv = false ;
65
63
}
66
64
67
65
void OopMapStream::find_next () {
68
- while (_position++ < _size) {
66
+ if (_position++ < _size) {
69
67
_omv.read_from (_stream);
70
- if (((int )_omv.type () & _mask) > 0 ) {
71
- _valid_omv = true ;
72
- return ;
73
- }
68
+ _valid_omv = true ;
69
+ return ;
74
70
}
75
71
_valid_omv = false ;
76
72
}
@@ -140,16 +136,7 @@ void OopMap::set_xxx(VMReg reg, OopMapValue::oop_types x, VMReg optional) {
140
136
assert ( _locs_used[reg->value ()] == OopMapValue::unused_value, " cannot insert twice" );
141
137
debug_only ( _locs_used[reg->value ()] = x; )
142
138
143
- OopMapValue o (reg, x);
144
-
145
- if (x == OopMapValue::callee_saved_value) {
146
- // This can never be a stack location, so we don't need to transform it.
147
- assert (optional->is_reg (), " Trying to callee save a stack location" );
148
- o.set_content_reg (optional);
149
- } else if (x == OopMapValue::derived_oop_value) {
150
- o.set_content_reg (optional);
151
- }
152
-
139
+ OopMapValue o (reg, x, optional);
153
140
o.write_on (write_stream ());
154
141
increment_count ();
155
142
}
@@ -160,11 +147,6 @@ void OopMap::set_oop(VMReg reg) {
160
147
}
161
148
162
149
163
- void OopMap::set_value (VMReg reg) {
164
- // At this time, we don't need value entries in our OopMap.
165
- }
166
-
167
-
168
150
void OopMap::set_narrowoop (VMReg reg) {
169
151
set_xxx (reg, OopMapValue::narrowoop_value, VMRegImpl::Bad ());
170
152
}
@@ -328,7 +310,7 @@ void OopMapSet::all_do(const frame *fr, const RegisterMap *reg_map,
328
310
// changed before derived pointer offset has been collected)
329
311
OopMapValue omv;
330
312
{
331
- OopMapStream oms (map,OopMapValue::derived_oop_value );
313
+ OopMapStream oms (map);
332
314
if (!oms.is_done ()) {
333
315
#ifndef TIERED
334
316
COMPILER1_PRESENT (ShouldNotReachHere ();)
@@ -340,27 +322,28 @@ void OopMapSet::all_do(const frame *fr, const RegisterMap *reg_map,
340
322
#endif // !TIERED
341
323
do {
342
324
omv = oms.current ();
343
- oop* loc = fr->oopmapreg_to_location (omv.reg (),reg_map);
344
- guarantee (loc != NULL , " missing saved register" );
345
- oop *derived_loc = loc;
346
- oop *base_loc = fr->oopmapreg_to_location (omv.content_reg (), reg_map);
347
- // Ignore NULL oops and decoded NULL narrow oops which
348
- // equal to CompressedOops::base() when a narrow oop
349
- // implicit null check is used in compiled code.
350
- // The narrow_oop_base could be NULL or be the address
351
- // of the page below heap depending on compressed oops mode.
352
- if (base_loc != NULL && *base_loc != NULL && !CompressedOops::is_base (*base_loc)) {
353
- derived_oop_fn (base_loc, derived_loc);
325
+ if (omv.type () == OopMapValue::derived_oop_value) {
326
+ oop* loc = fr->oopmapreg_to_location (omv.reg (),reg_map);
327
+ guarantee (loc != NULL , " missing saved register" );
328
+ oop *derived_loc = loc;
329
+ oop *base_loc = fr->oopmapreg_to_location (omv.content_reg (), reg_map);
330
+ // Ignore NULL oops and decoded NULL narrow oops which
331
+ // equal to CompressedOops::base() when a narrow oop
332
+ // implicit null check is used in compiled code.
333
+ // The narrow_oop_base could be NULL or be the address
334
+ // of the page below heap depending on compressed oops mode.
335
+ if (base_loc != NULL && *base_loc != NULL && !CompressedOops::is_base (*base_loc)) {
336
+ derived_oop_fn (base_loc, derived_loc);
337
+ }
354
338
}
355
339
oms.next ();
356
340
} while (!oms.is_done ());
357
341
}
358
342
}
359
343
360
- // We want coop and oop oop_types
361
- int mask = OopMapValue::oop_value | OopMapValue::narrowoop_value;
362
344
{
363
- for (OopMapStream oms (map,mask); !oms.is_done (); oms.next ()) {
345
+ // We want coop and oop oop_types
346
+ for (OopMapStream oms (map); !oms.is_done (); oms.next ()) {
364
347
omv = oms.current ();
365
348
oop* loc = fr->oopmapreg_to_location (omv.reg (),reg_map);
366
349
// It should be an error if no location can be found for a
@@ -436,12 +419,14 @@ void OopMapSet::update_register_map(const frame *fr, RegisterMap *reg_map) {
436
419
assert (map != NULL , " no ptr map found" );
437
420
DEBUG_ONLY (int nof_callee = 0 ;)
438
421
439
- for (OopMapStream oms (map, OopMapValue::callee_saved_value ); !oms.is_done (); oms.next ()) {
422
+ for (OopMapStream oms (map); !oms.is_done (); oms.next ()) {
440
423
OopMapValue omv = oms.current ();
441
- VMReg reg = omv.content_reg ();
442
- oop* loc = fr->oopmapreg_to_location (omv.reg (), reg_map);
443
- reg_map->set_location (reg, (address) loc);
444
- DEBUG_ONLY (nof_callee++;)
424
+ if (omv.type () == OopMapValue::callee_saved_value) {
425
+ VMReg reg = omv.content_reg ();
426
+ oop* loc = fr->oopmapreg_to_location (omv.reg (), reg_map);
427
+ reg_map->set_location (reg, (address) loc);
428
+ DEBUG_ONLY (nof_callee++;)
429
+ }
445
430
}
446
431
447
432
// Check that runtime stubs save all callee-saved registers
@@ -452,25 +437,6 @@ void OopMapSet::update_register_map(const frame *fr, RegisterMap *reg_map) {
452
437
#endif // COMPILER2
453
438
}
454
439
455
- // =============================================================================
456
- // Non-Product code
457
-
458
- #ifndef PRODUCT
459
-
460
- bool ImmutableOopMap::has_derived_pointer () const {
461
- #if !defined(TIERED) && !INCLUDE_JVMCI
462
- COMPILER1_PRESENT (return false );
463
- #endif // !TIERED
464
- #if COMPILER2_OR_JVMCI
465
- OopMapStream oms (this ,OopMapValue::derived_oop_value);
466
- return oms.is_done ();
467
- #else
468
- return false ;
469
- #endif // COMPILER2_OR_JVMCI
470
- }
471
-
472
- #endif // PRODUCT
473
-
474
440
// Printing code is present in product build for -XX:+PrintAssembly.
475
441
476
442
static
0 commit comments