[kaffe] Kaffe JIT on Alpha
Timothy Stack
stack at cs.utah.edu
Tue Apr 22 13:02:01 PDT 2003
hi,
I'll butt in and try to offer some advice...
> Hi Dalibor,
>
> Thanks for your response. I actually managed to compile rt.jar on an x86
> and use it to proceed in the build. This has atleast allowed me to try
> and understand the problem.
>
> There is something I came across during debugging the code generated by
> the JIT. Here is a sample prolog generated by the jit.
>
> 0: lda gp,0(pv)
> 4: lda sp,0(sp)
> 8: stq ra,0(sp)
> ...
> 24: stq fp,56(sp)
> ...
> 48: lda fp,0(sp)
This is actually a template, it will be changed later on. If you CVS
update and get cross-language debugging (also called xdebugging) working,
it will make things much easier since you can do a 'disas' on the method
in gdb.
> My question is: shouldnt the stack pointer be decremented with the
> framesize before various registers are saved?
That is what this line does:
> 4: lda sp,0(sp)
As I said, this it just a template, it will be changed to something like
the following when the jitter is finished:
lda sp, -24(sp)
Which subtracts 24 from the current stack pointer and stores it back in
the register.
> The relevent piece of code
> I attach below seems to not update sp at all. I find this to be the case
> on mips as well. The push instructions on x86 take care of updating the
> sp there. Or am I missing something here??
>
> /* Calling Standard for Alpha Systems
> * 3.2.6.1 Entry Code Sequence
> * 2. If stack space is allocated (PDSC_RPD_FRAME_SIZE is not
> 0), set
> * register SP to SP - PDSC_RPD_FRAME_SIZE.
> * After any necessary calculations and stack limit checks, this
> * step must be completed in exactly one instruction that
> modifies
> * SP. This instruction must be the one specified by
> * PDSC_RPD_SP_SET. */
>
> alpha_jit_info.sp_set = CODEPC / 4;
> L->type = Lnegframe|Labsolute|Lgeneral;
> L->at = (uintp)CODEPC;
These lines and 'L = const_label(1)' are doing the magic. Once jitting
has completed and the final location of the code has been determined, the
jitter will go back through and fixup these labels (see FAQ/FAQ.jit3).
So the next line:
> op_lda(REG_sp, REG_sp, 0);
Will be rewritten by the LABEL_Lframe() macro in jit.h
> Thanks again....
>
> Kapil
tim stack
More information about the kaffe
mailing list