setjmp/longjmp, 68000 moveml instruction
John Gilmore
gnu at sun.uucp
Thu Nov 22 17:32:12 AEST 1984
> Here is the 68000 entry/exit sequence used by the MIT pcc:
>
> link a6,#<localsize>
> tstb sp@(132.)
> moveml #mask,a6@(offset)
> ...
> moveml a6@(offset),#mask
> unlk a6
> rts
There is an awful lot of fat in the MIT pcc code. Above is some of it.
For example, it generates the moveml's even when the mask is zero (no
registers need to be saved). Also, the offset used is ALWAYS the same
as the <localsize>, thus they could have done:
moveml #mask,sp@
saving another word of instructions & slowness.
Now, we could add back in some fat by inserting
movw #mask,sp@(someoffset)
to make longjmp work, but if the average subroutine is 30 instructions long,
that's a large price to pay. I don't want to dedicate 3% of my system
to housekeeping for longjmp. Even if the average is 100, 1% for longjmp
is still too much!
More information about the Comp.lang.c
mailing list