< prev index next >

src/hotspot/cpu/x86/gc/shared/modRefBarrierSetAssembler_x86.cpp

Print this page
rev 54706 : 8223244: Fix usage of ARRAYCOPY_DISJOINT decorator

*** 34,50 **** bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0; bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops); if (type == T_OBJECT || type == T_ARRAY) { #ifdef _LP64 ! if (!checkcast && !obj_int) { // Save count for barrier __ movptr(r11, count); ! } else if (disjoint && obj_int) { // Save dst in r11 in the disjoint case __ movq(r11, dst); } #else if (disjoint) { __ mov(rdx, dst); // save 'to' } #endif --- 34,52 ---- bool disjoint = (decorators & ARRAYCOPY_DISJOINT) != 0; bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops); if (type == T_OBJECT || type == T_ARRAY) { #ifdef _LP64 ! if (!checkcast) { ! if (!obj_int) { // Save count for barrier __ movptr(r11, count); ! } else if (disjoint) { // Save dst in r11 in the disjoint case __ movq(r11, dst); } + } #else if (disjoint) { __ mov(rdx, dst); // save 'to' } #endif
*** 59,75 **** bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops); Register tmp = rax; if (type == T_OBJECT || type == T_ARRAY) { #ifdef _LP64 ! if (!checkcast && !obj_int) { // Save count for barrier count = r11; ! } else if (disjoint && obj_int) { // Use the saved dst in the disjoint case dst = r11; ! } else if (checkcast) { tmp = rscratch1; } #else if (disjoint) { __ mov(dst, rdx); // restore 'to' --- 61,79 ---- bool obj_int = type == T_OBJECT LP64_ONLY(&& UseCompressedOops); Register tmp = rax; if (type == T_OBJECT || type == T_ARRAY) { #ifdef _LP64 ! if (!checkcast) { ! if (!obj_int) { // Save count for barrier count = r11; ! } else if (disjoint) { // Use the saved dst in the disjoint case dst = r11; ! } ! } else { tmp = rscratch1; } #else if (disjoint) { __ mov(dst, rdx); // restore 'to'
< prev index next >