diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/crc-6.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/crc-6.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/crc-6.c b/gcc/testsuite/gcc.dg/crc-6.c new file mode 100644 index 0000000..7fa60b2 --- /dev/null +++ b/gcc/testsuite/gcc.dg/crc-6.c @@ -0,0 +1,33 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-crc" } */ + +#include <stdint.h> + +typedef uint8_t crc; +#define WIDTH (8 * sizeof(crc)) +#define TOPBIT (1 << (WIDTH - 1)) + +crc +crcSlow(uint8_t const message[], int nBytes) { + crc remainder = 0; +/* +* Perform modulo-2 division, a byte at a time. +*/ + for (int byte = 0; byte < nBytes; ++byte) { + remainder ^= (message[byte] << (WIDTH - 8)); + for (uint8_t bit = 8; bit > 0; --bit) { + if (remainder & TOPBIT) { + remainder = (remainder << 1) ^ 1234; + } else { + remainder = (remainder << 1); + } + } + } + return (remainder); +} + +/* { dg-final { scan-tree-dump "Attention! crcSlow function calculates CRC." "crc"} } */ +/* { dg-final { scan-tree-dump "Return size is 8" "crc"} } */ +/* { dg-final { scan-tree-dump "Loop iteration number is 7" "crc"} } */ +/* { dg-final { scan-tree-dump "Bit forward" "crc"} } */ + |