This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: optimizing predictable branches on x86

> At least on x86 it should also be a good idea to know which way
> the branch is going to go, because it doesn't have explicit branch
> hints, you really want to be able to optimize the cold branch
> predictor case if converting from cmov to conditional branches.

x86 as of Pentium 4 does have branch hint instruction prefixes, but their use is somewhat

The Pentium® 4 Processor introduced new instructions for adding static hints to branches. It is
not recommended that a programmer use these instructions, as they add slightly to the size of the
code and are static hints only. It is best to use a conditional branch in the manner that the
static predictor expects, rather than adding these branch hints.

In the event that a branch hint is necessary, the following instruction prefixes can be added
before a branch instruction to change the way the static predictor behaves:

    * 0x3E ? statically predict a branch as taken
    * 0x2E ? statically predict a branch as not taken

see also section 2.1.1 Instruction Prefixes in
Branch hint prefixes (2EH, 3EH) allow a program to give a hint to the processor about
the most likely code path for a branch. Use these prefixes only with conditional
branch instructions (Jcc). Other use of branch hint prefixes and/or other undefined
opcodes with Intel 64 or IA-32 instructions is reserved; such use may cause unpre-
dictable behavior.

Never miss a thing.  Make Yahoo your home page.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]