Mercurial > hg > graal-jvmci-8
comparison src/share/vm/code/scopeDesc.cpp @ 1253:f70b0d9ab095
6910618: C2: Error: assert(d->is_oop(),"JVM_ArrayCopy: dst not an oop")
Summary: Mark in PcDesc call sites which return oop and save the result oop across objects reallocation during deoptimization.
Reviewed-by: never
author | kvn |
---|---|
date | Tue, 09 Feb 2010 01:31:13 -0800 |
parents | 72088be4b386 |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
1252:f516d5d7a019 | 1253:f70b0d9ab095 |
---|---|
24 | 24 |
25 # include "incls/_precompiled.incl" | 25 # include "incls/_precompiled.incl" |
26 # include "incls/_scopeDesc.cpp.incl" | 26 # include "incls/_scopeDesc.cpp.incl" |
27 | 27 |
28 | 28 |
29 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, int obj_decode_offset, bool reexecute) { | 29 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, int obj_decode_offset, bool reexecute, bool return_oop) { |
30 _code = code; | 30 _code = code; |
31 _decode_offset = decode_offset; | 31 _decode_offset = decode_offset; |
32 _objects = decode_object_values(obj_decode_offset); | 32 _objects = decode_object_values(obj_decode_offset); |
33 _reexecute = reexecute; | 33 _reexecute = reexecute; |
34 _return_oop = return_oop; | |
34 decode_body(); | 35 decode_body(); |
35 } | 36 } |
36 | 37 |
37 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, bool reexecute) { | 38 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, bool reexecute, bool return_oop) { |
38 _code = code; | 39 _code = code; |
39 _decode_offset = decode_offset; | 40 _decode_offset = decode_offset; |
40 _objects = decode_object_values(DebugInformationRecorder::serialized_null); | 41 _objects = decode_object_values(DebugInformationRecorder::serialized_null); |
41 _reexecute = reexecute; | 42 _reexecute = reexecute; |
43 _return_oop = return_oop; | |
42 decode_body(); | 44 decode_body(); |
43 } | 45 } |
44 | 46 |
45 | 47 |
46 ScopeDesc::ScopeDesc(const ScopeDesc* parent) { | 48 ScopeDesc::ScopeDesc(const ScopeDesc* parent) { |
47 _code = parent->_code; | 49 _code = parent->_code; |
48 _decode_offset = parent->_sender_decode_offset; | 50 _decode_offset = parent->_sender_decode_offset; |
49 _objects = parent->_objects; | 51 _objects = parent->_objects; |
50 _reexecute = false; //reexecute only applies to the first scope | 52 _reexecute = false; //reexecute only applies to the first scope |
53 _return_oop = false; | |
51 decode_body(); | 54 decode_body(); |
52 } | 55 } |
53 | 56 |
54 | 57 |
55 void ScopeDesc::decode_body() { | 58 void ScopeDesc::decode_body() { |