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