1
// Copyright 2017 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
9
func processBlockGeneric(out, in1, in2 *block, xor bool) {
12
t[i] = in1[i] ^ in2[i]
14
for i := 0; i < blockLength; i += 16 {
16
&t[i+0], &t[i+1], &t[i+2], &t[i+3],
17
&t[i+4], &t[i+5], &t[i+6], &t[i+7],
18
&t[i+8], &t[i+9], &t[i+10], &t[i+11],
19
&t[i+12], &t[i+13], &t[i+14], &t[i+15],
22
for i := 0; i < blockLength/8; i += 2 {
24
&t[i], &t[i+1], &t[16+i], &t[16+i+1],
25
&t[32+i], &t[32+i+1], &t[48+i], &t[48+i+1],
26
&t[64+i], &t[64+i+1], &t[80+i], &t[80+i+1],
27
&t[96+i], &t[96+i+1], &t[112+i], &t[112+i+1],
32
out[i] ^= in1[i] ^ in2[i] ^ t[i]
36
out[i] = in1[i] ^ in2[i] ^ t[i]
41
func blamkaGeneric(t00, t01, t02, t03, t04, t05, t06, t07, t08, t09, t10, t11, t12, t13, t14, t15 *uint64) {
42
v00, v01, v02, v03 := *t00, *t01, *t02, *t03
43
v04, v05, v06, v07 := *t04, *t05, *t06, *t07
44
v08, v09, v10, v11 := *t08, *t09, *t10, *t11
45
v12, v13, v14, v15 := *t12, *t13, *t14, *t15
47
v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04))
49
v12 = v12>>32 | v12<<32
50
v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12))
52
v04 = v04>>24 | v04<<40
54
v00 += v04 + 2*uint64(uint32(v00))*uint64(uint32(v04))
56
v12 = v12>>16 | v12<<48
57
v08 += v12 + 2*uint64(uint32(v08))*uint64(uint32(v12))
59
v04 = v04>>63 | v04<<1
61
v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05))
63
v13 = v13>>32 | v13<<32
64
v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13))
66
v05 = v05>>24 | v05<<40
68
v01 += v05 + 2*uint64(uint32(v01))*uint64(uint32(v05))
70
v13 = v13>>16 | v13<<48
71
v09 += v13 + 2*uint64(uint32(v09))*uint64(uint32(v13))
73
v05 = v05>>63 | v05<<1
75
v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06))
77
v14 = v14>>32 | v14<<32
78
v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14))
80
v06 = v06>>24 | v06<<40
82
v02 += v06 + 2*uint64(uint32(v02))*uint64(uint32(v06))
84
v14 = v14>>16 | v14<<48
85
v10 += v14 + 2*uint64(uint32(v10))*uint64(uint32(v14))
87
v06 = v06>>63 | v06<<1
89
v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07))
91
v15 = v15>>32 | v15<<32
92
v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15))
94
v07 = v07>>24 | v07<<40
96
v03 += v07 + 2*uint64(uint32(v03))*uint64(uint32(v07))
98
v15 = v15>>16 | v15<<48
99
v11 += v15 + 2*uint64(uint32(v11))*uint64(uint32(v15))
101
v07 = v07>>63 | v07<<1
103
v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05))
105
v15 = v15>>32 | v15<<32
106
v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15))
108
v05 = v05>>24 | v05<<40
110
v00 += v05 + 2*uint64(uint32(v00))*uint64(uint32(v05))
112
v15 = v15>>16 | v15<<48
113
v10 += v15 + 2*uint64(uint32(v10))*uint64(uint32(v15))
115
v05 = v05>>63 | v05<<1
117
v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06))
119
v12 = v12>>32 | v12<<32
120
v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12))
122
v06 = v06>>24 | v06<<40
124
v01 += v06 + 2*uint64(uint32(v01))*uint64(uint32(v06))
126
v12 = v12>>16 | v12<<48
127
v11 += v12 + 2*uint64(uint32(v11))*uint64(uint32(v12))
129
v06 = v06>>63 | v06<<1
131
v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07))
133
v13 = v13>>32 | v13<<32
134
v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13))
136
v07 = v07>>24 | v07<<40
138
v02 += v07 + 2*uint64(uint32(v02))*uint64(uint32(v07))
140
v13 = v13>>16 | v13<<48
141
v08 += v13 + 2*uint64(uint32(v08))*uint64(uint32(v13))
143
v07 = v07>>63 | v07<<1
145
v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04))
147
v14 = v14>>32 | v14<<32
148
v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14))
150
v04 = v04>>24 | v04<<40
152
v03 += v04 + 2*uint64(uint32(v03))*uint64(uint32(v04))
154
v14 = v14>>16 | v14<<48
155
v09 += v14 + 2*uint64(uint32(v09))*uint64(uint32(v14))
157
v04 = v04>>63 | v04<<1
159
*t00, *t01, *t02, *t03 = v00, v01, v02, v03
160
*t04, *t05, *t06, *t07 = v04, v05, v06, v07
161
*t08, *t09, *t10, *t11 = v08, v09, v10, v11
162
*t12, *t13, *t14, *t15 = v12, v13, v14, v15