1152 } |
1152 } |
1153 |
1153 |
1154 // Call StubRoutines::generic_arraycopy stub. |
1154 // Call StubRoutines::generic_arraycopy stub. |
1155 Node* mem = generate_arraycopy(ac, NULL, &ctrl, merge_mem, &io, |
1155 Node* mem = generate_arraycopy(ac, NULL, &ctrl, merge_mem, &io, |
1156 TypeRawPtr::BOTTOM, T_CONFLICT, |
1156 TypeRawPtr::BOTTOM, T_CONFLICT, |
1157 src, src_offset, dest, dest_offset, length); |
1157 src, src_offset, dest, dest_offset, length, |
|
1158 // If a negative length guard was generated for the ArrayCopyNode, |
|
1159 // the length of the array can never be negative. |
|
1160 false, ac->has_negative_length_guard()); |
1158 |
1161 |
1159 // Do not let reads from the destination float above the arraycopy. |
1162 // Do not let reads from the destination float above the arraycopy. |
1160 // Since we cannot type the arrays, we don't know which slices |
1163 // Since we cannot type the arrays, we don't know which slices |
1161 // might be affected. We could restrict this barrier only to those |
1164 // might be affected. We could restrict this barrier only to those |
1162 // memory slices which pertain to array elements--but don't bother. |
1165 // memory slices which pertain to array elements--but don't bother. |
1256 } |
1259 } |
1257 |
1260 |
1258 generate_arraycopy(ac, alloc, &ctrl, merge_mem, &io, |
1261 generate_arraycopy(ac, alloc, &ctrl, merge_mem, &io, |
1259 adr_type, dest_elem, |
1262 adr_type, dest_elem, |
1260 src, src_offset, dest, dest_offset, length, |
1263 src, src_offset, dest, dest_offset, length, |
1261 false, false, slow_region); |
1264 // If a negative length guard was generated for the ArrayCopyNode, |
1262 } |
1265 // the length of the array can never be negative. |
|
1266 false, ac->has_negative_length_guard(), slow_region); |
|
1267 } |