
Dear Joakim Tjernlund,
In message OFF4AB0804.BE309218-ONC12576E9.003A69DF-C12576E9.003B4D86@transmode.se you wrote:
hmm, I recently discovered that normal user space headers always define both __LITTLE_ENDIAN and __BIG_ENDIAN so therefore a # ifdef __LITTLE_ENDIAN # define DO_CRC(x) crc = tab[(crc ^ (x)) & 255] ^ (crc >> 8) # else # define DO_CRC(x) crc = tab[((crc >> 24) ^ (x)) & 255] ^ (crc << 8) # endif
Wont work. One have to use #if __BYTE_ORDER == __LITTLE_ENDIAN instead.
Wenn...
3ee8c120 (Joakim Tjernlund 2009-11-19 13:44:16 +0100 166) # ifdef __LITTLE_ENDIAN 3ee8c120 (Joakim Tjernlund 2009-11-19 13:44:16 +0100 167) # define DO_CRC(x) crc = tab[(crc ^ (x)) & 255] ^ (crc >> 8) 3ee8c120 (Joakim Tjernlund 2009-11-19 13:44:16 +0100 168) # else 3ee8c120 (Joakim Tjernlund 2009-11-19 13:44:16 +0100 169) # define DO_CRC(x) crc = tab[((crc >> 24) ^ (x)) & 255] ^ (crc << 8) 3ee8c120 (Joakim Tjernlund 2009-11-19 13:44:16 +0100 170) # endif
commit 3ee8c12071f0e3bdda25125b63c9d3fd54a7c9d8 Author: Joakim Tjernlund Joakim.Tjernlund@transmode.se Date: Thu Nov 19 13:44:16 2009 +0100
crc32: Impl. linux optimized crc32()
Ported over the more efficient linux crc32() function. A quick comparsion on ppc: After changing the old crc32 to do 4 bytes in the inner loop to be able to compare with new version one can note: - old inner loop has 61 insn, new has 19 insn. - new crc32 does one 32 bit load of data to crc while the old does four 8 bits loads. - size is bit bigger for the new crc32: 1392(old) 1416(new) of text. The is because the new version shares code with crc32_no_comp() instead of duplicating code. - about 33% faster on ppc: New > crc 0 0xfffffff -> 39 secs Old > crc 0 0xfffffff -> 60 secs
Signed-off-by: Joakim Tjernlund Joakim.Tjernlund@transmode.se
Looks as if this were your very own commit. Do you have a fix in the works?
Best regards,
Wolfgang Denk