多くのプロセッサには、すぐに指定された特定のオペランドに対して比較などの算術演算を実行できる「小さな」命令があります。これらの特別な値以外のオペランドは、より大きな命令形式を使用するか、場合によっては「メモリから値をロードする」命令を使用する必要があります。たとえば、ARM Cortex-M3命令セットでは、少なくとも5つの方法で値を定数と比較できます。
cmp r0,#1 ; One-word instruction, limited to values 0-255
cmp r0,#1000 ; Two-word instruction, limited to values 0-255 times a power of 2
cmn r0,#1000 ; Equivalent to comparing value with -1000
; Two-word instruction, limited to values 0-255 times a power of 2
mov r1,#30000 ; Two words; can handle any value 0-65535
cmp r0,r1 ; Could use cmn to compare to values -1 to -65535
ldr r1,[constant1000000] ; One or two words, based upon how nearby the constant is
cmp r0,r1
...
constant1000000:
dd 1000000
最初の形式は最小です。2番目と3番目の形式は、コードがフェッチされるメモリの速度に応じて、同じくらい速く実行される場合とされない場合があります。4番目の形式はほぼ確実に最初の3つより遅くなり、5番目の形式はさらに遅くなりますが、後者はどの32ビット値でも使用できます。
古いx86プロセッサでは、短い形式の比較命令は長い形式の命令よりも高速に実行されますが、多くの新しいプロセッサは、長い形式と短い形式の両方を最初にフェッチするときに同じ表現に変換し、その統一表現をキャッシュに保存します。したがって、組み込みコントローラ(多くのモバイルプラットフォームで見られるような)には速度の違いがありますが、多くのx86ベースのコンピュータには違いがありません。
また、ループ内で定数が頻繁に使用される多くの場合、コンパイラーは、定数をレジスターに一度ロードするだけで済みます-ループが開始する前に-タイミングの違いを議論する必要があります。一方、小さなループであっても、常に発生するとは限らない状況があります。ループが小さいが頻繁に実行される場合、短い即時値を含む比較と長い即時値を含む比較の間に大きなパフォーマンスが得られる場合があります。