diff options
author | lloyd <[email protected]> | 2008-03-09 02:34:44 +0000 |
---|---|---|
committer | lloyd <[email protected]> | 2008-03-09 02:34:44 +0000 |
commit | c6629040068af67dbd9648eb64cc47b1923287cd (patch) | |
tree | 64e0c6d3f91eee839f125e09584c85863dad324d /include/bit_ops.h | |
parent | 05bb536fbebb4e856bbcf15e3bc5f8df6d7fb48f (diff) |
Also inline xor_buf, both for immediate effeciency gains and for future
writing of it in assembly.
Diffstat (limited to 'include/bit_ops.h')
-rw-r--r-- | include/bit_ops.h | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/include/bit_ops.h b/include/bit_ops.h index d0fb03d1f..ec46dbf43 100644 --- a/include/bit_ops.h +++ b/include/bit_ops.h @@ -44,10 +44,38 @@ inline u64bit reverse_bytes(u64bit input) } /************************************************* -* Array XOR * +* XOR Arrays * *************************************************/ -void xor_buf(byte[], const byte[], u32bit); -void xor_buf(byte[], const byte[], const byte[], u32bit); +inline void xor_buf(byte data[], const byte mask[], u32bit length) + { + while(length >= 8) + { + data[0] ^= mask[0]; data[1] ^= mask[1]; + data[2] ^= mask[2]; data[3] ^= mask[3]; + data[4] ^= mask[4]; data[5] ^= mask[5]; + data[6] ^= mask[6]; data[7] ^= mask[7]; + data += 8; mask += 8; length -= 8; + } + for(u32bit j = 0; j != length; ++j) + data[j] ^= mask[j]; + } + +/************************************************* +* XOR Arrays * +*************************************************/ +inline void xor_buf(byte out[], const byte in[], const byte mask[], u32bit length) + { + while(length >= 8) + { + out[0] = in[0] ^ mask[0]; out[1] = in[1] ^ mask[1]; + out[2] = in[2] ^ mask[2]; out[3] = in[3] ^ mask[3]; + out[4] = in[4] ^ mask[4]; out[5] = in[5] ^ mask[5]; + out[6] = in[6] ^ mask[6]; out[7] = in[7] ^ mask[7]; + in += 8; out += 8; mask += 8; length -= 8; + } + for(u32bit j = 0; j != length; ++j) + out[j] = in[j] ^ mask[j]; + } /************************************************* * Simple Bit Manipulation * |