src/share/vm/interpreter/oopMapCache.hpp

changeset 7668
9cfc607cb03e
parent 7215
c204e2044c29
child 7994
04ff2f6cd0eb
child 9351
bae7d3cdf6af
equal deleted inserted replaced
7667:e982379a7119 7668:9cfc607cb03e
64 class InterpreterOopMap: ResourceObj { 64 class InterpreterOopMap: ResourceObj {
65 friend class OopMapCache; 65 friend class OopMapCache;
66 66
67 public: 67 public:
68 enum { 68 enum {
69 N = 2, // the number of words reserved 69 N = 4, // the number of words reserved
70 // for inlined mask storage 70 // for inlined mask storage
71 small_mask_limit = N * BitsPerWord, // the maximum number of bits 71 small_mask_limit = N * BitsPerWord, // the maximum number of bits
72 // available for small masks, 72 // available for small masks,
73 // small_mask_limit can be set to 0 73 // small_mask_limit can be set to 0
74 // for testing bit_mask allocation 74 // for testing bit_mask allocation
75 75
76 #ifdef ENABLE_ZAP_DEAD_LOCALS
77 bits_per_entry = 2, 76 bits_per_entry = 2,
78 dead_bit_number = 1, 77 dead_bit_number = 1,
79 #else
80 bits_per_entry = 1,
81 #endif
82 oop_bit_number = 0 78 oop_bit_number = 0
83 }; 79 };
84 80
85 private: 81 private:
86 Method* _method; // the method for which the mask is valid 82 Method* _method; // the method for which the mask is valid
117 113
118 uintptr_t entry_at(int offset) const { int i = offset * bits_per_entry; return bit_mask()[i / BitsPerWord] >> (i % BitsPerWord); } 114 uintptr_t entry_at(int offset) const { int i = offset * bits_per_entry; return bit_mask()[i / BitsPerWord] >> (i % BitsPerWord); }
119 115
120 void set_expression_stack_size(int sz) { _expression_stack_size = sz; } 116 void set_expression_stack_size(int sz) { _expression_stack_size = sz; }
121 117
122 #ifdef ENABLE_ZAP_DEAD_LOCALS
123 bool is_dead(int offset) const { return (entry_at(offset) & (1 << dead_bit_number)) != 0; }
124 #endif
125
126 // Lookup 118 // Lookup
127 bool match(methodHandle method, int bci) const { return _method == method() && _bci == bci; } 119 bool match(methodHandle method, int bci) const { return _method == method() && _bci == bci; }
128 bool is_empty() const; 120 bool is_empty() const;
129 121
130 // Initialization 122 // Initialization
142 134
143 void iterate_oop(OffsetClosure* oop_closure) const; 135 void iterate_oop(OffsetClosure* oop_closure) const;
144 void print() const; 136 void print() const;
145 137
146 int number_of_entries() const { return mask_size() / bits_per_entry; } 138 int number_of_entries() const { return mask_size() / bits_per_entry; }
139 bool is_dead(int offset) const { return (entry_at(offset) & (1 << dead_bit_number)) != 0; }
147 bool is_oop (int offset) const { return (entry_at(offset) & (1 << oop_bit_number )) != 0; } 140 bool is_oop (int offset) const { return (entry_at(offset) & (1 << oop_bit_number )) != 0; }
148 141
149 int expression_stack_size() const { return _expression_stack_size; } 142 int expression_stack_size() const { return _expression_stack_size; }
150 143
151 #ifdef ENABLE_ZAP_DEAD_LOCALS 144 #ifdef ENABLE_ZAP_DEAD_LOCALS

mercurial