< prev index next >
src/hotspot/cpu/x86/jniFastGetField_x86_64.cpp
Print this page
rev 50081 : [mq]: primitives2.patch
@@ -82,23 +82,24 @@
}
__ clear_jweak_tag(robj);
__ movptr(robj, Address(robj, 0)); // *obj
- __ resolve_for_read(0, robj);
__ mov (roffset, c_rarg2);
__ shrptr(roffset, 2); // offset
assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
speculative_load_pclist[count] = __ pc();
switch (type) {
- case T_BOOLEAN: __ movzbl (rax, Address(robj, roffset, Address::times_1)); break;
- case T_BYTE: __ movsbl (rax, Address(robj, roffset, Address::times_1)); break;
- case T_CHAR: __ movzwl (rax, Address(robj, roffset, Address::times_1)); break;
- case T_SHORT: __ movswl (rax, Address(robj, roffset, Address::times_1)); break;
- case T_INT: __ movl (rax, Address(robj, roffset, Address::times_1)); break;
- case T_LONG: __ movq (rax, Address(robj, roffset, Address::times_1)); break;
+ case T_BOOLEAN:
+ case T_BYTE:
+ case T_CHAR:
+ case T_SHORT:
+ case T_INT:
+ case T_LONG:
+ __ access_load_at(type, IN_HEAP, rax, Address(robj, roffset, Address::times_1), noreg, noreg);
+ break;
default: ShouldNotReachHere();
}
if (os::is_MP()) {
__ lea(rcounter_addr, counter);
@@ -185,21 +186,17 @@
}
__ clear_jweak_tag(robj);
__ movptr(robj, Address(robj, 0)); // *obj
- __ resolve_for_read(0, robj);
__ mov (roffset, c_rarg2);
__ shrptr(roffset, 2); // offset
assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
speculative_load_pclist[count] = __ pc();
- switch (type) {
- case T_FLOAT: __ movflt (xmm0, Address(robj, roffset, Address::times_1)); break;
- case T_DOUBLE: __ movdbl (xmm0, Address(robj, roffset, Address::times_1)); break;
- default: ShouldNotReachHere();
- }
+
+ __ access_load_at(type, IN_HEAP, noreg, Address(robj, roffset, Address::times_1), noreg, noreg);
if (os::is_MP()) {
__ lea(rcounter_addr, counter);
__ movdq (rax, xmm0);
// counter address is data dependent on xmm0.
< prev index next >