161 break; |
161 break; |
162 } |
162 } |
163 |
163 |
164 case Bytecodes::_ldc : // fall through |
164 case Bytecodes::_ldc : // fall through |
165 case Bytecodes::_ldc_w : { |
165 case Bytecodes::_ldc_w : { |
166 u2 cpi_old, cpi_new; |
166 Bytecode_loadconstant* ldc_old = Bytecode_loadconstant_at(_s_old->method()(), _s_old->bcp()); |
167 if (c_old == Bytecodes::_ldc) { |
167 Bytecode_loadconstant* ldc_new = Bytecode_loadconstant_at(_s_new->method()(), _s_new->bcp()); |
168 cpi_old = _s_old->bcp()[1]; |
168 int cpi_old = ldc_old->index(); |
169 cpi_new = _s_new->bcp()[1]; |
169 int cpi_new = ldc_new->index(); |
170 } else { |
|
171 cpi_old = _s_old->get_index_u2(); |
|
172 cpi_new = _s_new->get_index_u2(); |
|
173 } |
|
174 constantTag tag_old = _old_cp->tag_at(cpi_old); |
170 constantTag tag_old = _old_cp->tag_at(cpi_old); |
175 constantTag tag_new = _new_cp->tag_at(cpi_new); |
171 constantTag tag_new = _new_cp->tag_at(cpi_new); |
176 if (tag_old.is_int() || tag_old.is_float()) { |
172 if (tag_old.is_int() || tag_old.is_float()) { |
177 if (tag_old.value() != tag_new.value()) |
173 if (tag_old.value() != tag_new.value()) |
178 return false; |
174 return false; |
179 if (tag_old.is_int()) { |
175 if (tag_old.is_int()) { |
180 if (_old_cp->int_at(cpi_old) != _new_cp->int_at(cpi_new)) |
176 if (_old_cp->int_at(cpi_old) != _new_cp->int_at(cpi_new)) |
181 return false; |
177 return false; |
182 } else { |
178 } else { |
183 if (_old_cp->float_at(cpi_old) != _new_cp->float_at(cpi_new)) |
179 // Use jint_cast to compare the bits rather than numerical values. |
|
180 // This makes a difference for NaN constants. |
|
181 if (jint_cast(_old_cp->float_at(cpi_old)) != jint_cast(_new_cp->float_at(cpi_new))) |
184 return false; |
182 return false; |
185 } |
183 } |
186 } else if (tag_old.is_string() || tag_old.is_unresolved_string()) { |
184 } else if (tag_old.is_string() || tag_old.is_unresolved_string()) { |
187 if (! (tag_new.is_unresolved_string() || tag_new.is_string())) |
185 if (! (tag_new.is_unresolved_string() || tag_new.is_string())) |
188 return false; |
186 return false; |
259 case Bytecodes::_ifgt : // fall through |
259 case Bytecodes::_ifgt : // fall through |
260 case Bytecodes::_ifle : // fall through |
260 case Bytecodes::_ifle : // fall through |
261 case Bytecodes::_ifnonnull : // fall through |
261 case Bytecodes::_ifnonnull : // fall through |
262 case Bytecodes::_ifnull : // fall through |
262 case Bytecodes::_ifnull : // fall through |
263 case Bytecodes::_jsr : { |
263 case Bytecodes::_jsr : { |
264 short old_ofs = (short) _s_old->get_index_u2(); |
264 int old_ofs = _s_old->bytecode()->get_offset_s2(c_old); |
265 short new_ofs = (short) _s_new->get_index_u2(); |
265 int new_ofs = _s_new->bytecode()->get_offset_s2(c_new); |
266 if (_switchable_test) { |
266 if (_switchable_test) { |
267 int old_dest = _s_old->bci() + old_ofs; |
267 int old_dest = _s_old->bci() + old_ofs; |
268 int new_dest = _s_new->bci() + new_ofs; |
268 int new_dest = _s_new->bci() + new_ofs; |
269 if (old_ofs < 0 && new_ofs < 0) { |
269 if (old_ofs < 0 && new_ofs < 0) { |
270 if (! _bci_map->old_and_new_locations_same(old_dest, new_dest)) |
270 if (! _bci_map->old_and_new_locations_same(old_dest, new_dest)) |
296 } |
296 } |
297 break; |
297 break; |
298 |
298 |
299 case Bytecodes::_goto_w : // fall through |
299 case Bytecodes::_goto_w : // fall through |
300 case Bytecodes::_jsr_w : { |
300 case Bytecodes::_jsr_w : { |
301 int old_ofs = (int) Bytes::get_Java_u4(_s_old->bcp() + 1); |
301 int old_ofs = _s_old->bytecode()->get_offset_s4(c_old); |
302 int new_ofs = (int) Bytes::get_Java_u4(_s_new->bcp() + 1); |
302 int new_ofs = _s_new->bytecode()->get_offset_s4(c_new); |
303 if (_switchable_test) { |
303 if (_switchable_test) { |
304 int old_dest = _s_old->bci() + old_ofs; |
304 int old_dest = _s_old->bci() + old_ofs; |
305 int new_dest = _s_new->bci() + new_ofs; |
305 int new_dest = _s_new->bci() + new_ofs; |
306 if (old_ofs < 0 && new_ofs < 0) { |
306 if (old_ofs < 0 && new_ofs < 0) { |
307 if (! _bci_map->old_and_new_locations_same(old_dest, new_dest)) |
307 if (! _bci_map->old_and_new_locations_same(old_dest, new_dest)) |