[webkit-dev] want to port JIT to MIPS - JIT reg usage clean up?

x yz lastguy at yahoo.com
Fri Feb 27 16:55:02 PST 2009


Hi,
Still in JITPropertyAccess.cpp, may I expect some clean up on reg usage to easy porting?

        loadPtr(Address(regT2, FIELD_OFFSET(Structure, m_prototype)), regT2);
    }

    successCases.link(this);

    Call callTarget;

    // emit a call only if storage realloc is needed
    if (transitionWillNeedStorageRealloc(oldStructure, newStructure)) {
        pop(X86::ebx);
#if PLATFORM(X86_64)        ///
        move(Imm32(newStructure->propertyStorageCapacity()), regT1);
        move(Imm32(oldStructure->propertyStorageCapacity()), X86::esi);
        move(regT0, X86::edi);
        callTarget = call();
#elif PLATFORM(MIPS)
        move(Imm32(newStructure->propertyStorageCapacity()), regT2);
        move(Imm32(oldStructure->propertyStorageCapacity()), regT1);
        callTarget = call();
#else                       ///__cdel
        push(Imm32(newStructure->propertyStorageCapacity()));
        push(Imm32(oldStructure->propertyStorageCapacity()));
        push(regT0);
        callTarget = call();
        addPtr(Imm32(3 * sizeof(void*)), X86::esp); ///clean stack
#endif

The regTx seems to be working registers here, yet their definition are regparm(3) registers for function arugments. Such usage would cause conflict on other platforms. May I suggest that we use individual defined set of regs for func i/o argument and working?

we would put all these definition in a file named regMap.h, then we can remove all "X86::" from other JIT files.

I'd apperciate if sb can do it or help me to do it.
rgds
joe




--- On Sat, 2/28/09, x yz <lastguy at yahoo.com> wrote:

> From: x yz <lastguy at yahoo.com>
> Subject: Re: [webkit-dev] want to port JIT to MIPS - which calling convention is used here?
> To: webkit-dev at lists.webkit.org, "Zoltan Herczeg" <zherczeg at inf.u-szeged.hu>
> Date: Saturday, February 28, 2009, 7:40 AM
> Hi,
> Thanks for your help in advance:)
> in JITPropertyAccess.cpp:
>     if (transitionWillNeedStorageRealloc(oldStructure,
> newStructure)) {
>         pop(X86::ebx);      ///pop return address, why? for
> exception?
> #if PLATFORM(X86_64)        ///which convention is this?
>        
> move(Imm32(newStructure->propertyStorageCapacity()),
> regT1);  //edx
>        
> move(Imm32(oldStructure->propertyStorageCapacity()),
> X86::esi);
>         move(regT0, X86::edi);
>         callTarget = call();
> #else                       ///__cdecl, yet how can I know
> resizePropertyStorage() use __cdecl? 
>        
> push(Imm32(newStructure->propertyStorageCapacity()));
>        
> push(Imm32(oldStructure->propertyStorageCapacity()));
>         push(regT0);
>         callTarget = call();
>         addPtr(Imm32(3 * sizeof(void*)), X86::esp);
> ///clean stack
> #endif
> 
> 
> 
> 
> 
> 
>       
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev


      


More information about the webkit-dev mailing list