On 12/7/06, Xiao-Feng Li <[EMAIL PROTECTED]> wrote:

Mikhail, thanks.

> I almost finished WB helper inlining support in JIT, but need some
> additional instructions.
>
> 1) Jitrino's HIR uses several instruction with Store_WriteBarrier
modifier:
> Op_TauStInd, Op_StInd, Op_TauStStatic, Op_TauStElem, Op_TauStField and
> Tau_StRef, but only the last leads to WB helper call generation in
HIR2LIR
> selector. Why?

Op_TauStInd and Tau_StRef are the same thing but the latter for write
barrier generation, the other doesn't. They are switched by the need
of write barrier.

Op_TauStStatic is enumerated in DRLVM. It would be good to have a
runtime option to specify write barrier generation or not. It's not
urgent anyway.

Op_TauStElem and Op_TauStField are under !expandMemoryAddress branch,
it looks like no need for barrier.

Op_StInd: don't know this one.

These might not be the best design. You may give good suggestions.

> 2)  I have to use 3 params for fast path helper because slow helper
> (gc_heap_slot_write_ref) requires 3 params.

Mikhail, we need a simpler helper. The current helper is used for a
full barrier including both the fast-path and slow-path. It's
undesirable. And the API gc_heap_slot_write_ref() is called sometimes
by VM even for a non-generational GC. So its implementation is not
efficient. I'd suggest to have a simpler helper for slow-path-only:
gc_slot_remember( Managed_Object_Handle *p_slot,
Managed_Object_Handle p_target ). It is not a barrier, but only
remember the slot. For GCv5, the concrete code should look like:

void gc_slot_rem( Managed_Object_Handle *p_slot,
Managed_Object_Handle p_target )
{
  Mutator *mutator = (Mutator *)gc_get_tls();
  mutator_remset_add_entry(mutator, (Partial_Reveal_Object**)p_slot);
}

How do you think? Thanks.

This slow path needs actually only one parameter, but initially it's
ok to give two for assertion check to make sure it should be
remembered.


Xiao-Feng,
I propose to make 3args version initially - it require less changes in code.
I think I finish this version in a hour.
The only issue: a lot of problems with magics and unmanaged objects were
fixed in monenter patch that is not in SVN and I'm going to post it only
tomorrow after passing all of the tests on Linux.

So my proposal is to post temporary patch with WB helper inlined and update
it after monenter is committed.
Is it Ok if I send WB patch to JIRA tomorrow? This will give me more time to
check it with gcv4, right now I have the code but have not run any tests.

--
Mikhail Fursov

Reply via email to