Mais um blog inútil.

Janeiro 6, 2008

Say no to branching

Filed under: Useless — dongs @ 19:47

No outro dia perguntaram-me porque é que uma função no fim tinha esta sequência de instruções:

sbb     eax, eax
sbb     eax, 0FFFFFFFFh

Ora, este tipo de cena vem tipicamente depois de comparações.

Se a carry flag for 1, a primeira linha vai resultar em EAX=0xFFFFFFFF. A segunda por sua vez em EAX=0xFFFFFFFF;

Se a carry flag for 0, a primeira linha var resultar em EAX=0xFFFFFFFF. A segunda em EAX=1;

Assim temos valores de retorno alternativos sem recorrer a branching. Mas muito menos legíveis.

Comentar

widgeon
widgeon
widgeon
widgeon