# HG changeset patch # User Christos Kotselidis # Date 1361986897 -3600 # Node ID 96ccefe5ab4eddd2e90e6a34e6f5fb0ec30dca90 # Parent b089cde440769eeab3fb50f8882f8b7e4b5a208b -Integrate Lucas' patch with byte read diff -r b089cde44076 -r 96ccefe5ab4e 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 17:25:28 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/snippets/WriteBarrierSnippets.java Wed Feb 27 18:41:37 2013 +0100 @@ -131,11 +131,11 @@ if (xorResult.notEqual(Word.zero())) { if (writtenValue.notEqual(Word.zero())) { - Word cardValue = base.readWord(displacement); - char cardByte = base.readChar(displacement); - trace(WriteBarrierSnippets.TRACE, " G1 POST cardValue: 0x%016lx\n", cardValue); + // Word cardValue = base.readWord(displacement); + short cardByte = base.readShort(displacement); + trace(WriteBarrierSnippets.TRACE, " G1 POST cardValue: 0x%016lx\n", Word.signed((int) cardByte)); - if (cardByte != (char) 0) { + if (cardByte != 0) { base.writeWord(displacement, Word.zero()); // smash zero into card if (indexValue.notEqual(Word.zero())) { Word nextIndex = indexValue.subtract(HotSpotSnippetUtils.wordSize()); diff -r b089cde44076 -r 96ccefe5ab4e 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 17:25:28 2013 +0100 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/phases/WordTypeRewriterPhase.java Wed Feb 27 18:41:37 2013 +0100 @@ -265,6 +265,8 @@ } private static ValueNode readOp(StructuredGraph graph, ValueNode base, ValueNode offset, Invoke invoke, Object locationIdentity) { + // IndexedLocationNode location = IndexedLocationNode.create(locationIdentity, +// invoke.methodCallTarget().returnKind(), 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())); diff -r b089cde44076 -r 96ccefe5ab4e src/cpu/x86/vm/graalRuntime_x86.cpp --- a/src/cpu/x86/vm/graalRuntime_x86.cpp Wed Feb 27 17:25:28 2013 +0100 +++ b/src/cpu/x86/vm/graalRuntime_x86.cpp Wed Feb 27 18:41:37 2013 +0100 @@ -1195,17 +1195,17 @@ case graal_wb_pre_call_id: { Register obj = j_rarg0; { - GraalStubFrame f(sasm, "graal_wb_pre_call", dont_gc_arguments); - OopMap* map = save_live_registers(sasm, 2, save_fpu_registers); + // GraalStubFrame f(sasm, "graal_wb_pre_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_pre_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;