Great. I will try to evaluate it if it works well in my environment.
Thanks, xiaofeng On 12/12/06, Mikhail Fursov <[EMAIL PROTECTED]> wrote:
Xiao Feng, I put the initial patch to HARMONY-2652. This patch runs all scenarios using gc_gen that I can run without helpers inlined. Let's wait H2500 is commited and I can update the patch with diff derived from svn update. On 12/12/06, Mikhail Fursov <[EMAIL PROTECTED]> wrote: > > Xiao Feng, > I missed one very important line in gc_heap_slot_write_ref: > *p_slot = p_target; > > and now I understand why replacing the old call with WB helper you sent in > the initial message does not work. > I'm going to add store operation into the helper now and retest it. > > + I'm ok to discuss and clean up GC interface as you proposed after the > most simple version of WB is working. > > > On 12/12/06, Xiao-Feng Li < [EMAIL PROTECTED]> wrote: > > > > Mikhail, the gc_heap_slot_write_ref is an old GC interface in ORP. > > The original idea for this interface is, any Java heap slot reference > > store should go through this GC function, including VM and Java > > application. So this function does the real reference store, the > > original store in JITted code will not be emitted. Hence the OPT write > > barrier has no problem. > > > > The problem with this interface is, it has no clear definition about > > whether a write barrier is needed or not. That's why I suggested to > > use a new interface gc_heap_slot_write_barrier for the helper inlining > > work. The code for it is the same as gc_heap_slot_write_ref for > > generational GC (without the check for needing barrier or not). Since > > the WB inlined helper is only invoked when generational GC is run, the > > check is redundant completely. > > > > I am not sure if I make it clear. > > > > Thanks, > > xiaofeng > > > > On 12/11/06, Mikhail Fursov <[EMAIL PROTECTED]> wrote: > > > Xiao-Feng, > > > I'm slightly confused about current WB support in Jitrino.OPT, so I > > need an > > > advice. > > > > > > The problem: I think that write barriers in Jitrino OPT do not work. > > > > > > Example (see for lines marked with =>): > > > > > > > > > HIR with WB disabled: > > > > > > I1:defarg.ths -) t1:cls:java/net/URLClassLoader$4 > > > I2:tauisnonnull t1 -) t2:tau > > > I3:tauhastype t1,cls:java/net/URLClassLoader$4 -) t3:tau > > > I4:defarg -) t4:cls:java/net/URLClassLoader > > > I5:tauhastype t4,cls:java/net/URLClassLoader -) t5:tau > > > I6:defarg -) t6:cls:java/lang/String > > > I7:tauhastype t6,cls:java/lang/String -) t7:tau > > > I8:ldflda [t1.java/net/URLClassLoader$4::this$0] -) > > > t8:ref:cls:java/net/URLClassLoader > > > => I9:stind.unc:o t4 ((t2,t3,t5)) -) [t8] > > > I10:ldflda [t1.java/net/URLClassLoader$4::val$clsName] -) > > > t9:ref:cls:java/lang/String > > > => I11: stind.unc:str t6 ((t2,t3,t7)) -) [t9] > > > I12:tauunsafe() -) t10:tau > > > I13:call java/lang/Object::_init_(t1) ((t2,t10)) -) > > > > > > > > > The same HIR with WB enabled: > > > > > > Successors: L5 UNWIND > > > I1:defarg.ths -) t1:cls:java/net/URLClassLoader$4 > > > I2:tauisnonnull t1 -) t2:tau > > > I3:tauhastype t1,cls:java/net/URLClassLoader$4 -) t3:tau > > > I4:defarg -) t4:cls:java/net/URLClassLoader > > > I5:tauhastype t4,cls:java/net/URLClassLoader -) t5:tau > > > I6:defarg -) t6:cls:java/lang/String > > > I7:tauhastype t6,cls:java/lang/String -) t7:tau > > > I8:ldflda [t1.java/net/URLClassLoader$4::this$0] -) > > > t8:ref:cls:java/net/URLClassLoader > > > => I9:stref.wb.unc t4 ((t2,t3,t5)) -) [t8 t1] > > > I10:ldflda [t1.java/net/URLClassLoader$4::val$clsName] -) > > > t9:ref:cls:java/lang/String > > > => I11: stref.wb.unc t6 ((t2,t3,t7)) -) [t9 t1] > > > I12:tauunsafe() -) t10:tau > > > I13:call java/lang/Object::_init_(t1) ((t2,t10)) -) > > > > > > > > > > > > The LIR with WB disabled > > > > > > I1: t4:ref:cls:java/net/URLClassLoader (ID:s5(EFLGS):uint32) =ADD > > > > > t0:cls:java/net/URLClassLoader$4,t3(0:fo:java/net/URLClassLoader$4.this$0):intptr > > > > > > => I2: (AD:t6[t4]:object) =CopyPseudoInst/MOV > > > (AU:t1:cls:java/net/URLClassLoader) > > > I3: t8:ref:cls:java/lang/String (ID:s5(EFLGS):uint32) =ADD > > > > > t0:cls:java/net/URLClassLoader$4,t7(0:fo:java/net/URLClassLoader$4.val$clsName):intptr > > > > > > => I4: (AD:t9[t8]:string) =CopyPseudoInst/MOV > > > (AU:t2:cls:java/lang/String) > > > > > > > > > > > > > > > The same LIR with WB enabled > > > > > > I1: t4:ref:cls:java/net/URLClassLoader (ID:s5(EFLGS):uint32) =ADD > > > > > t0:cls:java/net/URLClassLoader$4,t3(0:fo:java/net/URLClassLoader$4.this$0):intptr > > > > > > > > => I2: CALL t6(0:h:WriteBarrier):ptr:intptr > > > > > (AU:t0:cls:java/net/URLClassLoader$4,t4:ref:cls:java/net/URLClassLoader,t1:cls:java/net/URLClassLoader) > > > > > > I3: t8:ref:cls:java/lang/String (ID:s5(EFLGS):uint32) =ADD > > > > > t0:cls:java/net/URLClassLoader$4,t7(0:fo:java/net/URLClassLoader$4.val$clsName):intptr > > > > > > => I4: CALL t9(0:h:WriteBarrier):ptr:intptr > > > > > (AU:t0:cls:java/net/URLClassLoader$4,t8:ref:cls:java/lang/String,t2:cls:java/lang/String) > > > > > > > > > > > > > > The question is what is in the CALL? I see only the method: > > > gc_heap_slot_write_ref and this method does not save anything into > > fields. > > > Does it mean that WB support in Jitrino.OPT is incomplete today? > > > > > > -- > > > Mikhail Fursov > > > > > > > > > > > > -- > Mikhail Fursov -- Mikhail Fursov
