| |
| /* |
| * Copyright (C) Igor Sysoev |
| * Copyright (C) Nginx, Inc. |
| */ |
| |
| |
| #ifndef _NGX_CRC_H_INCLUDED_ |
| #define _NGX_CRC_H_INCLUDED_ |
| |
| |
| #include <ngx_config.h> |
| #include <ngx_core.h> |
| |
| |
| /* 32-bit crc16 */ |
| |
| static ngx_inline uint32_t |
| ngx_crc(u_char *data, size_t len) |
| { |
| uint32_t sum; |
| |
| for (sum = 0; len; len--) { |
| |
| /* |
| * gcc 2.95.2 x86 and icc 7.1.006 compile |
| * that operator into the single "rol" opcode, |
| * msvc 6.0sp2 compiles it into four opcodes. |
| */ |
| sum = sum >> 1 | sum << 31; |
| |
| sum += *data++; |
| } |
| |
| return sum; |
| } |
| |
| |
| #endif /* _NGX_CRC_H_INCLUDED_ */ |