命令の出現頻度
ubuntu-8.10-desktop-amd64 の 64ビット版の bash-3.2.39 と gimp-2.6.1 で使用 (シェアドライブラリは除く)されている 762,506 命令を集計してみました。 nop命令は除き、Jcc、CMOVcc、SETcc は条件部分をまとめています。
比較のため ubuntu-8.04-desktop-x86 の 32ビット版の bash-3.2.33 と gimp-2.4.5 でも 826,488 命令を集計してみました。
x86系CPUは32ビットでも64ビットでも、メモリ/レジスタ間の転送に MOV 命令を使用するため、圧倒的に MOV 命令の 使用率が大きくなっています。64ビットでは関数の引数の受け渡しにスタックを用いないため、PUSH と POP の使用頻度が少なくなっています。 また浮動小数点演算について、gcc は 32ビットでは FPU を使うコードを生成し、64ビットでは SSE2 のコードを生成していることがわかります。
条件分岐命令(Jcc)を1種類と数えると、32ビットでも64ビットでも全体の 90% が 10命令ほどで構成されていることがわかります。
64bit | 32bit | |||||
---|---|---|---|---|---|---|
命令 | 回数 | % | 命令 | 回数 | % | |
mov | 352576 | 46.24 | mov | 413508 | 50.03 | |
call | 100015 | 13.12 | call | 94591 | 11.44 | |
Jcc | 55026 | 7.22 | Jcc | 52908 | 6.40 | |
test | 34141 | 4.48 | pop | 33980 | 4.11 | |
xor | 32135 | 4.21 | test | 32943 | 3.99 | |
jmp | 26720 | 3.50 | lea | 25274 | 3.06 | |
add | 22108 | 2.90 | push | 25173 | 3.05 | |
cmp | 20422 | 2.68 | jmp | 24351 | 2.95 | |
pop | 19727 | 2.59 | add | 21217 | 2.57 | |
push | 14822 | 1.94 | cmp | 18371 | 2.22 | |
lea | 11901 | 1.56 | sub | 12937 | 1.57 | |
movsd | 11764 | 1.54 | ret | 11127 | 1.35 | |
sub | 11551 | 1.51 | fstp | 8408 | 1.02 | |
ret | 9939 | 1.30 | xor | 7265 | 0.88 | |
movzx | 4487 | 0.59 | fld | 6970 | 0.84 | |
movsxd | 2968 | 0.39 | movzx | 5269 | 0.64 | |
xchg | 2896 | 0.38 | fild | 1852 | 0.22 | |
movapd | 2134 | 0.28 | and | 1849 | 0.22 | |
mulsd | 1996 | 0.26 | fldcw | 1764 | 0.21 | |
cvtsi2sd | 1994 | 0.26 | xchg | 1724 | 0.21 | |
addsd | 1834 | 0.24 | fxch | 1641 | 0.20 | |
and | 1597 | 0.21 | sar | 1481 | 0.18 | |
CMOVcc | 1549 | 0.20 | fnstsw | 1359 | 0.16 | |
ucomisd | 1299 | 0.17 | sahf | 1348 | 0.16 | |
SETcc | 1240 | 0.16 | fmul | 1307 | 0.16 | |
xorpd | 1218 | 0.16 | leave | 1277 | 0.15 | |
imul | 1204 | 0.16 | imul | 1086 | 0.13 | |
subsd | 1157 | 0.15 | or | 1015 | 0.12 | |
sar | 1032 | 0.14 | fadd | 951 | 0.12 | |
cvttsd2si | 1013 | 0.13 | fst | 940 | 0.11 | |
movss | 930 | 0.12 | fistp | 862 | 0.10 | |
or | 848 | 0.11 | shl | 789 | 0.10 | |
shl | 834 | 0.11 | shr | 664 | 0.08 | |
shr | 767 | 0.10 | fldz | 644 | 0.08 | |
divsd | 748 | 0.10 | sete | 594 | 0.07 | |
cdqe | 631 | 0.08 | fucom | 580 | 0.07 | |
movaps | 471 | 0.06 | fnstcw | 560 | 0.07 | |
movsx | 407 | 0.05 | setne | 526 | 0.06 | |
movq | 317 | 0.04 | faddp | 515 | 0.06 | |
sbb | 248 | 0.03 | fsub | 479 | 0.06 | |
neg | 223 | 0.03 | fucomp | 465 | 0.06 | |
cvtps2pd | 216 | 0.03 | not | 459 | 0.06 | |
cmps | 206 | 0.03 | movsx | 361 | 0.04 | |
xorps | 184 | 0.02 | sbb | 351 | 0.04 | |
idiv | 174 | 0.02 | fdiv | 342 | 0.04 | |
not | 153 | 0.02 | fld1 | 322 | 0.04 | |
cvtsi2ss | 153 | 0.02 | movq | 317 | 0.04 | |
maxsd | 145 | 0.02 | adc | 315 | 0.04 | |
cvtpd2ps | 141 | 0.02 | fucompp | 314 | 0.04 | |
addss | 137 | 0.02 | fmulp | 218 | 0.03 | |
movs | 136 | 0.02 | fsubr | 217 | 0.03 | |
andpd | 133 | 0.02 | neg | 212 | 0.03 | |
unpcklps | 119 | 0.02 | cld | 186 | 0.02 | |
minsd | 107 | 0.01 | repz | 168 | 0.02 | |
movd | 104 | 0.01 | idiv | 146 | 0.02 | |
unpcklpd | 96 | 0.01 | fdivrp | 134 | 0.02 | |
mulss | 93 | 0.01 | fsubrp | 120 | 0.01 | |
ucomiss | 72 | 0.01 | fdivr | 107 | 0.01 | |
movdqu | 60 | 0.01 | movd | 104 | 0.01 | |
cvttss2si | 58 | 0.01 | fsubp | 104 | 0.01 | |
stos | 57 | 0.01 | fchs | 100 | 0.01 | |
paddw | 57 | 0.01 | fdivp | 87 | 0.01 | |
subss | 55 | 0.01 | fabs | 87 | 0.01 | |
por | 55 | 0.01 | div | 72 | 0.01 | |
div | 55 | 0.01 | movdqu | 60 | 0.01 | |
pandn | 53 | 0.01 | paddw | 57 | 0.01 | |
pand | 53 | 0.01 | setg | 55 | 0.01 | |
psubusb | 50 | 0.01 | por | 55 | 0.01 | |
divss | 49 | 0.01 | pandn | 53 | 0.01 | |
sqrtsd | 48 | 0.01 | pand | 53 | 0.01 | |
psubb | 44 | 0.01 | psubusb | 50 | 0.01 | |
punpcklbw | 42 | 0.01 | fsqrt | 48 | 0.01 | |
psrlw | 40 | 0.01 | psubb | 44 | 0.01 | |
pminub | 36 | 0.00 | punpcklbw | 42 | 0.01 | |
orpd | 36 | 0.00 | setle | 40 | 0.00 | |
emms | 31 | 0.00 | seta | 40 | 0.00 | |
andnpd | 31 | 0.00 | psrlw | 40 | 0.00 | |
punpckhbw | 26 | 0.00 | mul | 40 | 0.00 | |
packuswb | 23 | 0.00 | pminub | 36 | 0.00 | |
leave | 21 | 0.00 | emms | 31 | 0.00 | |
pmullw | 20 | 0.00 | rep | 29 | 0.00 | |
pcmpeqb | 20 | 0.00 | punpckhbw | 26 | 0.00 | |
fstp | 18 | 0.00 | setb | 23 | 0.00 | |
psubw | 17 | 0.00 | packuswb | 23 | 0.00 | |
mul | 16 | 0.00 | pmullw | 20 | 0.00 | |
maxss | 16 | 0.00 | pcmpeqb | 20 | 0.00 | |
cmpnltsd | 16 | 0.00 | fist | 20 | 0.00 | |
bswap | 16 | 0.00 | shrd | 18 | 0.00 | |
movntq | 15 | 0.00 | setl | 17 | 0.00 | |
cmpltsd | 13 | 0.00 | psubw | 17 | 0.00 | |
pxor | 12 | 0.00 | bswap | 16 | 0.00 | |
fld | 11 | 0.00 | movntq | 15 | 0.00 | |
adc | 11 | 0.00 | shld | 12 | 0.00 | |
paddusb | 10 | 0.00 | pxor | 12 | 0.00 | |
paddb | 9 | 0.00 | setge | 11 | 0.00 | |
minss | 7 | 0.00 | paddusb | 10 | 0.00 | |
rol | 6 | 0.00 | setbe | 9 | 0.00 | |
pmaxub | 5 | 0.00 | paddb | 9 | 0.00 | |
cwde | 5 | 0.00 | setae | 7 | 0.00 | |
fprem | 3 | 0.00 | bsr | 7 | 0.00 | |
fnstsw | 3 | 0.00 | pmaxub | 5 | 0.00 | |
cmpneqsd | 3 | 0.00 | setnp | 2 | 0.00 | |
cmplesd | 3 | 0.00 | ror | 2 | 0.00 | |
sqrtss | 2 | 0.00 | psllq | 2 | 0.00 | |
ror | 2 | 0.00 | hlt | 2 | 0.00 | |
psllq | 2 | 0.00 | cwde | 2 | 0.00 | |
hlt | 2 | 0.00 | setp | 1 | 0.00 | |
fldz | 2 | 0.00 | ||||
fld1 | 1 | 0.00 | ||||
fild | 1 | 0.00 | ||||
cmpeqsd | 1 | 0.00 | ||||
TOTAL | 762506 | 100.00 | TOTAL | 826488 | 100.00 |