|Re: Compiler support for a faster interrupt response ah739@cleveland.Freenet.Edu (1995-09-29)|
|Re: Compiler support for a faster interrupt response email@example.com (David Whalley) (1995-09-29)|
|Re: Compiler support for a faster interrupt response firstname.lastname@example.org (1995-09-29)|
|Re: Compiler support for a faster interrupt response email@example.com (1995-10-03)|
|Re: Compiler support for a faster interrupt response gary@Intrepid.COM (1995-10-06)|
|Re: Compiler support for a faster interrupt response firstname.lastname@example.org (Henry Dan Lambright) (1995-10-26)|
|From:||gary@Intrepid.COM (Gary Funck)|
|Organization:||Intrepid Technology Inc.|
|Date:||Fri, 6 Oct 1995 15:51:26 GMT|
yoon ji hoon_4S (email@example.com) wrote:
: Whenever interrupt occurs, it is basically true that
: all global registers should be saved in the interrupt
: prolog and restored in the epilog.
: But in the case of 29K processor, nearly 40 ~ 50 registers
: should be saved and restored at each interrupt, which, of course,
: increses the interrupt response time.
The 29K has a set of 64/so "global registers", however, the 29K
register usage convention allocates only GR96-GR127 for general
usage; the other registers are intended for dedicated use by
operating system/kernel software. All the global registers,
are considered "temporary registers", whose values will not
be preserved across calls. Therefore, compiler generated
code will typically not save any global register values, except
the few registers used to maintain the memory and register stacks.
Thus, an interrupt routine's prolog will typically save
_all_ the global registers, and must save a few other control
registers as well. The estimate of 40/50 registers is about right,
when the local registers, described below, are included in the total.
To offset some of the overhead of saving registers, the 29K does
have a block load/store, and a method of implementing block transfers
that speeds things up.
There is also a register stack that can be as deep as 128 registers.
The number of registers pushed depends upon the needs of the called
routine, so if your interrupt routine is not too complicated,
only a few local registers will be saved. However, without analyzing
the interrupt routine, and the transitive closure of the routines
it calls, one is forced to save all the global registers.
Right off hand, I don't see an easy method to lessen the overhead of
interrupt routine register saving/restoring without changing the 29K
register usage convention. The register convention is intentionally
register-intensive, trading off in favor of general computational
speed, versus interrupt response time. Unfortunately, the only way to
write a 29K interrupt routine that has minimal register-usage impact is to
write it in assembler.
| Gary Funck firstname.lastname@example.org
| Intrepid Technology Inc., Mountain View CA (415) 964-8135
Return to the
Search the comp.compilers archives again.