< prev index next >
src/hotspot/cpu/arm/stubGenerator_arm.cpp
Print this page
*** 745,758 ****
start = __ pc();
Register result_lo = R0;
Register result_hi = R1;
Register src = R0;
! if (!os::is_MP()) {
! __ ldmia(src, RegisterSet(result_lo, result_hi));
! __ bx(LR);
! } else if (VM_Version::supports_ldrexd()) {
__ ldrexd(result_lo, Address(src));
__ clrex(); // FIXME: safe to remove?
__ bx(LR);
} else {
__ stop("Atomic load(jlong) unsupported on this platform");
--- 745,755 ----
start = __ pc();
Register result_lo = R0;
Register result_hi = R1;
Register src = R0;
! if (VM_Version::supports_ldrexd()) {
__ ldrexd(result_lo, Address(src));
__ clrex(); // FIXME: safe to remove?
__ bx(LR);
} else {
__ stop("Atomic load(jlong) unsupported on this platform");
*** 772,785 ****
Register dest = R2;
Register scratch_lo = R2;
Register scratch_hi = R3; /* After load from stack */
Register result = R3;
! if (!os::is_MP()) {
! __ stmia(dest, RegisterSet(newval_lo, newval_hi));
! __ bx(LR);
! } else if (VM_Version::supports_ldrexd()) {
__ mov(Rtemp, dest); // get dest to Rtemp
Label retry;
__ bind(retry);
__ ldrexd(scratch_lo, Address(Rtemp));
__ strexd(result, R0, Address(Rtemp));
--- 769,779 ----
Register dest = R2;
Register scratch_lo = R2;
Register scratch_hi = R3; /* After load from stack */
Register result = R3;
! if (VM_Version::supports_ldrexd()) {
__ mov(Rtemp, dest); // get dest to Rtemp
Label retry;
__ bind(retry);
__ ldrexd(scratch_lo, Address(Rtemp));
__ strexd(result, R0, Address(Rtemp));
< prev index next >