< prev index next >
src/hotspot/share/oops/valueKlass.cpp
Print this page
*** 45,54 ****
--- 45,57 ----
#include "runtime/signature.hpp"
#include "runtime/thread.inline.hpp"
#include "utilities/copy.hpp"
int ValueKlass::first_field_offset() const {
+ if (UseNewLayout) {
+ return get_first_field_offset();
+ }
#ifdef ASSERT
int first_offset = INT_MAX;
for (JavaFieldStream fs(this); !fs.done(); fs.next()) {
if (fs.offset() < first_offset) first_offset= fs.offset();
}
*** 190,199 ****
--- 193,203 ----
if (get_value_array_klass() != NULL)
ArrayKlass::cast(get_value_array_klass())->array_klasses_do(f);
}
void ValueKlass::raw_field_copy(void* src, void* dst, size_t raw_byte_size) {
+ if (!UseNewLayout) {
/*
* Try not to shear fields even if not an atomic store...
*
* First 3 cases handle value array store, otherwise works on the same basis
* as JVM_Clone, at this size data is aligned. The order of primitive types
*** 215,224 ****
--- 219,266 ----
break;
default:
assert(raw_byte_size % sizeof(jlong) == 0, "Unaligned raw_byte_size");
Copy::conjoint_jlongs_atomic((jlong*)src, (jlong*)dst, raw_byte_size >> LogBytesPerLong);
}
+ } else {
+ int size = this->get_exact_size_in_bytes();
+ int length;
+ switch (this->get_alignment()) {
+ case BytesPerLong:
+ length = size >> LogBytesPerLong;
+ if (length > 0) {
+ Copy::conjoint_jlongs_atomic((jlong*)src, (jlong*)dst, length);
+ size -= length << LogBytesPerLong;
+ src = (jlong*)src + length;
+ dst = (jlong*)dst + length;
+ }
+ // Fallthrough
+ case BytesPerInt:
+ length = size >> LogBytesPerInt;
+ if (length > 0) {
+ Copy::conjoint_jints_atomic((jint*)src, (jint*)dst, length);
+ size -= length << LogBytesPerInt;
+ src = (jint*)src + length;
+ dst = (jint*)dst + length;
+ }
+ // Fallthrough
+ case BytesPerShort:
+ length = size >> LogBytesPerShort;
+ if (length > 0) {
+ Copy::conjoint_jshorts_atomic((jshort*)src, (jshort*)dst, length);
+ size -= length << LogBytesPerShort;
+ src = (jshort*)src + length;
+ dst = (jshort*)dst +length;
+ }
+ // Fallthrough
+ case 1:
+ if (size > 0) Copy::conjoint_jbytes_atomic((jbyte*)src, (jbyte*)dst, size);
+ break;
+ default:
+ fatal("Unsupported alignment");
+ }
+ }
}
/*
* Store the value of this klass contained with src into dst.
*
< prev index next >