# HG changeset patch # User Christos Kotselidis # Date 1361982328 -3600 # Node ID b089cde440769eeab3fb50f8882f8b7e4b5a208b # Parent 9131c075be7b23b5d71efb1456aacad781a76ccf -More porting and bug fixes diff -r 9131c075be7b -r b089cde44076 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java --- 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)); } } diff -r 9131c075be7b -r b089cde44076 graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java --- 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 diff -r 9131c075be7b -r b089cde44076 src/cpu/x86/vm/graalRuntime_x86.cpp --- 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; diff -r 9131c075be7b -r b089cde44076 src/share/vm/graal/graalRuntime.cpp --- 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 diff -r 9131c075be7b -r b089cde44076 src/share/vm/graal/graalRuntime.hpp --- 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);