[webkit-dev] want to port JIT to MIPS - how patchOffset* constant determined?
x yz
lastguy at yahoo.com
Tue Mar 3 11:31:35 PST 2009
in jit.h, for example:
static const int patchOffsetOpCallCompareToJump = 9;
static const int patchOffsetPutByIdStructure = 7;
static const int patchOffsetPutByIdPropertyMapOffset = 22;
static const int patchOffsetGetByIdBranchToSlowCase = 13;
thanks for help, I'm stucked here now.
joe
--- On Sat, 2/28/09, Gavin Barraclough <barraclough at apple.com> wrote:
> From: Gavin Barraclough <barraclough at apple.com>
> Subject: Re: [webkit-dev] want to port JIT to MIPS - JIT reg usage clean up?
> To: "WebKit Development" <webkit-dev at lists.webkit.org>
> Date: Saturday, February 28, 2009, 12:19 PM
> On Feb 27, 2009, at 4:55 PM, x yz wrote:
>
> > 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?
>
> First up, I think you're getting slightly confused
> about regparm(3). This is not used anywhere in the JS
> language JIT, only in WREC. In some configurations of the
> JIT we use fastcall semantics on x86... but none of this is
> really relevant to MIPS. Just ignore all this. Stick to
> the default MIPS ABI for stub functions.
>
> Reading between the lines, I'm guessing your concern
> here is that in setting up arguments for a JIT stub call you
> may trample the JIT's temporary registers? If so, I
> think you need to look at the argument passing more closely.
> The mechanisms to pass arguments to stub functions pass all
> arguments in memory – typically passing a single pointer
> to the stub functions, which can be used to retrieve the
> arguments. This pointer argument can be set up immediately
> prior to the call, so it does not interfere with the regT?
> temporaries. We follow this pattern on x86-64, where the
> ABI is typically to pass arguments in registers. You cannot
> trivially change the way this works, since the argument
> pointer is used for other purposes too (e.g. retrieving the
> arguments passed into the JIT code from within the stubs).
>
> We strongly prefer small, simple, incremental changes. A
> patch that tried to both port the JIT to a new platform and
> to introduce a new argument passing interface to the JIT
> stub functions sounds unlikely to get anywhere (a patch
> porting the JIT to a new platform is on its own very likely
> to be too much more than we'd want to land in one
> chunk). I'd suggest that a port would be wise to
> engineer it's initial solution to fit one of the
> existing argument passing mechanisms (these are selected by
> JIT_STUB_ARGUMENT_* switches, to help find the relevant
> code). (Alternatively, you're welcome to attempt to
> port x86-64 to make use of an in-register argument passing
> solution, which could be hugely useful. With this landed
> first and separately, a port could then build on top of
> this.)
>
> As a more direct answer to your question, you could
> endeavour to make the set of hardware registers used as JIT
> temporaries non-overlapping with ABI function argument
> registers on MIPS, but this is unlikely to be a general
> solution to anything for all platforms, due to limited
> register availability on some architectures.
>
> > we would put all these definition in a file named
> regMap.h, then we can remove all "X86::" from
> other JIT files.
>
> I don't think we'll be keen on taking preemptive
> changes so far ahead in preparation of a port. The first
> logical step in porting to a new platform is still to start
> with WREC, and this requires no changes in the JIT
> directory. Any refactoring of the existing JIT would make
> more sense more directly prior to work in that area.
>
> cheers,
> G.
>
> >
> > 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
> >
> >
> >
> > _______________________________________________
> > webkit-dev mailing list
> > webkit-dev at lists.webkit.org
> >
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev
>
> _______________________________________________
> 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