static void pd_conjoint_oops_atomic(oop* from, oop* to, size_t count) { #ifdef _LP64 assert(BytesPerLong == BytesPerOop, "jlongs and oops must be the same size"); _Copy_conjoint_jlongs_atomic((jlong*)from, (jlong*)to, count); #else assert(BytesPerInt == BytesPerOop, "jints and oops must be the same size"); _Copy_conjoint_jints_atomic((jint*)from, (jint*)to, count); #endif // _LP64 }
static void pd_conjoint_jlongs_atomic(jlong* from, jlong* to, size_t count) { #ifdef _LP64 assert(BytesPerLong == BytesPerOop, "jlongs and oops must be the same size"); pd_conjoint_oops_atomic((oop*)from, (oop*)to, count); #else // Guarantee use of ldd/std via some asm code, because compiler won't. // See solaris_sparc.il. _Copy_conjoint_jlongs_atomic(from, to, count); #endif }
static void pd_conjoint_jlongs_atomic(jlong* from, jlong* to, size_t count) { #ifdef AMD64 _Copy_conjoint_jlongs_atomic(from, to, count); #else // Guarantee use of fild/fistp or xmm regs via some asm code, because compilers won't. if (from > to) { while (count-- > 0) { __asm__ volatile("fildll (%0); fistpll (%1)" : : "r" (from), "r" (to) : "memory" ); ++from; ++to; } } else { while (count-- > 0) {
static void pd_conjoint_oops_atomic(oop* from, oop* to, size_t count) { assert(BytesPerLong == BytesPerOop, "jlongs and oops must be the same size"); _Copy_conjoint_jlongs_atomic((jlong*)from, (jlong*)to, count); }
static void pd_conjoint_jlongs_atomic(jlong* from, jlong* to, size_t count) { _Copy_conjoint_jlongs_atomic(from, to, count); }