For example for storing a reference in a non-static field the following
code chain occurs:

From:

FJitResult FJit::compileCEE_STFLD( OPCODE opcode)
{
....
        case CORINFO_TYPE_CLASS:
            emit_STFLD_REF((fieldIsStatic || isEnCField),
UnalignedAccess);
            break;
....
}

To:

#define emit_STFLD_REF(isStatic, unaligned)                   \
{                                                             \
    callInfo.reset();                                         \
    emit_tos_arg( 1, INTERNAL_CALL );                         \
    emit_tos_arg( 2, INTERNAL_CALL );                         \
    if (!isStatic)                                            \
    {                                                         \
       LABELSTACK((outPtr-outBuff),0);                        \
       emit_tos_arg( 3, INTERNAL_CALL );                      \
       emit_callhelper_I4I4I4(STFLD_REF_helper);              \
    }                                                         \
    else                                                      \
       {emit_callhelper_I4I4(STSFLD_REF_helper);}             \
}

Goes to:

void HELPER_CALL STFLD_REF_helper(unsigned int offset, unsigned val,
CORINFO_Object* or_obj) {
    if(or_obj == NULL) {
        THROW_FROM_HELPER(CORINFO_NullReferenceException);
    }
    FJit_pHlpAssign_Ref((CORINFO_Object**)((char*)(or_obj)+offset),
(CORINFO_Object*)val);
}

The object reference which is the this pointer is the last argument. In
this case the modification is very simple - just remove the field offset
from the calculation of the address.

Vladimir

This posting is provided "AS IS" with no warranties, and confers no
rights.

-----Original Message-----
From: Discussion of the Rotor Shared Source CLI implementation
[mailto:[EMAIL PROTECTED] On Behalf Of Archana
Sent: Tuesday, January 13, 2004 2:07 AM
To: [EMAIL PROTECTED]
Subject: Re: [DOTNET-ROTOR] the write barrier

On Tue, 13 Jan 2004, Vladimir Fedorov wrote:

> You would have to track the 'this'
> pointer from which the pointer to the field is generated and use it
> instead of the field address. For stfld, ldfld instructions it should
be
> quite manageable since they take a 'this' pointer. For stind and
stsfld
> it will be more difficult.

Where/which function should i look into for 'this' ptr?
compileCEE_STFLD(opcode)?
since i am not familiar with /fjit code can you please give me some
starting point so that i can try to figure out the rest.

Thank you so much
archana

>
> Vladimir
>
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
>
>
>
> -----Original Message-----
> From: Discussion of the Rotor Shared Source CLI implementation
> [mailto:[EMAIL PROTECTED] On Behalf Of Archana
> Sent: Monday, January 12, 2004 10:57 PM
> To: [EMAIL PROTECTED]
> Subject: Re: [DOTNET-ROTOR] the write barrier
>
> On Mon, 12 Jan 2004, Vladimir Fedorov wrote:
>
> > I assume by dirty, you mean flip the bit in the card table
> corresponding
> > to the memory location in which a potential cross-generational
pointer
> > is being stored.
> Correct.
>
> > Also when you refer to base I assume you mean the start
> > of the object containing the memory location.
> Yes. thats exactly what i was referring to
>
> > In this case you don't
> > need to do anything, GC will scan the whole object to update the
> > potential cross generational pointers even if the objects spans
> multiple
> > cards some of which are not flipped. The brick table is used to
found
> > the start of the first object outside the card that has been
flipped.
> The reason i am trying to fit in my own GC that requires the
> writebarrier(objbase, value) due to the algorithm functionality. and
> finding the object base at runtime would be too costly. Is there any
> way to do this in compile time?
>
> >
> > Regards,
> > Archana
> >
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
> NEW! ASP.NET courses you may be interested in:
>
> 2 Days of ASP.NET, 29 Sept 2003, in Redmond
> http://www.develop.com/courses/2daspdotnet
>
> Guerrilla ASP.NET, 13 Oct 2003, in Boston
> http://www.develop.com/courses/gaspdotnet
>
> View archives and manage your subscription(s) at
> http://discuss.develop.com
>
> ===================================
> This list is hosted by DevelopMentor(r)  http://www.develop.com
> NEW! ASP.NET courses you may be interested in:
>
> 2 Days of ASP.NET, 29 Sept 2003, in Redmond
> http://www.develop.com/courses/2daspdotnet
>
> Guerrilla ASP.NET, 13 Oct 2003, in Boston
> http://www.develop.com/courses/gaspdotnet
>
> View archives and manage your subscription(s) at
http://discuss.develop.com
>

--
Regards,
Archana

===================================
This list is hosted by DevelopMentor(r)  http://www.develop.com
NEW! ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at
http://discuss.develop.com

===================================
This list is hosted by DevelopMentorŪ  http://www.develop.com
NEW! ASP.NET courses you may be interested in:

2 Days of ASP.NET, 29 Sept 2003, in Redmond
http://www.develop.com/courses/2daspdotnet

Guerrilla ASP.NET, 13 Oct 2003, in Boston
http://www.develop.com/courses/gaspdotnet

View archives and manage your subscription(s) at http://discuss.develop.com

Reply via email to