Behaviour of setjmp/longjmp and registers
101 more school days
cquenel at polyslo.CalPoly.EDU
Mon Jan 23 14:51:19 AEST 1989
I write:
> Should it ever be necessary/desirable to restore any registers
> on a long-jump BESIDES the frame-pointer and/or stack-pointer ?
Andrew Koenig explains:
[at one time VAX implementations would restore "register" variables]
[this was arguably useful.]
I see this as a BAD thing to try to guarantee.
I agree with the way ANSI did it.
To the best of my understanding the "register"
storage class has always been a "hint" to the compiler.
Since many modern compilers will fairly often out-right ignore
these hints, it makes the use of this feature EXTREMELY unportable at
best. Consider a very straight-forward example:
I use this restoral feature to restore a register variable
through a longjump. How many variables can I restore this way ?
How many registers variables can I effectively use ?
Depending on a "register" variable to actually BE in a register
is (as far as I'm concerned) a BAD thing.
I hope there weren't too many people who were in favor of this
in the ANSI committees.
Since setjmp/longjmp is such a work-around/violate-all-the-rules/
just-get-me-the-f*ck-back-to-where-I-started/ sorta feature,
(That is to say, a LAST RESORT, to be used almost exclusively
in system dependant routines.) I would say that it SHOULDN'T
actually restore anything. If you need anything to be restored,
then save it yourself when you do a setjump in a volatile variable.
I think this newer definition of setjmp/longjmp is much cleaner
and provides only what is necessary and most useful. As a compiler
writer, it certainly makes sense to me to only implement what can
be guaranteed. That is, to provide well-defined services that
can be relied on, and don't provide anything that might/might-not work.
Comments anyone ?
--chris
If you understand what you're doing, you're not learning anything.
-------------------------------------------------------------------------------
| Nothing the God of Bio-Mechanics wouldn't let you in heaven for ? |
-------------------------------------------------------------------------------
| Chris Quenelle | Smart Mailers -> cquenel at polyslo.CalPoly.EDU |
| Computer Systems Lab | Dumb Mailers -> !ucbvax!voder!polyslo!cquenel |
| Cal Poly State Univ. |-------------------------------------------------|
| San Luis Obispo, CA 93407 | On a clear disk you can seek forever. |
-------------------------------------------------------------------------------
More information about the Comp.lang.c
mailing list