On Mon, Mar 24, 2014 at 03:17:41AM +0100, Bernd Paysan wrote: > What did the trick? Using FIRST_NEXT actually in after_last:, this is a > dummy > for getting the tail of the last address, we can put anything we like there. > Doing FIRST_NEXT there makes it a noop, and since there's nothing to move > into > the goto, it stays as small as it should.
But does that work with the versions of GCC that combine all the indirect gotos into one? We actually cut the primitives into the pre-goto part and the goto part, and then stick the first goto * there to work around that. And IIRC these versions of gcc jump to the first goto *. The following solutions suggest themselves to me: 1) Check whether the goto part of the primitive itself is relocatable. If it is, use it. If not, use the shortest goto part that is relocatable. 2) Just like for checking for registers and long longs, try whether the engine works without the workaround mentioned above, and only employ the workaround if it doesn't. - anton
