106 assert(type() == T_INT, "type check");
107 *(jint*)&_integer_value = value;
108 }
109
110 BasicType type() const { return _type; }
111
112 bool equal(StackValue *value) {
113 if (_type != value->_type) return false;
114 if (_type == T_OBJECT)
115 return (_handle_value == value->_handle_value);
116 else {
117 assert(_type == T_INT, "sanity check");
118 // [phh] compare only low addressed portions of intptr_t slots
119 return (*(int *)&_integer_value == *(int *)&value->_integer_value);
120 }
121 }
122
123 static StackValue* create_stack_value_from_oop_location(stackChunkOop chunk, void* addr);
124 static StackValue* create_stack_value_from_narrowOop_location(stackChunkOop chunk, void* addr, bool is_register);
125
126 static BasicLock* resolve_monitor_lock(const frame* fr, Location location);
127
128 template<typename RegisterMapT>
129 static StackValue* create_stack_value(const frame* fr, const RegisterMapT* reg_map, ScopeValue* sv);
130
131 template<typename RegisterMapT>
132 static address stack_value_address(const frame* fr, const RegisterMapT* reg_map, ScopeValue* sv);
133
134 #ifndef PRODUCT
135 public:
136 // Printing
137 void print_on(outputStream* st) const;
138 #endif
139
140 private:
141 template<typename RegisterMapT>
142 static StackValue* create_stack_value(ScopeValue* sv, address value_addr, const RegisterMapT* reg_map);
143 };
144
145 #endif // SHARE_RUNTIME_STACKVALUE_HPP
|
106 assert(type() == T_INT, "type check");
107 *(jint*)&_integer_value = value;
108 }
109
110 BasicType type() const { return _type; }
111
112 bool equal(StackValue *value) {
113 if (_type != value->_type) return false;
114 if (_type == T_OBJECT)
115 return (_handle_value == value->_handle_value);
116 else {
117 assert(_type == T_INT, "sanity check");
118 // [phh] compare only low addressed portions of intptr_t slots
119 return (*(int *)&_integer_value == *(int *)&value->_integer_value);
120 }
121 }
122
123 static StackValue* create_stack_value_from_oop_location(stackChunkOop chunk, void* addr);
124 static StackValue* create_stack_value_from_narrowOop_location(stackChunkOop chunk, void* addr, bool is_register);
125
126 static BasicLock* resolve_monitor_lock(const frame& fr, Location location);
127
128 template<typename RegisterMapT>
129 static StackValue* create_stack_value(const frame* fr, const RegisterMapT* reg_map, ScopeValue* sv);
130
131 template<typename RegisterMapT>
132 static address stack_value_address(const frame* fr, const RegisterMapT* reg_map, ScopeValue* sv);
133
134 #ifndef PRODUCT
135 public:
136 // Printing
137 void print_on(outputStream* st) const;
138 #endif
139
140 private:
141 template<typename RegisterMapT>
142 static StackValue* create_stack_value(ScopeValue* sv, address value_addr, const RegisterMapT* reg_map);
143 };
144
145 #endif // SHARE_RUNTIME_STACKVALUE_HPP
|