Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Relative performance of x86 inc vs. add instruction

Quick question, assuming beforehand

mov eax, 0

which is more efficient?

inc eax
inc eax

or

add eax, 2

Also, in case the two incs are faster, do compilers (say, the GCC) commonly (i.e. w/o aggressive optimization flags) optimize var += 2 to it?

PS: Don't bother to answer with a variation of "don't prematurely optimize", this is merely academic interest.

like image 730
PrematureOptimizer Avatar asked May 13 '11 14:05

PrematureOptimizer


People also ask

Is INC faster than add?

ADD is not always faster than INC , but it is almost always at least as fast (there are a few corner cases on certain older micro-architectures, but they are exceedingly rare), and sometimes significantly faster.

What is the difference between INC and add instructions?

After all, both ADD and INC updates flag registers. The only difference is that INC doesn't update CF .


1 Answers

If you ever wanna know raw performance stats of x86 instructions, see Dr Agner Fogs listings (volume 4 to be exact). As for the part about compilers, thats dependent on the compiler's code generator, and not something you should rely on too much.

on a side note: I find it funny/ironic that in a question about performance, you used MOV EAX,0 to zero a register instead of XOR EAX,EAX :P (and if MOV EAX,0 was done beforehand, the fastest variant would be to remove the inc's and add's and just MOV EAX,2).

like image 156
Necrolis Avatar answered Oct 19 '22 08:10

Necrolis