[prev] [thread] [next] [lurker] [Date index for 2007/01/29]
It was thus said that the Great Yossi Kreinin once stated: > > Let's make it simple: did you actually see it /done/? I tried it with gcc > 3.3.1 on x86 and exceptions do translate to overhead (I don't know x86 > assembly either, but I can see when 2 additional instructions are emitted). > Green Hills on ARM is worse, trust me. Let's say I don't care for the > monstrous inflation of data. Let's say I don't care that the generated > assembly code looks like dog vomit. Can you name a platform where no extra > instructions in the normal flow path are generated when exceptions are > enabled? VMS. Or rather, VMS on the VAX architecture, and there, it's only one instruction overhead. As part of the calling sequence (using CALLG/CALLS) the CPU pushes a 0 onto the stack. When an exception occurs (hardware, like division by zero, overflow, etc), the operating system (in this case, VMS) checks the current stack frame and if that extra spot on the stack isn't 0, it's assumed to be the address of an exception handler which is called. If it *is* 0, the OS will walk back up the call chain trying to locate a non-0 entry. If it doesn't find one, VMS will call a default exception handler. The single instruction overhead is simply filling in this slot on the stack. Now granted, the generalized call instructions (CALLG/CALLS) is probably slower than the "simple" subroutine call (BSBB/BSBW), but I'm guessing most exported routines expect to be called via CALLG/CALLS. -spc (Oh wait! Isn't this the Classic Computers Mailing List?)There's stuff above here
Generated at 23:01 on 06 Feb 2007 by mariachi 0.52