| 285 | } |
| 286 | |
| 287 | static inline int blake2b_compress( blake2b_state *S, const uint8_t block[BLAKE2B_BLOCKBYTES] ) |
| 288 | { |
| 289 | __m128i row1l, row1h; |
| 290 | __m128i row2l, row2h; |
| 291 | __m128i row3l, row3h; |
| 292 | __m128i row4l, row4h; |
| 293 | __m128i b0, b1; |
| 294 | __m128i t0, t1; |
| 295 | #if defined(HAVE_SSSE3) && !defined(HAVE_XOP) |
| 296 | const __m128i r16 = _mm_setr_epi8( 2, 3, 4, 5, 6, 7, 0, 1, 10, 11, 12, 13, 14, 15, 8, 9 ); |
| 297 | const __m128i r24 = _mm_setr_epi8( 3, 4, 5, 6, 7, 0, 1, 2, 11, 12, 13, 14, 15, 8, 9, 10 ); |
| 298 | #endif |
| 299 | #if defined(HAVE_SSE4_1) |
| 300 | const __m128i m0 = LOADU( block + 00 ); |
| 301 | const __m128i m1 = LOADU( block + 16 ); |
| 302 | const __m128i m2 = LOADU( block + 32 ); |
| 303 | const __m128i m3 = LOADU( block + 48 ); |
| 304 | const __m128i m4 = LOADU( block + 64 ); |
| 305 | const __m128i m5 = LOADU( block + 80 ); |
| 306 | const __m128i m6 = LOADU( block + 96 ); |
| 307 | const __m128i m7 = LOADU( block + 112 ); |
| 308 | #else |
| 309 | const uint64_t m0 = ( ( uint64_t * )block )[ 0]; |
| 310 | const uint64_t m1 = ( ( uint64_t * )block )[ 1]; |
| 311 | const uint64_t m2 = ( ( uint64_t * )block )[ 2]; |
| 312 | const uint64_t m3 = ( ( uint64_t * )block )[ 3]; |
| 313 | const uint64_t m4 = ( ( uint64_t * )block )[ 4]; |
| 314 | const uint64_t m5 = ( ( uint64_t * )block )[ 5]; |
| 315 | const uint64_t m6 = ( ( uint64_t * )block )[ 6]; |
| 316 | const uint64_t m7 = ( ( uint64_t * )block )[ 7]; |
| 317 | const uint64_t m8 = ( ( uint64_t * )block )[ 8]; |
| 318 | const uint64_t m9 = ( ( uint64_t * )block )[ 9]; |
| 319 | const uint64_t m10 = ( ( uint64_t * )block )[10]; |
| 320 | const uint64_t m11 = ( ( uint64_t * )block )[11]; |
| 321 | const uint64_t m12 = ( ( uint64_t * )block )[12]; |
| 322 | const uint64_t m13 = ( ( uint64_t * )block )[13]; |
| 323 | const uint64_t m14 = ( ( uint64_t * )block )[14]; |
| 324 | const uint64_t m15 = ( ( uint64_t * )block )[15]; |
| 325 | #endif |
| 326 | row1l = LOADU( &S->h[0] ); |
| 327 | row1h = LOADU( &S->h[2] ); |
| 328 | row2l = LOADU( &S->h[4] ); |
| 329 | row2h = LOADU( &S->h[6] ); |
| 330 | row3l = LOADU( &blake2b_IV[0] ); |
| 331 | row3h = LOADU( &blake2b_IV[2] ); |
| 332 | row4l = _mm_xor_si128( LOADU( &blake2b_IV[4] ), LOADU( &S->t[0] ) ); |
| 333 | row4h = _mm_xor_si128( LOADU( &blake2b_IV[6] ), LOADU( &S->f[0] ) ); |
| 334 | ROUND( 0 ); |
| 335 | ROUND( 1 ); |
| 336 | ROUND( 2 ); |
| 337 | ROUND( 3 ); |
| 338 | ROUND( 4 ); |
| 339 | ROUND( 5 ); |
| 340 | ROUND( 6 ); |
| 341 | ROUND( 7 ); |
| 342 | ROUND( 8 ); |
| 343 | ROUND( 9 ); |
| 344 | ROUND( 10 ); |
no outgoing calls
no test coverage detected