< 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 >