diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/crc-crc-reverse.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/crc-crc-reverse.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/crc-crc-reverse.c b/gcc/testsuite/gcc.dg/crc-crc-reverse.c new file mode 100644 index 00000000000..3b959fe0d13 --- /dev/null +++ b/gcc/testsuite/gcc.dg/crc-crc-reverse.c @@ -0,0 +1,29 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-crc-details" } */ + + #include <stdint.h> + uint32_t crc24_reverse(uint32_t crc, const uint8_t *data, uint8_t len) + { + uint32_t state = crc; + uint8_t i; + + for (i = 0; i < len; i++) { + uint8_t n, cur = data[len - i - 1]; + + for (n = 0; n < 8; n++) { + int top_bit = state >> 23; + + state = (state << 1) & 0xffffff; + state |= top_bit ^ ((cur >> (7 - n)) & 1); + if (top_bit) + state ^= 0xb4c000; + } + } + + return state; + } + +/* { dg-final { scan-tree-dump "crc24_reverse function maybe calculates CRC and returns it." "crc"} } */ +/* { dg-final { scan-tree-dump "Return size is 32" "crc"} } */ +/* { dg-final { scan-tree-dump "Loop iteration number is 7" "crc"} } */ +/* { dg-final { scan-tree-dump "Bit forward" "crc"} } */
\ No newline at end of file |