Mercurial > hg > truffle
comparison src/share/vm/compiler/oopMap.hpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | c7c777385a15 |
children | d1605aabd0a1 524eca34ea76 |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
59 | 59 |
60 enum oop_types { // must fit in type_bits | 60 enum oop_types { // must fit in type_bits |
61 unused_value =0, // powers of 2, for masking OopMapStream | 61 unused_value =0, // powers of 2, for masking OopMapStream |
62 oop_value = 1, | 62 oop_value = 1, |
63 value_value = 2, | 63 value_value = 2, |
64 dead_value = 4, | 64 narrowoop_value = 4, |
65 callee_saved_value = 8, | 65 callee_saved_value = 8, |
66 derived_oop_value= 16, | 66 derived_oop_value= 16, |
67 stack_obj = 32 }; | 67 stack_obj = 32 }; |
68 | 68 |
69 // Constructors | 69 // Constructors |
88 } | 88 } |
89 | 89 |
90 // Querying | 90 // Querying |
91 bool is_oop() { return mask_bits(value(), type_mask_in_place) == oop_value; } | 91 bool is_oop() { return mask_bits(value(), type_mask_in_place) == oop_value; } |
92 bool is_value() { return mask_bits(value(), type_mask_in_place) == value_value; } | 92 bool is_value() { return mask_bits(value(), type_mask_in_place) == value_value; } |
93 bool is_dead() { return mask_bits(value(), type_mask_in_place) == dead_value; } | 93 bool is_narrowoop() { return mask_bits(value(), type_mask_in_place) == narrowoop_value; } |
94 bool is_callee_saved() { return mask_bits(value(), type_mask_in_place) == callee_saved_value; } | 94 bool is_callee_saved() { return mask_bits(value(), type_mask_in_place) == callee_saved_value; } |
95 bool is_derived_oop() { return mask_bits(value(), type_mask_in_place) == derived_oop_value; } | 95 bool is_derived_oop() { return mask_bits(value(), type_mask_in_place) == derived_oop_value; } |
96 bool is_stack_obj() { return mask_bits(value(), type_mask_in_place) == stack_obj; } | 96 bool is_stack_obj() { return mask_bits(value(), type_mask_in_place) == stack_obj; } |
97 | 97 |
98 void set_oop() { set_value((value() & register_mask_in_place) | oop_value); } | 98 void set_oop() { set_value((value() & register_mask_in_place) | oop_value); } |
99 void set_value() { set_value((value() & register_mask_in_place) | value_value); } | 99 void set_value() { set_value((value() & register_mask_in_place) | value_value); } |
100 void set_dead() { set_value((value() & register_mask_in_place) | dead_value); } | 100 void set_narrowoop() { set_value((value() & register_mask_in_place) | narrowoop_value); } |
101 void set_callee_saved() { set_value((value() & register_mask_in_place) | callee_saved_value); } | 101 void set_callee_saved() { set_value((value() & register_mask_in_place) | callee_saved_value); } |
102 void set_derived_oop() { set_value((value() & register_mask_in_place) | derived_oop_value); } | 102 void set_derived_oop() { set_value((value() & register_mask_in_place) | derived_oop_value); } |
103 void set_stack_obj() { set_value((value() & register_mask_in_place) | stack_obj); } | 103 void set_stack_obj() { set_value((value() & register_mask_in_place) | stack_obj); } |
104 | 104 |
105 VMReg reg() const { return VMRegImpl::as_VMReg(mask_bits(value(), register_mask_in_place) >> register_shift); } | 105 VMReg reg() const { return VMRegImpl::as_VMReg(mask_bits(value(), register_mask_in_place) >> register_shift); } |
174 // Construction | 174 // Construction |
175 // frame_size units are stack-slots (4 bytes) NOT intptr_t; we can name odd | 175 // frame_size units are stack-slots (4 bytes) NOT intptr_t; we can name odd |
176 // slots to hold 4-byte values like ints and floats in the LP64 build. | 176 // slots to hold 4-byte values like ints and floats in the LP64 build. |
177 void set_oop ( VMReg local); | 177 void set_oop ( VMReg local); |
178 void set_value( VMReg local); | 178 void set_value( VMReg local); |
179 void set_narrowoop(VMReg local); | |
179 void set_dead ( VMReg local); | 180 void set_dead ( VMReg local); |
180 void set_callee_saved( VMReg local, VMReg caller_machine_register ); | 181 void set_callee_saved( VMReg local, VMReg caller_machine_register ); |
181 void set_derived_oop ( VMReg local, VMReg derived_from_local_register ); | 182 void set_derived_oop ( VMReg local, VMReg derived_from_local_register ); |
182 void set_stack_obj( VMReg local); | 183 void set_stack_obj( VMReg local); |
183 void set_xxx(VMReg reg, OopMapValue::oop_types x, VMReg optional); | 184 void set_xxx(VMReg reg, OopMapValue::oop_types x, VMReg optional); |
243 | 244 |
244 // Iterates through frame for a compiled method for dead ones and values, too | 245 // Iterates through frame for a compiled method for dead ones and values, too |
245 static void all_do(const frame* fr, const RegisterMap* reg_map, | 246 static void all_do(const frame* fr, const RegisterMap* reg_map, |
246 OopClosure* oop_fn, | 247 OopClosure* oop_fn, |
247 void derived_oop_fn(oop* base, oop* derived), | 248 void derived_oop_fn(oop* base, oop* derived), |
248 OopClosure* value_fn, OopClosure* dead_fn); | 249 OopClosure* value_fn); |
249 | 250 |
250 // Printing | 251 // Printing |
251 void print_on(outputStream* st) const; | 252 void print_on(outputStream* st) const; |
252 void print() const { print_on(tty); } | 253 void print() const { print_on(tty); } |
253 }; | 254 }; |