Pequeno problema na rotina cksum resolvido

7 views
Skip to first unread message

Frederico Pissarra

unread,
Jan 11, 2015, 7:13:13 AM1/11/15
to t50...@googlegroups.com
Tanto o código anterior, obtido da RFC 1701, quanto o código atual contém um erro sutil: Os "carry" bits, entre duas acumulações não são considerados!

Usei a rotina como referência de otimização num material que estou escrevendo e percebi o bug. Acontece que, na linguagem C, o bit de carry é ignorado em operações com inteiros. Se você fizer:

unsigned short a, b, c;

a = b = 0xffff;
c = a + b;

A variável 'c' conterá 0xfffe e não 0x1fffe, como deveria ser. O bit adicional é simplesmente jogado fora...

Para meus propósitos reescrevi a rotina em assembly (para x86-64) e obtive 130% de ganho de performance. Que vale à pena, já que cksum é chamada na confecção de todo pacote...
Se houver interesse, posso colocar ambas as rotinas no T50, compiladas de acordo com a arquitetura do usuário... Uma em C (mais genérica) e outra em ASM (usando NASM)...

A correção tá lá no GITHUB (sem o código em ASM)...

Desculpem por ter passado tanto tempo sem dar atenção ao projeto...

[]s
Fred
Reply all
Reply to author
Forward
0 new messages