I think I see better what you mean . This is a software exception handler (c++) and is therefore language dependent. All of those extra assembly statements you see are to implement the possibility of an unwind (with some other book keeping) through exception segments. This couldn't be implemented in the processor unless the processor enforced a particular calling convention, because stack references, variable methods, etc. vary from language to language. The processor just provides the basic environment in which to execute its set of commands (registers, the concept of a stack, memory addressing, etc.). If an assembly command causes, say, a dbz (divide by zero) it handles that appropriately (processor dependent), and gives the low level exception handling you are asking for. The higher level languages set up the environment in their own way and thus use various and more elaborate schemes to provide for the higher level support of their "exceptions" (which often include things the processor is perfectly happy doing but does not conform to the standard of the language).

Of course, if you are suggesting that there should be processors that set higher restrictions on calling conventions, argument passing, etc. then I totally agree that this could probably make things more efficient. It just might restrict its use from some languages...

Am I understanding you yet? I'm still quite interested if you want to discuss this more!