[LLVMdev] JIT machine code deletion

Ralph Corderoy ralph at inputplus.co.uk
Sun May 14 02:00:26 PDT 2006


Hi Chris,

> On Fri, 12 May 2006, Ralph Corderoy wrote:
> > recompileAndRelinkFunction() overwrites the old machine code with a
> > branch to the new.  Is it always guaranteed that there's space to
> > write the new branch instructions?
> 
> Yes.

OK.

> > A quick look suggests the x86 takes five bytes, PowerPC 16,
> 
> PPC should be 4 bytes in the normal case.  It is up to the backend to
> implement this API correctly... if it doesn't, that's a bug: please
> report it!

No, EmitBranchToAt() always emits 16 bytes.

    AtI[0] = BUILD_LIS(12, Addr >> 16);   // lis r12, hi16(address)
    AtI[1] = BUILD_ORI(12, 12, Addr);     // ori r12, r12, low16(address)
    AtI[2] = BUILD_MTCTR(12);             // mtctr r12
    AtI[3] = BUILD_BCTR(isCall);          // bctr/bctrl

but I understand now how startFunctionStub() is given StubSize and on
PowerPC it's 16 so there's no problem.

Cheers,


Ralph.





More information about the llvm-dev mailing list