Re: [PATCH] oops_in_progress is unlikely()

From: Pavel Machek
Date: Wed Sep 10 2003 - 16:29:33 EST


Hi!

> > > cmpl $1, %eax
> > > jz 1f
> > > jc 2f
> > > call do_default
> > > jmp more_code
> > > 1: call do_something_if_equal
> > > jmp more_code
> > > 2: call do_something_if_less
> > > more_code:
> > >
> > > In every case, one has to jump around code for other execution paths
> > > except the last, where you have to jump on condition anyway. There
> > > is no free liunch, and the straight-through route, do_default
> > > uas just as many jumps as the last.
> >
> > Here is your code optimised for no jumps in the "do_default" case:
> >
> > cmpl $1,%eax
> > jbe 1f
> > call do_default
> > more_code:
> > .subsection 1
> > 1: jnz 2f
> > call do_something_if_equal
> > jmp more_code
> > 2: call do_something_if_less
> > jmp more_code
> > .previous
> >
>
> You are a magician! Putting in a .subsection to hide the jump
> is absolute bullshit. The built-in macros, ".subsection", and
> ".previous" just made the damn linker do the fixup. You just
> did a long jump, out of the current code-stream, into some

He's right. Even without subsections you can move code somewhere
outside the function. And gcc should be smart enough to do that.

Pavel

--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/