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