|
From: Julian S. <js...@ac...> - 2012-11-30 15:56:26
|
On Friday, November 30, 2012, Petar Jovanovic wrote: > It could happen there as well, but chaining made it worse as it removed > a block with LL. I'm not sure I understand what you mean. Chaining just makes it cheaper to get from one block to the next. It does not change the order in which the blocks are visited. Anyway .. not directly relevant. > If we introduce a change which would prevent redirections coming from > branches and jumps (in contrast to branch-and-link and jump-and-link), > would not that work for ARM as well? It is true that "write PC+4 to the link register and set PC to some new value" clearly indicates a call. No problems there. The difficulty is that "set PC to some new value but don't change the link register" usually, but not always, indicates a non-call. In particular, if we are doing a tail call then there will simply be a jump to the start of the new function (or this one, if recursive), which is no different from a conditional branch back to a loop that starts at the beginning of this function. So the presence/absence of writing the link register can't be used to reliably distinguish the call/non-call cases. J |