52
52
#define REGTMP3 R18
53
53
#define REGTMP4 R7
54
54
#define REGTMP5 R6
55
+ #define REG_KT R19
55
56
56
57
// W[i] = M[i]; for 0 <= i <= 15
57
58
#define LOAD0(index) \
89
90
// Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
90
91
// = ((y XOR z) AND x) XOR z
91
92
// Calculate T1 in REGTMP4
92
- #define SHA256T1(const, e, f, g, h) \
93
- ADDV $const, h; \
93
+ #define SHA256T1(index, e, f, g, h) \
94
+ MOVW (index*4 )(REG_KT), REGTMP5; \
95
+ ADDV REGTMP5, h; \
94
96
ADD REGTMP4, h; \
95
97
ROTR $6 , e, REGTMP5; \
96
98
ROTR $11 , e, REGTMP; \
122
124
123
125
// Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
124
126
// The values for e and a are stored in d and h, ready for rotation.
125
- #define SHA256ROUND(const , a, b, c, d, e, f, g, h) \
126
- SHA256T1(const , e, f, g, h); \
127
+ #define SHA256ROUND(index , a, b, c, d, e, f, g, h) \
128
+ SHA256T1(index , e, f, g, h); \
127
129
SHA256T2(a, b, c); \
128
130
ADD REGTMP4, d; \
129
131
ADD REGTMP1, REGTMP4, h
130
132
131
- #define SHA256ROUND0(index, const, a, b, c, d, e, f, g, h) \
133
+ #define SHA256ROUND0(index, a, b, c, d, e, f, g, h) \
132
134
LOAD0(index); \
133
- SHA256ROUND(const , a, b, c, d, e, f, g, h)
135
+ SHA256ROUND(index , a, b, c, d, e, f, g, h)
134
136
135
- #define SHA256ROUND1(index, const, a, b, c, d, e, f, g, h) \
137
+ #define SHA256ROUND1(index, a, b, c, d, e, f, g, h) \
136
138
LOAD1(index); \
137
- SHA256ROUND(const , a, b, c, d, e, f, g, h)
139
+ SHA256ROUND(index , a, b, c, d, e, f, g, h)
138
140
139
141
// A stack frame size of 64 bytes is required here, because
140
142
// the frame size used for data expansion is 64 bytes.
@@ -147,6 +149,8 @@ TEXT ·block(SB),NOSPLIT,$64-32
147
149
AND $~63 , R6
148
150
BEQ R6, end
149
151
152
+ MOVV $·_K(SB), REG_KT // const table
153
+
150
154
// p_len >= 64
151
155
MOVV dig+0 (FP), R4
152
156
ADDV R5, R6, R25
@@ -160,71 +164,71 @@ TEXT ·block(SB),NOSPLIT,$64-32
160
164
MOVW (7*4 )(R4), R15 // h = H7
161
165
162
166
loop:
163
- SHA256ROUND0(0 , 0x428a2f98 , R8, R9, R10, R11, R12, R13, R14, R15)
164
- SHA256ROUND0(1 , 0x71374491 , R15, R8, R9, R10, R11, R12, R13, R14)
165
- SHA256ROUND0(2 , 0xb5c0fbcf , R14, R15, R8, R9, R10, R11, R12, R13)
166
- SHA256ROUND0(3 , 0xe9b5dba5 , R13, R14, R15, R8, R9, R10, R11, R12)
167
- SHA256ROUND0(4 , 0x3956c25b , R12, R13, R14, R15, R8, R9, R10, R11)
168
- SHA256ROUND0(5 , 0x59f111f1 , R11, R12, R13, R14, R15, R8, R9, R10)
169
- SHA256ROUND0(6 , 0x923f82a4 , R10, R11, R12, R13, R14, R15, R8, R9)
170
- SHA256ROUND0(7 , 0xab1c5ed5 , R9, R10, R11, R12, R13, R14, R15, R8)
171
- SHA256ROUND0(8 , 0xd807aa98 , R8, R9, R10, R11, R12, R13, R14, R15)
172
- SHA256ROUND0(9 , 0x12835b01 , R15, R8, R9, R10, R11, R12, R13, R14)
173
- SHA256ROUND0(10 , 0x243185be , R14, R15, R8, R9, R10, R11, R12, R13)
174
- SHA256ROUND0(11 , 0x550c7dc3 , R13, R14, R15, R8, R9, R10, R11, R12)
175
- SHA256ROUND0(12 , 0x72be5d74 , R12, R13, R14, R15, R8, R9, R10, R11)
176
- SHA256ROUND0(13 , 0x80deb1fe , R11, R12, R13, R14, R15, R8, R9, R10)
177
- SHA256ROUND0(14 , 0x9bdc06a7 , R10, R11, R12, R13, R14, R15, R8, R9)
178
- SHA256ROUND0(15 , 0xc19bf174 , R9, R10, R11, R12, R13, R14, R15, R8)
167
+ SHA256ROUND0(0 , R8, R9, R10, R11, R12, R13, R14, R15)
168
+ SHA256ROUND0(1 , R15, R8, R9, R10, R11, R12, R13, R14)
169
+ SHA256ROUND0(2 , R14, R15, R8, R9, R10, R11, R12, R13)
170
+ SHA256ROUND0(3 , R13, R14, R15, R8, R9, R10, R11, R12)
171
+ SHA256ROUND0(4 , R12, R13, R14, R15, R8, R9, R10, R11)
172
+ SHA256ROUND0(5 , R11, R12, R13, R14, R15, R8, R9, R10)
173
+ SHA256ROUND0(6 , R10, R11, R12, R13, R14, R15, R8, R9)
174
+ SHA256ROUND0(7 , R9, R10, R11, R12, R13, R14, R15, R8)
175
+ SHA256ROUND0(8 , R8, R9, R10, R11, R12, R13, R14, R15)
176
+ SHA256ROUND0(9 , R15, R8, R9, R10, R11, R12, R13, R14)
177
+ SHA256ROUND0(10 , R14, R15, R8, R9, R10, R11, R12, R13)
178
+ SHA256ROUND0(11 , R13, R14, R15, R8, R9, R10, R11, R12)
179
+ SHA256ROUND0(12 , R12, R13, R14, R15, R8, R9, R10, R11)
180
+ SHA256ROUND0(13 , R11, R12, R13, R14, R15, R8, R9, R10)
181
+ SHA256ROUND0(14 , R10, R11, R12, R13, R14, R15, R8, R9)
182
+ SHA256ROUND0(15 , R9, R10, R11, R12, R13, R14, R15, R8)
179
183
180
- SHA256ROUND1(16 , 0xe49b69c1 , R8, R9, R10, R11, R12, R13, R14, R15)
181
- SHA256ROUND1(17 , 0xefbe4786 , R15, R8, R9, R10, R11, R12, R13, R14)
182
- SHA256ROUND1(18 , 0x0fc19dc6 , R14, R15, R8, R9, R10, R11, R12, R13)
183
- SHA256ROUND1(19 , 0x240ca1cc , R13, R14, R15, R8, R9, R10, R11, R12)
184
- SHA256ROUND1(20 , 0x2de92c6f , R12, R13, R14, R15, R8, R9, R10, R11)
185
- SHA256ROUND1(21 , 0x4a7484aa , R11, R12, R13, R14, R15, R8, R9, R10)
186
- SHA256ROUND1(22 , 0x5cb0a9dc , R10, R11, R12, R13, R14, R15, R8, R9)
187
- SHA256ROUND1(23 , 0x76f988da , R9, R10, R11, R12, R13, R14, R15, R8)
188
- SHA256ROUND1(24 , 0x983e5152 , R8, R9, R10, R11, R12, R13, R14, R15)
189
- SHA256ROUND1(25 , 0xa831c66d , R15, R8, R9, R10, R11, R12, R13, R14)
190
- SHA256ROUND1(26 , 0xb00327c8 , R14, R15, R8, R9, R10, R11, R12, R13)
191
- SHA256ROUND1(27 , 0xbf597fc7 , R13, R14, R15, R8, R9, R10, R11, R12)
192
- SHA256ROUND1(28 , 0xc6e00bf3 , R12, R13, R14, R15, R8, R9, R10, R11)
193
- SHA256ROUND1(29 , 0xd5a79147 , R11, R12, R13, R14, R15, R8, R9, R10)
194
- SHA256ROUND1(30 , 0x06ca6351 , R10, R11, R12, R13, R14, R15, R8, R9)
195
- SHA256ROUND1(31 , 0x14292967 , R9, R10, R11, R12, R13, R14, R15, R8)
196
- SHA256ROUND1(32 , 0x27b70a85 , R8, R9, R10, R11, R12, R13, R14, R15)
197
- SHA256ROUND1(33 , 0x2e1b2138 , R15, R8, R9, R10, R11, R12, R13, R14)
198
- SHA256ROUND1(34 , 0x4d2c6dfc , R14, R15, R8, R9, R10, R11, R12, R13)
199
- SHA256ROUND1(35 , 0x53380d13 , R13, R14, R15, R8, R9, R10, R11, R12)
200
- SHA256ROUND1(36 , 0x650a7354 , R12, R13, R14, R15, R8, R9, R10, R11)
201
- SHA256ROUND1(37 , 0x766a0abb , R11, R12, R13, R14, R15, R8, R9, R10)
202
- SHA256ROUND1(38 , 0x81c2c92e , R10, R11, R12, R13, R14, R15, R8, R9)
203
- SHA256ROUND1(39 , 0x92722c85 , R9, R10, R11, R12, R13, R14, R15, R8)
204
- SHA256ROUND1(40 , 0xa2bfe8a1 , R8, R9, R10, R11, R12, R13, R14, R15)
205
- SHA256ROUND1(41 , 0xa81a664b , R15, R8, R9, R10, R11, R12, R13, R14)
206
- SHA256ROUND1(42 , 0xc24b8b70 , R14, R15, R8, R9, R10, R11, R12, R13)
207
- SHA256ROUND1(43 , 0xc76c51a3 , R13, R14, R15, R8, R9, R10, R11, R12)
208
- SHA256ROUND1(44 , 0xd192e819 , R12, R13, R14, R15, R8, R9, R10, R11)
209
- SHA256ROUND1(45 , 0xd6990624 , R11, R12, R13, R14, R15, R8, R9, R10)
210
- SHA256ROUND1(46 , 0xf40e3585 , R10, R11, R12, R13, R14, R15, R8, R9)
211
- SHA256ROUND1(47 , 0x106aa070 , R9, R10, R11, R12, R13, R14, R15, R8)
212
- SHA256ROUND1(48 , 0x19a4c116 , R8, R9, R10, R11, R12, R13, R14, R15)
213
- SHA256ROUND1(49 , 0x1e376c08 , R15, R8, R9, R10, R11, R12, R13, R14)
214
- SHA256ROUND1(50 , 0x2748774c , R14, R15, R8, R9, R10, R11, R12, R13)
215
- SHA256ROUND1(51 , 0x34b0bcb5 , R13, R14, R15, R8, R9, R10, R11, R12)
216
- SHA256ROUND1(52 , 0x391c0cb3 , R12, R13, R14, R15, R8, R9, R10, R11)
217
- SHA256ROUND1(53 , 0x4ed8aa4a , R11, R12, R13, R14, R15, R8, R9, R10)
218
- SHA256ROUND1(54 , 0x5b9cca4f , R10, R11, R12, R13, R14, R15, R8, R9)
219
- SHA256ROUND1(55 , 0x682e6ff3 , R9, R10, R11, R12, R13, R14, R15, R8)
220
- SHA256ROUND1(56 , 0x748f82ee , R8, R9, R10, R11, R12, R13, R14, R15)
221
- SHA256ROUND1(57 , 0x78a5636f , R15, R8, R9, R10, R11, R12, R13, R14)
222
- SHA256ROUND1(58 , 0x84c87814 , R14, R15, R8, R9, R10, R11, R12, R13)
223
- SHA256ROUND1(59 , 0x8cc70208 , R13, R14, R15, R8, R9, R10, R11, R12)
224
- SHA256ROUND1(60 , 0x90befffa , R12, R13, R14, R15, R8, R9, R10, R11)
225
- SHA256ROUND1(61 , 0xa4506ceb , R11, R12, R13, R14, R15, R8, R9, R10)
226
- SHA256ROUND1(62 , 0xbef9a3f7 , R10, R11, R12, R13, R14, R15, R8, R9)
227
- SHA256ROUND1(63 , 0xc67178f2 , R9, R10, R11, R12, R13, R14, R15, R8)
184
+ SHA256ROUND1(16 , R8, R9, R10, R11, R12, R13, R14, R15)
185
+ SHA256ROUND1(17 , R15, R8, R9, R10, R11, R12, R13, R14)
186
+ SHA256ROUND1(18 , R14, R15, R8, R9, R10, R11, R12, R13)
187
+ SHA256ROUND1(19 , R13, R14, R15, R8, R9, R10, R11, R12)
188
+ SHA256ROUND1(20 , R12, R13, R14, R15, R8, R9, R10, R11)
189
+ SHA256ROUND1(21 , R11, R12, R13, R14, R15, R8, R9, R10)
190
+ SHA256ROUND1(22 , R10, R11, R12, R13, R14, R15, R8, R9)
191
+ SHA256ROUND1(23 , R9, R10, R11, R12, R13, R14, R15, R8)
192
+ SHA256ROUND1(24 , R8, R9, R10, R11, R12, R13, R14, R15)
193
+ SHA256ROUND1(25 , R15, R8, R9, R10, R11, R12, R13, R14)
194
+ SHA256ROUND1(26 , R14, R15, R8, R9, R10, R11, R12, R13)
195
+ SHA256ROUND1(27 , R13, R14, R15, R8, R9, R10, R11, R12)
196
+ SHA256ROUND1(28 , R12, R13, R14, R15, R8, R9, R10, R11)
197
+ SHA256ROUND1(29 , R11, R12, R13, R14, R15, R8, R9, R10)
198
+ SHA256ROUND1(30 , R10, R11, R12, R13, R14, R15, R8, R9)
199
+ SHA256ROUND1(31 , R9, R10, R11, R12, R13, R14, R15, R8)
200
+ SHA256ROUND1(32 , R8, R9, R10, R11, R12, R13, R14, R15)
201
+ SHA256ROUND1(33 , R15, R8, R9, R10, R11, R12, R13, R14)
202
+ SHA256ROUND1(34 , R14, R15, R8, R9, R10, R11, R12, R13)
203
+ SHA256ROUND1(35 , R13, R14, R15, R8, R9, R10, R11, R12)
204
+ SHA256ROUND1(36 , R12, R13, R14, R15, R8, R9, R10, R11)
205
+ SHA256ROUND1(37 , R11, R12, R13, R14, R15, R8, R9, R10)
206
+ SHA256ROUND1(38 , R10, R11, R12, R13, R14, R15, R8, R9)
207
+ SHA256ROUND1(39 , R9, R10, R11, R12, R13, R14, R15, R8)
208
+ SHA256ROUND1(40 , R8, R9, R10, R11, R12, R13, R14, R15)
209
+ SHA256ROUND1(41 , R15, R8, R9, R10, R11, R12, R13, R14)
210
+ SHA256ROUND1(42 , R14, R15, R8, R9, R10, R11, R12, R13)
211
+ SHA256ROUND1(43 , R13, R14, R15, R8, R9, R10, R11, R12)
212
+ SHA256ROUND1(44 , R12, R13, R14, R15, R8, R9, R10, R11)
213
+ SHA256ROUND1(45 , R11, R12, R13, R14, R15, R8, R9, R10)
214
+ SHA256ROUND1(46 , R10, R11, R12, R13, R14, R15, R8, R9)
215
+ SHA256ROUND1(47 , R9, R10, R11, R12, R13, R14, R15, R8)
216
+ SHA256ROUND1(48 , R8, R9, R10, R11, R12, R13, R14, R15)
217
+ SHA256ROUND1(49 , R15, R8, R9, R10, R11, R12, R13, R14)
218
+ SHA256ROUND1(50 , R14, R15, R8, R9, R10, R11, R12, R13)
219
+ SHA256ROUND1(51 , R13, R14, R15, R8, R9, R10, R11, R12)
220
+ SHA256ROUND1(52 , R12, R13, R14, R15, R8, R9, R10, R11)
221
+ SHA256ROUND1(53 , R11, R12, R13, R14, R15, R8, R9, R10)
222
+ SHA256ROUND1(54 , R10, R11, R12, R13, R14, R15, R8, R9)
223
+ SHA256ROUND1(55 , R9, R10, R11, R12, R13, R14, R15, R8)
224
+ SHA256ROUND1(56 , R8, R9, R10, R11, R12, R13, R14, R15)
225
+ SHA256ROUND1(57 , R15, R8, R9, R10, R11, R12, R13, R14)
226
+ SHA256ROUND1(58 , R14, R15, R8, R9, R10, R11, R12, R13)
227
+ SHA256ROUND1(59 , R13, R14, R15, R8, R9, R10, R11, R12)
228
+ SHA256ROUND1(60 , R12, R13, R14, R15, R8, R9, R10, R11)
229
+ SHA256ROUND1(61 , R11, R12, R13, R14, R15, R8, R9, R10)
230
+ SHA256ROUND1(62 , R10, R11, R12, R13, R14, R15, R8, R9)
231
+ SHA256ROUND1(63 , R9, R10, R11, R12, R13, R14, R15, R8)
228
232
229
233
MOVW (0 *4 )(R4), REGTMP
230
234
MOVW (1*4 )(R4), REGTMP1
0 commit comments