Cada processador em que trabalhei faz comparação subtraindo um dos operandos do outro, descartando o resultado e deixando os sinalizadores do processador (zero, negativo, etc.) sozinhos. Como a subtração é feita como uma única operação, o conteúdo dos operandos não importa.
A melhor maneira de responder à pergunta com certeza é compilar seu código em assembly e consultar a documentação do processador de destino para as instruções geradas. Para os atuais processadores da Intel, isso seria o Manual do Desenvolvedor de Software das Arquiteturas Intel 64 e IA-32 .
A descrição da instrução CMP
("compare") está no volume 2A, página 3-126 ou na página 618 do PDF e descreve sua operação como:
temp ← SRC1 − SignExtend(SRC2);
ModifyStatusFlags; (* Modify status flags in the same manner as the SUB instruction*)
Isso significa que o segundo operando é estendido, se necessário, subtraído do primeiro operando e o resultado colocado em uma área temporária no processador. Em seguida, os sinalizadores de status são definidos da mesma maneira que seriam para a instrução SUB
("subtract") (página 1492 do PDF).
Não há menção na documentação de CMP
ou SUB
de que os valores dos operandos têm alguma influência sobre a latência, portanto, qualquer valor usado é seguro.