36 // What kind of arraycopy variant is this? |
36 // What kind of arraycopy variant is this? |
37 enum { |
37 enum { |
38 None, // not set yet |
38 None, // not set yet |
39 ArrayCopy, // System.arraycopy() |
39 ArrayCopy, // System.arraycopy() |
40 CloneBasic, // A clone that can be copied by 64 bit chunks |
40 CloneBasic, // A clone that can be copied by 64 bit chunks |
41 CloneOop, // An oop array clone |
41 CloneOopArray, // An oop array clone |
42 CopyOf, // Arrays.copyOf() |
42 CopyOf, // Arrays.copyOf() |
43 CopyOfRange // Arrays.copyOfRange() |
43 CopyOfRange // Arrays.copyOfRange() |
44 } _kind; |
44 } _kind; |
45 |
45 |
46 #ifndef PRODUCT |
46 #ifndef PRODUCT |
145 void connect_outputs(GraphKit* kit); |
145 void connect_outputs(GraphKit* kit); |
146 |
146 |
147 bool is_arraycopy() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy; } |
147 bool is_arraycopy() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy; } |
148 bool is_arraycopy_validated() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy && _arguments_validated; } |
148 bool is_arraycopy_validated() const { assert(_kind != None, "should bet set"); return _kind == ArrayCopy && _arguments_validated; } |
149 bool is_clonebasic() const { assert(_kind != None, "should bet set"); return _kind == CloneBasic; } |
149 bool is_clonebasic() const { assert(_kind != None, "should bet set"); return _kind == CloneBasic; } |
150 bool is_cloneoop() const { assert(_kind != None, "should bet set"); return _kind == CloneOop; } |
150 bool is_clone_oop_array() const { assert(_kind != None, "should bet set"); return _kind == CloneOopArray; } |
151 bool is_copyof() const { assert(_kind != None, "should bet set"); return _kind == CopyOf; } |
151 bool is_copyof() const { assert(_kind != None, "should bet set"); return _kind == CopyOf; } |
152 bool is_copyof_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOf && _arguments_validated; } |
152 bool is_copyof_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOf && _arguments_validated; } |
153 bool is_copyofrange() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange; } |
153 bool is_copyofrange() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange; } |
154 bool is_copyofrange_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange && _arguments_validated; } |
154 bool is_copyofrange_validated() const { assert(_kind != None, "should bet set"); return _kind == CopyOfRange && _arguments_validated; } |
155 |
155 |
156 void set_arraycopy(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = ArrayCopy; _arguments_validated = validated; } |
156 void set_arraycopy(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = ArrayCopy; _arguments_validated = validated; } |
157 void set_clonebasic() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneBasic; } |
157 void set_clonebasic() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneBasic; } |
158 void set_cloneoop() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneOop; } |
158 void set_clone_oop_array() { assert(_kind == None, "shouldn't bet set yet"); _kind = CloneOopArray; } |
159 void set_copyof(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOf; _arguments_validated = validated; } |
159 void set_copyof(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOf; _arguments_validated = validated; } |
160 void set_copyofrange(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOfRange; _arguments_validated = validated; } |
160 void set_copyofrange(bool validated) { assert(_kind == None, "shouldn't bet set yet"); _kind = CopyOfRange; _arguments_validated = validated; } |
161 |
161 |
162 virtual int Opcode() const; |
162 virtual int Opcode() const; |
163 virtual uint size_of() const; // Size is bigger |
163 virtual uint size_of() const; // Size is bigger |