1 /* 2 BLAKE2 reference source code package - optimized C implementations 3 4 Written in 2012 by Samuel Neves <sneves@dei.uc.pt> 5 6 To the extent possible under law, the author(s) have dedicated all copyright 7 and related and neighboring rights to this software to the public domain 8 worldwide. This software is distributed without any warranty. 9 10 You should have received a copy of the CC0 Public Domain Dedication along 11 with 12 this software. If not, see 13 <http://creativecommons.org/publicdomain/zero/1.0/>. 14 */ 15 16 #ifndef blake2b_load_sse2_H 17 #define blake2b_load_sse2_H 18 19 #define LOAD_MSG_0_1(b0, b1) \ 20 b0 = _mm_set_epi64x(m2, m0); \ 21 b1 = _mm_set_epi64x(m6, m4) 22 #define LOAD_MSG_0_2(b0, b1) \ 23 b0 = _mm_set_epi64x(m3, m1); \ 24 b1 = _mm_set_epi64x(m7, m5) 25 #define LOAD_MSG_0_3(b0, b1) \ 26 b0 = _mm_set_epi64x(m10, m8); \ 27 b1 = _mm_set_epi64x(m14, m12) 28 #define LOAD_MSG_0_4(b0, b1) \ 29 b0 = _mm_set_epi64x(m11, m9); \ 30 b1 = _mm_set_epi64x(m15, m13) 31 #define LOAD_MSG_1_1(b0, b1) \ 32 b0 = _mm_set_epi64x(m4, m14); \ 33 b1 = _mm_set_epi64x(m13, m9) 34 #define LOAD_MSG_1_2(b0, b1) \ 35 b0 = _mm_set_epi64x(m8, m10); \ 36 b1 = _mm_set_epi64x(m6, m15) 37 #define LOAD_MSG_1_3(b0, b1) \ 38 b0 = _mm_set_epi64x(m0, m1); \ 39 b1 = _mm_set_epi64x(m5, m11) 40 #define LOAD_MSG_1_4(b0, b1) \ 41 b0 = _mm_set_epi64x(m2, m12); \ 42 b1 = _mm_set_epi64x(m3, m7) 43 #define LOAD_MSG_2_1(b0, b1) \ 44 b0 = _mm_set_epi64x(m12, m11); \ 45 b1 = _mm_set_epi64x(m15, m5) 46 #define LOAD_MSG_2_2(b0, b1) \ 47 b0 = _mm_set_epi64x(m0, m8); \ 48 b1 = _mm_set_epi64x(m13, m2) 49 #define LOAD_MSG_2_3(b0, b1) \ 50 b0 = _mm_set_epi64x(m3, m10); \ 51 b1 = _mm_set_epi64x(m9, m7) 52 #define LOAD_MSG_2_4(b0, b1) \ 53 b0 = _mm_set_epi64x(m6, m14); \ 54 b1 = _mm_set_epi64x(m4, m1) 55 #define LOAD_MSG_3_1(b0, b1) \ 56 b0 = _mm_set_epi64x(m3, m7); \ 57 b1 = _mm_set_epi64x(m11, m13) 58 #define LOAD_MSG_3_2(b0, b1) \ 59 b0 = _mm_set_epi64x(m1, m9); \ 60 b1 = _mm_set_epi64x(m14, m12) 61 #define LOAD_MSG_3_3(b0, b1) \ 62 b0 = _mm_set_epi64x(m5, m2); \ 63 b1 = _mm_set_epi64x(m15, m4) 64 #define LOAD_MSG_3_4(b0, b1) \ 65 b0 = _mm_set_epi64x(m10, m6); \ 66 b1 = _mm_set_epi64x(m8, m0) 67 #define LOAD_MSG_4_1(b0, b1) \ 68 b0 = _mm_set_epi64x(m5, m9); \ 69 b1 = _mm_set_epi64x(m10, m2) 70 #define LOAD_MSG_4_2(b0, b1) \ 71 b0 = _mm_set_epi64x(m7, m0); \ 72 b1 = _mm_set_epi64x(m15, m4) 73 #define LOAD_MSG_4_3(b0, b1) \ 74 b0 = _mm_set_epi64x(m11, m14); \ 75 b1 = _mm_set_epi64x(m3, m6) 76 #define LOAD_MSG_4_4(b0, b1) \ 77 b0 = _mm_set_epi64x(m12, m1); \ 78 b1 = _mm_set_epi64x(m13, m8) 79 #define LOAD_MSG_5_1(b0, b1) \ 80 b0 = _mm_set_epi64x(m6, m2); \ 81 b1 = _mm_set_epi64x(m8, m0) 82 #define LOAD_MSG_5_2(b0, b1) \ 83 b0 = _mm_set_epi64x(m10, m12); \ 84 b1 = _mm_set_epi64x(m3, m11) 85 #define LOAD_MSG_5_3(b0, b1) \ 86 b0 = _mm_set_epi64x(m7, m4); \ 87 b1 = _mm_set_epi64x(m1, m15) 88 #define LOAD_MSG_5_4(b0, b1) \ 89 b0 = _mm_set_epi64x(m5, m13); \ 90 b1 = _mm_set_epi64x(m9, m14) 91 #define LOAD_MSG_6_1(b0, b1) \ 92 b0 = _mm_set_epi64x(m1, m12); \ 93 b1 = _mm_set_epi64x(m4, m14) 94 #define LOAD_MSG_6_2(b0, b1) \ 95 b0 = _mm_set_epi64x(m15, m5); \ 96 b1 = _mm_set_epi64x(m10, m13) 97 #define LOAD_MSG_6_3(b0, b1) \ 98 b0 = _mm_set_epi64x(m6, m0); \ 99 b1 = _mm_set_epi64x(m8, m9) 100 #define LOAD_MSG_6_4(b0, b1) \ 101 b0 = _mm_set_epi64x(m3, m7); \ 102 b1 = _mm_set_epi64x(m11, m2) 103 #define LOAD_MSG_7_1(b0, b1) \ 104 b0 = _mm_set_epi64x(m7, m13); \ 105 b1 = _mm_set_epi64x(m3, m12) 106 #define LOAD_MSG_7_2(b0, b1) \ 107 b0 = _mm_set_epi64x(m14, m11); \ 108 b1 = _mm_set_epi64x(m9, m1) 109 #define LOAD_MSG_7_3(b0, b1) \ 110 b0 = _mm_set_epi64x(m15, m5); \ 111 b1 = _mm_set_epi64x(m2, m8) 112 #define LOAD_MSG_7_4(b0, b1) \ 113 b0 = _mm_set_epi64x(m4, m0); \ 114 b1 = _mm_set_epi64x(m10, m6) 115 #define LOAD_MSG_8_1(b0, b1) \ 116 b0 = _mm_set_epi64x(m14, m6); \ 117 b1 = _mm_set_epi64x(m0, m11) 118 #define LOAD_MSG_8_2(b0, b1) \ 119 b0 = _mm_set_epi64x(m9, m15); \ 120 b1 = _mm_set_epi64x(m8, m3) 121 #define LOAD_MSG_8_3(b0, b1) \ 122 b0 = _mm_set_epi64x(m13, m12); \ 123 b1 = _mm_set_epi64x(m10, m1) 124 #define LOAD_MSG_8_4(b0, b1) \ 125 b0 = _mm_set_epi64x(m7, m2); \ 126 b1 = _mm_set_epi64x(m5, m4) 127 #define LOAD_MSG_9_1(b0, b1) \ 128 b0 = _mm_set_epi64x(m8, m10); \ 129 b1 = _mm_set_epi64x(m1, m7) 130 #define LOAD_MSG_9_2(b0, b1) \ 131 b0 = _mm_set_epi64x(m4, m2); \ 132 b1 = _mm_set_epi64x(m5, m6) 133 #define LOAD_MSG_9_3(b0, b1) \ 134 b0 = _mm_set_epi64x(m9, m15); \ 135 b1 = _mm_set_epi64x(m13, m3) 136 #define LOAD_MSG_9_4(b0, b1) \ 137 b0 = _mm_set_epi64x(m14, m11); \ 138 b1 = _mm_set_epi64x(m0, m12) 139 #define LOAD_MSG_10_1(b0, b1) \ 140 b0 = _mm_set_epi64x(m2, m0); \ 141 b1 = _mm_set_epi64x(m6, m4) 142 #define LOAD_MSG_10_2(b0, b1) \ 143 b0 = _mm_set_epi64x(m3, m1); \ 144 b1 = _mm_set_epi64x(m7, m5) 145 #define LOAD_MSG_10_3(b0, b1) \ 146 b0 = _mm_set_epi64x(m10, m8); \ 147 b1 = _mm_set_epi64x(m14, m12) 148 #define LOAD_MSG_10_4(b0, b1) \ 149 b0 = _mm_set_epi64x(m11, m9); \ 150 b1 = _mm_set_epi64x(m15, m13) 151 #define LOAD_MSG_11_1(b0, b1) \ 152 b0 = _mm_set_epi64x(m4, m14); \ 153 b1 = _mm_set_epi64x(m13, m9) 154 #define LOAD_MSG_11_2(b0, b1) \ 155 b0 = _mm_set_epi64x(m8, m10); \ 156 b1 = _mm_set_epi64x(m6, m15) 157 #define LOAD_MSG_11_3(b0, b1) \ 158 b0 = _mm_set_epi64x(m0, m1); \ 159 b1 = _mm_set_epi64x(m5, m11) 160 #define LOAD_MSG_11_4(b0, b1) \ 161 b0 = _mm_set_epi64x(m2, m12); \ 162 b1 = _mm_set_epi64x(m3, m7) 163 164 #endif 165