1 #include "sse4_2-check.h"
6 #define POLYNOMIAL 0x11EDC6F41LL
11 shift_mem_by1 (unsigned char* buf
, int len
)
15 for (i
= len
- 1; i
>= 0; i
--)
18 if (i
> 0 && (buf
[i
-1] & 0x80))
24 do_div (unsigned char* buf
, unsigned char* div
)
27 for (i
= 0; i
< 5; i
++)
32 calc_rem (unsigned char* buf
, int len
)
36 unsigned long long ll
;
44 unsigned char *div_buf
;
45 unsigned char divident
[MAX_BUF
];
49 divisor
.ll
= POLYNOMIAL
<< 7LL;
51 memcpy (divident
, buf
, disp
);
53 div_buf
= divident
+ disp
- 5;
55 for (i
= 0; i
< len
- 32; i
++)
57 if ((div_buf
[4] & 0x80))
58 do_div (div_buf
, divisor
.c
);
59 shift_mem_by1 (divident
, disp
);
62 memcpy (ret
.c
, div_buf
+ 1, sizeof (ret
));
67 reverse_bits (unsigned char *src
, int len
)
69 unsigned char buf
[MAX_BUF
];
70 unsigned char *tmp
= buf
+ len
- 1;
74 for (i
= 0; i
< len
; i
++)
77 for (j
= 0; j
< 8; j
++)
78 if ((src
[i
] & (1 << j
)))
83 for (i
= 0; i
< len
; i
++)
88 shift_mem ( unsigned char *src
, unsigned char *dst
, int len
, int shft
)
93 memset (dst
, 0, len
+ disp
);
94 for (i
= 0; i
< len
; i
++)
95 dst
[i
+ disp
] = src
[i
];
99 xor_mem (unsigned char *src
, unsigned char *dst
, int len
)
104 for (i
= 0; i
< disp
; i
++)
109 compute_crc32 (DST_T crc
, SRC_T inp
)
111 unsigned char crcbuf
[sizeof (DST_T
)];
112 unsigned char inbuf
[sizeof (SRC_T
)];
113 unsigned char tmp1
[MAX_BUF
], tmp2
[MAX_BUF
];
121 crc_sh
= sizeof (SRC_T
) * 8;
122 xor_sz
= 32 + crc_sh
;
123 memcpy (crcbuf
, &crc
, sizeof (DST_T
));
124 memcpy (inbuf
, &inp
, sizeof (SRC_T
));
126 reverse_bits (crcbuf
, 4);
127 reverse_bits (inbuf
, sizeof (SRC_T
));
129 shift_mem (inbuf
, tmp1
, sizeof (SRC_T
), 32);
130 shift_mem (crcbuf
, tmp2
, 4, crc_sh
);
132 xor_mem (tmp1
, tmp2
, xor_sz
);
134 ret
.i
= calc_rem (tmp2
, xor_sz
);
136 reverse_bits (ret
.c
, 4);
150 for (i
= 0; i
< NUM
; i
++)
153 if (sizeof (DST_T
) > 4)
154 dst
[i
] |= (DST_T
)rand () << (DST_T
)(sizeof (DST_T
) * 4);
156 if (sizeof (SRC_T
) > 4)
157 src
[i
] |= (SRC_T
)rand () << (SRC_T
)(sizeof (DST_T
) * 4);
160 for (i
= 0; i
< NUM
; i
++)
161 if (CRC32 (dst
[i
], src
[i
]) != compute_crc32 (dst
[i
], src
[i
]))