On Sat, 23 May 2009 16:06:43 +0800, yanh <yanh@lemote.com> wrote:
> > > +unsigned long
> > > + saved_ra,
> > > + saved_sp,
...
> > > + saved_v0,
> > > + saved_v1;
> >
> > Instead of enumerating them, I would prefer something like "struct
> > pt_regs saved_regs" or "unsigned long saved_regs[32]".
> This implementation is referencing the x86 platform.
> Not all the 32 reigsters are needed to save.
> Maybe the whole registers needed to save can still be reduced.
I did not mean save/restore all registers. I just mean using only one
symbol (struct or array). Though the struct or array contains some
unused members, it saves many instructions in
swsusp_arch_{suspend,resume}.
For saving N registers, (N * 2) instructions are required to save to
individual variables, but (N + 2) instructions are required to save to
array or struct.
> > > +void save_processor_state(void)
> > > +{
> > > + saved_status = read_c0_status();
> > > +}
> >
> > No need to save/restore floating point registers?
> the floating point registers are not used by kernel, for user part, they
> are already saved while entering into kernel mode.
No, floating point registers are not saved on entering into kernel.
They are saved on context switch.
---
Atsushi Nemoto
|