Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 1:1ce0f4ee7357, committed 2016-04-22
- Comitter:
- manitou
- Date:
- Fri Apr 22 17:07:33 2016 +0000
- Parent:
- 0:7343f324d853
- Commit message:
- table-drive bug fix
Changed in this revision
| FastCRCsw.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 7343f324d853 -r 1ce0f4ee7357 FastCRCsw.cpp
--- a/FastCRCsw.cpp Fri Apr 22 09:51:51 2016 +0000
+++ b/FastCRCsw.cpp Fri Apr 22 17:07:33 2016 +0000
@@ -361,8 +361,8 @@
#define crc_n4d(crc, data, table) crc ^= data; \
crc = table[(crc & 0xff) + 0x300] ^ \
table[((crc >> 8) & 0xff) + 0x200] ^ \
- table[((data >> 16) & 0xff) + 0x100] ^ \
- table[data >> 24];
+ table[((crc >> 16) & 0xff) + 0x100] ^ \
+ table[(crc >> 24) & 0xff];
#define crcsm_n4d(crc, data, table) crc ^= data; \
crc = (crc >> 8) ^ table[crc & 0xff]; \
@@ -377,7 +377,11 @@
* @return CRC value
*/
+#if CRC_BIGTABLES
+#define CRC_TABLE_CRC32 crc_table_crc32_big
+#else
#define CRC_TABLE_CRC32 crc_table_crc32
+#endif
uint32_t FastCRC32::crc32_upd(const uint8_t *data, uint16_t len)
{
@@ -385,28 +389,28 @@
uint32_t crc = seed;
while (((uintptr_t)data & 3) && len) {
- crc = (crc >> 8) ^ crc_table_crc32[(crc & 0xff) ^ *data++];
+ crc = (crc >> 8) ^ CRC_TABLE_CRC32[(crc & 0xff) ^ *data++];
len--;
}
while (len >= 16) {
len -= 16;
#if CRC_BIGTABLES
- crc_n4d(crc, ((uint32_t *)data)[0], crc_table_crc32_big);
- crc_n4d(crc, ((uint32_t *)data)[1], crc_table_crc32_big);
- crc_n4d(crc, ((uint32_t *)data)[2], crc_table_crc32_big);
- crc_n4d(crc, ((uint32_t *)data)[3], crc_table_crc32_big);
+ crc_n4d(crc, ((uint32_t *)data)[0], CRC_TABLE_CRC32);
+ crc_n4d(crc, ((uint32_t *)data)[1], CRC_TABLE_CRC32);
+ crc_n4d(crc, ((uint32_t *)data)[2], CRC_TABLE_CRC32);
+ crc_n4d(crc, ((uint32_t *)data)[3], CRC_TABLE_CRC32);
#else
- crcsm_n4d(crc, ((uint32_t *)data)[0], crc_table_crc32);
- crcsm_n4d(crc, ((uint32_t *)data)[1], crc_table_crc32);
- crcsm_n4d(crc, ((uint32_t *)data)[2], crc_table_crc32);
- crcsm_n4d(crc, ((uint32_t *)data)[3], crc_table_crc32);
+ crcsm_n4d(crc, ((uint32_t *)data)[0], CRC_TABLE_CRC32);
+ crcsm_n4d(crc, ((uint32_t *)data)[1], CRC_TABLE_CRC32);
+ crcsm_n4d(crc, ((uint32_t *)data)[2], CRC_TABLE_CRC32);
+ crcsm_n4d(crc, ((uint32_t *)data)[3], CRC_TABLE_CRC32);
#endif
data += 16;
}
while (len--) {
- crc = (crc >> 8) ^ crc_table_crc32[(crc & 0xff) ^ *data++];
+ crc = (crc >> 8) ^ CRC_TABLE_CRC32[(crc & 0xff) ^ *data++];
}
crc = ~crc;
@@ -428,34 +432,39 @@
* @param datalen Length of Data
* @return CRC value
*/
+#if CRC_BIGTABLES
+#define CRC_TABLE_CKSUM crc_table_cksum_big
+#else
+#define CRC_TABLE_CKSUM crc_table_cksum
+#endif
uint32_t FastCRC32::cksum_upd(const uint8_t *data, uint16_t len)
{
uint32_t crc = seed;
while (((uintptr_t)data & 3) && len) {
- crc = (crc >> 8) ^ crc_table_cksum[(crc & 0xff) ^ *data++];
+ crc = (crc >> 8) ^ CRC_TABLE_CKSUM[(crc & 0xff) ^ *data++];
len--;
}
while (len >= 16) {
len -= 16;
#if CRC_BIGTABLES
- crc_n4d(crc, ((uint32_t *)data)[0], crc_table_cksum_big);
- crc_n4d(crc, ((uint32_t *)data)[1], crc_table_cksum_big);
- crc_n4d(crc, ((uint32_t *)data)[2], crc_table_cksum_big);
- crc_n4d(crc, ((uint32_t *)data)[3], crc_table_cksum_big);
+ crc_n4d(crc, ((uint32_t *)data)[0], CRC_TABLE_CKSUM);
+ crc_n4d(crc, ((uint32_t *)data)[1], CRC_TABLE_CKSUM);
+ crc_n4d(crc, ((uint32_t *)data)[2], CRC_TABLE_CKSUM);
+ crc_n4d(crc, ((uint32_t *)data)[3], CRC_TABLE_CKSUM);
#else
- crcsm_n4d(crc, ((uint32_t *)data)[0], crc_table_cksum);
- crcsm_n4d(crc, ((uint32_t *)data)[1], crc_table_cksum);
- crcsm_n4d(crc, ((uint32_t *)data)[2], crc_table_cksum);
- crcsm_n4d(crc, ((uint32_t *)data)[3], crc_table_cksum);
+ crcsm_n4d(crc, ((uint32_t *)data)[0], CRC_TABLE_CKSUM);
+ crcsm_n4d(crc, ((uint32_t *)data)[1], CRC_TABLE_CKSUM);
+ crcsm_n4d(crc, ((uint32_t *)data)[2], CRC_TABLE_CKSUM);
+ crcsm_n4d(crc, ((uint32_t *)data)[3], CRC_TABLE_CKSUM);
#endif
data += 16;
}
while (len--) {
- crc = (crc >> 8) ^ crc_table_cksum[(crc & 0xff) ^ *data++];
+ crc = (crc >> 8) ^ CRC_TABLE_CKSUM[(crc & 0xff) ^ *data++];
}
crc = ~REV32(crc);