De nombreux processeurs ont de "petites" instructions capables d'effectuer des opérations arithmétiques, notamment des comparaisons, sur certains opérandes spécifiés immédiatement. Les opérandes autres que ces valeurs spéciales doivent soit utiliser un format d'instruction plus grand, soit, dans certains cas, utiliser une instruction "charger la valeur de la mémoire". Dans le jeu d'instructions ARM Cortex-M3, par exemple, il existe au moins cinq façons de comparer une valeur à une constante:
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
La première forme est la plus petite; les deuxième et troisième formes peuvent ou non être exécutées aussi rapidement, en fonction de la vitesse de la mémoire à partir de laquelle le code est extrait. La quatrième forme sera presque certainement plus lente que les trois premières, et la cinquième encore plus lente, mais cette dernière peut être utilisée avec n'importe quelle valeur 32 bits.
Sur les processeurs x86 plus anciens, les instructions de comparaison de forme abrégée s'exécutent plus rapidement que celles de forme longue, mais de nombreux processeurs plus récents convertissent les formulaires long et court en la même représentation lors de leur première extraction et stockent cette représentation uniforme dans le cache. Ainsi, alors que les contrôleurs intégrés (comme ceux que l'on trouve sur de nombreuses plates-formes mobiles) auront une différence de vitesse, de nombreux ordinateurs x86 ne le feront pas.
Notez également que dans de nombreux cas où une constante est fortement utilisée dans une boucle, un compilateur n'aura à charger la constante dans un registre qu'une seule fois - avant le début de la boucle - rendant les distinctions temporelles fictives. D'un autre côté, il y a des situations, même dans de petites boucles, où cela ne se produit pas toujours. Si une boucle est petite mais fortement exécutée, il peut parfois y avoir une performance majeure entre les comparaisons impliquant des valeurs immédiates courtes et celles impliquant des valeurs plus longues.