changeset 8496:b089cde44076

-More porting and bug fixes
author Christos Kotselidis <christos.kotselidis@oracle.com>
date Wed, 27 Feb 2013 17:25:28 +0100
parents 9131c075be7b
children 96ccefe5ab4e
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java src/cpu/x86/vm/graalRuntime_x86.cpp src/share/vm/graal/graalRuntime.cpp src/share/vm/graal/graalRuntime.hpp
diffstat 5 files changed, 15 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java	Wed Feb 27 15:15:04 2013 +0100
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java	Wed Feb 27 17:25:28 2013 +0100
@@ -36,6 +36,7 @@
 import com.oracle.graal.snippets.SnippetTemplate.AbstractTemplates;
 import com.oracle.graal.snippets.SnippetTemplate.Arguments;
 import com.oracle.graal.snippets.SnippetTemplate.Key;
+import com.oracle.graal.snippets.nodes.*;
 import com.oracle.graal.word.*;
 
 public class WriteBarrierSnippets implements SnippetsInterface {
@@ -50,7 +51,7 @@
         Pointer field = Word.fromArray(object, location);
         Pointer previousOop = field.readWord(0);
 
-        Word markingValue = thread.readWord(HotSpotSnippetUtils.g1SATBQueueMarkingOffset());
+        byte markingValue = thread.add(HotSpotSnippetUtils.g1SATBQueueMarkingOffset()).readByte(0);
 
         Word bufferAddress = thread.readWord(HotSpotSnippetUtils.g1SATBQueueBufferOffset());
         Word indexAddress = thread.add(HotSpotSnippetUtils.g1SATBQueueIndexOffset());
@@ -63,13 +64,13 @@
         trace(WriteBarrierSnippets.TRACE, "      G1 PRE QueueMarkingOffset: 0x%016lx\n", Word.signed(HotSpotSnippetUtils.g1SATBQueueMarkingOffset()));
         trace(WriteBarrierSnippets.TRACE, "      G1 PRE QueueBufferOffset: 0x%016lx\n", Word.signed(HotSpotSnippetUtils.g1SATBQueueBufferOffset()));
         trace(WriteBarrierSnippets.TRACE, "      G1 PRE QueueIndexOffset: 0x%016lx\n", Word.signed(HotSpotSnippetUtils.g1SATBQueueIndexOffset()));
-        trace(WriteBarrierSnippets.TRACE, "      G1 PRE markingValue: 0x%016lx\n", markingValue);
+        trace(WriteBarrierSnippets.TRACE, "      G1 PRE markingValue: 0x%016lx\n", Word.signed((int) markingValue));
 
         trace(WriteBarrierSnippets.TRACE, "      G1 PRE bufferAddress: 0x%016lx\n", bufferAddress);
         trace(WriteBarrierSnippets.TRACE, "      G1 PRE indexAddress: 0x%016lx\n", indexAddress);
         trace(WriteBarrierSnippets.TRACE, "      G1 PRE indexValue: 0x%016lx\n", indexValue);// in
 
-        if (markingValue.notEqual(Word.zero())) {
+        if (markingValue != (byte) 0) {
             if (doLoad) {
                 previousOop = field.readWord(0);
                 trace(WriteBarrierSnippets.TRACE, "      G1 PRE Do Load previous OOP: 0x%16lx\n", previousOop);
@@ -147,6 +148,7 @@
                         logAddress.writeWord(0, base.add(displacement));
                         indexAddress.writeWord(0, nextIndex);
                     } else {
+                        trace(WriteBarrierSnippets.TRACE, "     G1 POST Card Address: 0x%016lx\n", base.add(displacement));
                         WriteBarrierPostStubCall.call(object, base.add(displacement));
                     }
                 }
--- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Wed Feb 27 15:15:04 2013 +0100
+++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java	Wed Feb 27 17:25:28 2013 +0100
@@ -265,7 +265,8 @@
     }
 
     private static ValueNode readOp(StructuredGraph graph, ValueNode base, ValueNode offset, Invoke invoke, Object locationIdentity) {
-        IndexedLocationNode location = IndexedLocationNode.create(locationIdentity, invoke.node().kind(), 0, offset, graph, false);
+        Kind resultKind = invoke.node().kind() == Kind.Int ? invoke.methodCallTarget().returnKind() : invoke.node().kind();
+        IndexedLocationNode location = IndexedLocationNode.create(locationIdentity, resultKind, 0, offset, graph, false);
         ReadNode read = graph.add(new ReadNode(base, location, invoke.node().stamp()));
         graph.addBeforeFixed(invoke.node(), read);
         // The read must not float outside its block otherwise it may float above an explicit zero
--- a/src/cpu/x86/vm/graalRuntime_x86.cpp	Wed Feb 27 15:15:04 2013 +0100
+++ b/src/cpu/x86/vm/graalRuntime_x86.cpp	Wed Feb 27 17:25:28 2013 +0100
@@ -1213,17 +1213,17 @@
    case graal_wb_post_call_id: {
       Register obj = j_rarg0;
       {
-        GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments);
-        OopMap* map = save_live_registers(sasm, 2, save_fpu_registers);
+       // GraalStubFrame f(sasm, "graal_wb_post_call", dont_gc_arguments);
+        //OopMap* map = save_live_registers(sasm, 2, save_fpu_registers);
 
         // note: really a leaf routine but must setup last java sp
         //       => use call_RT for now (speed can be improved by
         //       doing last java sp setup manually)
         int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, graal_wb_post_call), obj);
 
-        oop_maps = new OopMapSet();
-        oop_maps->add_gc_map(call_offset, map);
-        restore_live_registers(sasm, save_fpu_registers);
+        //oop_maps = new OopMapSet();
+        //oop_maps->add_gc_map(call_offset, map);
+       // restore_live_registers(sasm, save_fpu_registers);
       }
       __ ret(0);
       break;
--- a/src/share/vm/graal/graalRuntime.cpp	Wed Feb 27 15:15:04 2013 +0100
+++ b/src/share/vm/graal/graalRuntime.cpp	Wed Feb 27 17:25:28 2013 +0100
@@ -488,8 +488,8 @@
     SharedRuntime::g1_wb_pre(obj, thread);
 JRT_END
 
-JRT_LEAF(void, GraalRuntime::graal_wb_post_call(JavaThread* thread, address* card_addr))
-    tty->print_cr("HELLO POST WRITE BARRIER");
+JRT_LEAF(void, GraalRuntime::graal_wb_post_call(JavaThread* thread, oopDesc* obj, void* card_addr))
+    tty->print_cr("HELLO POST WRITE BARRIER Card address 0x%016lx", card_addr);
     thread->dirty_card_queue().enqueue(card_addr);
 JRT_END
 
--- a/src/share/vm/graal/graalRuntime.hpp	Wed Feb 27 15:15:04 2013 +0100
+++ b/src/share/vm/graal/graalRuntime.hpp	Wed Feb 27 17:25:28 2013 +0100
@@ -143,7 +143,7 @@
   static address exception_handler_for_pc(JavaThread* thread);
 
   static void graal_wb_pre_call(JavaThread* thread, oopDesc* obj);
-  static void graal_wb_post_call(JavaThread* thread, address* obj);
+  static void graal_wb_post_call(JavaThread* thread, oopDesc* obj,void* obj);
   static void graal_create_null_exception(JavaThread* thread);
   static void graal_create_out_of_bounds_exception(JavaThread* thread, jint index);
   static void graal_monitorenter(JavaThread* thread, oopDesc* obj, BasicLock* lock);