1 // Copyright (c) 2015 The Novacoin developers
2 // Distributed under the MIT/X11 software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
8 void copy_swap_hashes(uint32_t *blocks, uint32_t *state)
10 blocks[0] = __builtin_bswap32(state[0]);
11 blocks[1] = __builtin_bswap32(state[1]);
12 blocks[2] = __builtin_bswap32(state[2]);
13 blocks[3] = __builtin_bswap32(state[3]);
14 blocks[4] = __builtin_bswap32(state[4]);
15 blocks[5] = __builtin_bswap32(state[5]);
16 blocks[6] = __builtin_bswap32(state[6]);
17 blocks[7] = __builtin_bswap32(state[7]);
18 blocks[8] = __builtin_bswap32(state[8]);
19 blocks[9] = __builtin_bswap32(state[9]);
20 blocks[10] = __builtin_bswap32(state[10]);
21 blocks[11] = __builtin_bswap32(state[11]);
22 blocks[12] = __builtin_bswap32(state[12]);
23 blocks[13] = __builtin_bswap32(state[13]);
24 blocks[14] = __builtin_bswap32(state[14]);
25 blocks[15] = __builtin_bswap32(state[15]);
26 blocks[16] = __builtin_bswap32(state[16]);
27 blocks[17] = __builtin_bswap32(state[17]);
28 blocks[18] = __builtin_bswap32(state[18]);
29 blocks[19] = __builtin_bswap32(state[19]);
30 blocks[20] = __builtin_bswap32(state[20]);
31 blocks[21] = __builtin_bswap32(state[21]);
32 blocks[22] = __builtin_bswap32(state[22]);
33 blocks[23] = __builtin_bswap32(state[23]);
34 blocks[24] = __builtin_bswap32(state[24]);
35 blocks[25] = __builtin_bswap32(state[25]);
36 blocks[26] = __builtin_bswap32(state[26]);
37 blocks[27] = __builtin_bswap32(state[27]);
38 blocks[28] = __builtin_bswap32(state[28]);
39 blocks[29] = __builtin_bswap32(state[29]);
40 blocks[30] = __builtin_bswap32(state[30]);
41 blocks[31] = __builtin_bswap32(state[31]);
45 void copy_swap_hashes_ssse3(uint32_t *blocks, uint32_t *state)
47 __m128i mask = _mm_set_epi8(12, 13, 14, 15, 8, 9, 10, 11, 4, 5, 6, 7, 0, 1, 2, 3);
48 _mm_storeu_si128((__m128i *)&blocks[0], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[0]), mask));
49 _mm_storeu_si128((__m128i *)&blocks[4], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[4]), mask));
50 _mm_storeu_si128((__m128i *)&blocks[8], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[8]), mask));
51 _mm_storeu_si128((__m128i *)&blocks[12], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[12]), mask));
52 _mm_storeu_si128((__m128i *)&blocks[16], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[16]), mask));
53 _mm_storeu_si128((__m128i *)&blocks[20], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[20]), mask));
54 _mm_storeu_si128((__m128i *)&blocks[24], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[24]), mask));
55 _mm_storeu_si128((__m128i *)&blocks[28], _mm_shuffle_epi8(_mm_loadu_si128((__m128i *)&state[28]), mask));