Em uma máquina de 32 bits, uma instrução "adicionar com transportar" usada como parte de uma sequência de adição de precisão múltipla precisa aceitar 65 bits no valor de operandos e calcular uma soma de 33 bits. As especificações do registro de origem identificarão de onde devem vir os 64 bits do operando e a especificação do registro de destino dirá para onde devem ir os 32 bits inferiores do resultado, mas o que fazer com o operando "adicionar um extra" ou o bit superior do resultado? Ser permitido especificar como parte da instrução de onde o operando extra deve vir e para onde o bit de resultado extra deve ir seria moderadamente útil, mas geralmente não seria tão útil a ponto de justificar um campo extra no código de operação. Ter um "local" fixo para lidar com o sinalizador de transporte pode ser um pouco estranho do ponto de vista da programação de instruções, mas é '
Se alguém tentasse projetar um conjunto de instruções para permitir aritmética de precisão múltipla, mas cada instrução estivesse limitada a dois operandos de 32 bits e um operando de destino de 32 bits, seria possível implementar um "add" de 64 bits em quatro instruções: "set r5 a 1 se r0 + r2 carregaria ou zero, caso contrário; calcule r4 = r1 + r3; calcule r5 = r4 + r5; calcule r4 = r0 + r2 ", mas ir além disso exigiria três instruções para cada palavra adicional. Ter um sinalizador de transporte disponível como fonte e destino suplementar reduz o custo para uma instrução por palavra.
Observe que o fato de ter um bit de instrução controlar se a instrução atualiza o registrador de sinalizador pode facilitar a execução fora de ordem, uma vez que as instruções que usam ou modificam os bits de sinalizador devem manter sua sequência relativa entre si, mas instruções que não podem ser reorganizados livremente. Dada a sequência:
ldr r0,[r1]
add r0,r0,r2
eors r4,r5,r6
uma unidade de execução poderia facilmente reconhecer que a terceira instrução poderia ser executada sem ter que esperar a leitura dos dados [r1]
, mas se a segunda instrução fosse, adds r0,r0,r2
isso só seria possível se a unidade de execução pudesse garantir que, no momento em que algo tentasse usar os sinalizadores, o sinalizador zero manteria o valor estabelecido na terceira instrução, mas o sinalizador de transporte manteria o valor na segunda.