~webapps/unity-js-scopes/node.js

« back to all changes in this revision

Viewing changes to deps/openssl/openssl/crypto/sha/asm/sha1-alpha.pl

  • Committer: Marcus Tomlinson
  • Date: 2015-11-13 07:59:04 UTC
  • Revision ID: marcus.tomlinson@canonical.com-20151113075904-h0swczmoq1rvstfc
Node v4 (stable)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env perl
 
2
 
 
3
# ====================================================================
 
4
# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
 
5
# project. The module is, however, dual licensed under OpenSSL and
 
6
# CRYPTOGAMS licenses depending on where you obtain it. For further
 
7
# details see http://www.openssl.org/~appro/cryptogams/.
 
8
# ====================================================================
 
9
 
 
10
# SHA1 block procedure for Alpha.
 
11
 
 
12
# On 21264 performance is 33% better than code generated by vendor
 
13
# compiler, and 75% better than GCC [3.4], and in absolute terms is
 
14
# 8.7 cycles per processed byte. Implementation features vectorized
 
15
# byte swap, but not Xupdate.
 
16
 
 
17
@X=(    "\$0",  "\$1",  "\$2",  "\$3",  "\$4",  "\$5",  "\$6",  "\$7",
 
18
        "\$8",  "\$9",  "\$10", "\$11", "\$12", "\$13", "\$14", "\$15");
 
19
$ctx="a0";      # $16
 
20
$inp="a1";
 
21
$num="a2";
 
22
$A="a3";
 
23
$B="a4";        # 20
 
24
$C="a5";
 
25
$D="t8";
 
26
$E="t9";        @V=($A,$B,$C,$D,$E);
 
27
$t0="t10";      # 24
 
28
$t1="t11";
 
29
$t2="ra";
 
30
$t3="t12";
 
31
$K="AT";        # 28
 
32
 
 
33
sub BODY_00_19 {
 
34
my ($i,$a,$b,$c,$d,$e)=@_;
 
35
my $j=$i+1;
 
36
$code.=<<___ if ($i==0);
 
37
        ldq_u   @X[0],0+0($inp)
 
38
        ldq_u   @X[1],0+7($inp)
 
39
___
 
40
$code.=<<___ if (!($i&1) && $i<14);
 
41
        ldq_u   @X[$i+2],($i+2)*4+0($inp)
 
42
        ldq_u   @X[$i+3],($i+2)*4+7($inp)
 
43
___
 
44
$code.=<<___ if (!($i&1) && $i<15);
 
45
        extql   @X[$i],$inp,@X[$i]
 
46
        extqh   @X[$i+1],$inp,@X[$i+1]
 
47
 
 
48
        or      @X[$i+1],@X[$i],@X[$i]  # pair of 32-bit values are fetched
 
49
 
 
50
        srl     @X[$i],24,$t0           # vectorized byte swap
 
51
        srl     @X[$i],8,$t2
 
52
 
 
53
        sll     @X[$i],8,$t3
 
54
        sll     @X[$i],24,@X[$i]
 
55
        zapnot  $t0,0x11,$t0
 
56
        zapnot  $t2,0x22,$t2
 
57
 
 
58
        zapnot  @X[$i],0x88,@X[$i]
 
59
        or      $t0,$t2,$t0
 
60
        zapnot  $t3,0x44,$t3
 
61
        sll     $a,5,$t1
 
62
 
 
63
        or      @X[$i],$t0,@X[$i]
 
64
        addl    $K,$e,$e
 
65
        and     $b,$c,$t2
 
66
        zapnot  $a,0xf,$a
 
67
 
 
68
        or      @X[$i],$t3,@X[$i]
 
69
        srl     $a,27,$t0
 
70
        bic     $d,$b,$t3
 
71
        sll     $b,30,$b
 
72
 
 
73
        extll   @X[$i],4,@X[$i+1]       # extract upper half
 
74
        or      $t2,$t3,$t2
 
75
        addl    @X[$i],$e,$e
 
76
 
 
77
        addl    $t1,$e,$e
 
78
        srl     $b,32,$t3
 
79
        zapnot  @X[$i],0xf,@X[$i]
 
80
 
 
81
        addl    $t0,$e,$e
 
82
        addl    $t2,$e,$e
 
83
        or      $t3,$b,$b
 
84
___
 
85
$code.=<<___ if (($i&1) && $i<15);
 
86
        sll     $a,5,$t1
 
87
        addl    $K,$e,$e
 
88
        and     $b,$c,$t2
 
89
        zapnot  $a,0xf,$a
 
90
 
 
91
        srl     $a,27,$t0
 
92
        addl    @X[$i%16],$e,$e
 
93
        bic     $d,$b,$t3
 
94
        sll     $b,30,$b
 
95
 
 
96
        or      $t2,$t3,$t2
 
97
        addl    $t1,$e,$e
 
98
        srl     $b,32,$t3
 
99
        zapnot  @X[$i],0xf,@X[$i]
 
100
 
 
101
        addl    $t0,$e,$e
 
102
        addl    $t2,$e,$e
 
103
        or      $t3,$b,$b
 
104
___
 
105
$code.=<<___ if ($i>=15);       # with forward Xupdate
 
106
        sll     $a,5,$t1
 
107
        addl    $K,$e,$e
 
108
        and     $b,$c,$t2
 
109
        xor     @X[($j+2)%16],@X[$j%16],@X[$j%16]
 
110
 
 
111
        zapnot  $a,0xf,$a
 
112
        addl    @X[$i%16],$e,$e
 
113
        bic     $d,$b,$t3
 
114
        xor     @X[($j+8)%16],@X[$j%16],@X[$j%16]
 
115
 
 
116
        srl     $a,27,$t0
 
117
        addl    $t1,$e,$e
 
118
        or      $t2,$t3,$t2
 
119
        xor     @X[($j+13)%16],@X[$j%16],@X[$j%16]
 
120
 
 
121
        sll     $b,30,$b
 
122
        addl    $t0,$e,$e
 
123
        srl     @X[$j%16],31,$t1
 
124
 
 
125
        addl    $t2,$e,$e
 
126
        srl     $b,32,$t3
 
127
        addl    @X[$j%16],@X[$j%16],@X[$j%16]
 
128
 
 
129
        or      $t3,$b,$b
 
130
        zapnot  @X[$i%16],0xf,@X[$i%16]
 
131
        or      $t1,@X[$j%16],@X[$j%16]
 
132
___
 
133
}
 
134
 
 
135
sub BODY_20_39 {
 
136
my ($i,$a,$b,$c,$d,$e)=@_;
 
137
my $j=$i+1;
 
138
$code.=<<___ if ($i<79);        # with forward Xupdate
 
139
        sll     $a,5,$t1
 
140
        addl    $K,$e,$e
 
141
        zapnot  $a,0xf,$a
 
142
        xor     @X[($j+2)%16],@X[$j%16],@X[$j%16]
 
143
 
 
144
        sll     $b,30,$t3
 
145
        addl    $t1,$e,$e
 
146
        xor     $b,$c,$t2
 
147
        xor     @X[($j+8)%16],@X[$j%16],@X[$j%16]
 
148
 
 
149
        srl     $b,2,$b
 
150
        addl    @X[$i%16],$e,$e
 
151
        xor     $d,$t2,$t2
 
152
        xor     @X[($j+13)%16],@X[$j%16],@X[$j%16]
 
153
 
 
154
        srl     @X[$j%16],31,$t1
 
155
        addl    $t2,$e,$e
 
156
        srl     $a,27,$t0
 
157
        addl    @X[$j%16],@X[$j%16],@X[$j%16]
 
158
 
 
159
        or      $t3,$b,$b
 
160
        addl    $t0,$e,$e
 
161
        or      $t1,@X[$j%16],@X[$j%16]
 
162
___
 
163
$code.=<<___ if ($i<77);
 
164
        zapnot  @X[$i%16],0xf,@X[$i%16]
 
165
___
 
166
$code.=<<___ if ($i==79);       # with context fetch
 
167
        sll     $a,5,$t1
 
168
        addl    $K,$e,$e
 
169
        zapnot  $a,0xf,$a
 
170
        ldl     @X[0],0($ctx)
 
171
 
 
172
        sll     $b,30,$t3
 
173
        addl    $t1,$e,$e
 
174
        xor     $b,$c,$t2
 
175
        ldl     @X[1],4($ctx)
 
176
 
 
177
        srl     $b,2,$b
 
178
        addl    @X[$i%16],$e,$e
 
179
        xor     $d,$t2,$t2
 
180
        ldl     @X[2],8($ctx)
 
181
 
 
182
        srl     $a,27,$t0
 
183
        addl    $t2,$e,$e
 
184
        ldl     @X[3],12($ctx)
 
185
 
 
186
        or      $t3,$b,$b
 
187
        addl    $t0,$e,$e
 
188
        ldl     @X[4],16($ctx)
 
189
___
 
190
}
 
191
 
 
192
sub BODY_40_59 {
 
193
my ($i,$a,$b,$c,$d,$e)=@_;
 
194
my $j=$i+1;
 
195
$code.=<<___;   # with forward Xupdate
 
196
        sll     $a,5,$t1
 
197
        addl    $K,$e,$e
 
198
        zapnot  $a,0xf,$a
 
199
        xor     @X[($j+2)%16],@X[$j%16],@X[$j%16]
 
200
 
 
201
        srl     $a,27,$t0
 
202
        and     $b,$c,$t2
 
203
        and     $b,$d,$t3
 
204
        xor     @X[($j+8)%16],@X[$j%16],@X[$j%16]
 
205
 
 
206
        sll     $b,30,$b
 
207
        addl    $t1,$e,$e
 
208
        xor     @X[($j+13)%16],@X[$j%16],@X[$j%16]
 
209
 
 
210
        srl     @X[$j%16],31,$t1
 
211
        addl    $t0,$e,$e
 
212
        or      $t2,$t3,$t2
 
213
        and     $c,$d,$t3
 
214
 
 
215
        or      $t2,$t3,$t2
 
216
        srl     $b,32,$t3
 
217
        addl    @X[$i%16],$e,$e
 
218
        addl    @X[$j%16],@X[$j%16],@X[$j%16]
 
219
 
 
220
        or      $t3,$b,$b
 
221
        addl    $t2,$e,$e
 
222
        or      $t1,@X[$j%16],@X[$j%16]
 
223
        zapnot  @X[$i%16],0xf,@X[$i%16]
 
224
___
 
225
}
 
226
 
 
227
$code=<<___;
 
228
#ifdef __linux__
 
229
#include <asm/regdef.h>
 
230
#else
 
231
#include <asm.h>
 
232
#include <regdef.h>
 
233
#endif
 
234
 
 
235
.text
 
236
 
 
237
.set    noat
 
238
.set    noreorder
 
239
.globl  sha1_block_data_order
 
240
.align  5
 
241
.ent    sha1_block_data_order
 
242
sha1_block_data_order:
 
243
        lda     sp,-64(sp)
 
244
        stq     ra,0(sp)
 
245
        stq     s0,8(sp)
 
246
        stq     s1,16(sp)
 
247
        stq     s2,24(sp)
 
248
        stq     s3,32(sp)
 
249
        stq     s4,40(sp)
 
250
        stq     s5,48(sp)
 
251
        stq     fp,56(sp)
 
252
        .mask   0x0400fe00,-64
 
253
        .frame  sp,64,ra
 
254
        .prologue 0
 
255
 
 
256
        ldl     $A,0($ctx)
 
257
        ldl     $B,4($ctx)
 
258
        sll     $num,6,$num
 
259
        ldl     $C,8($ctx)
 
260
        ldl     $D,12($ctx)
 
261
        ldl     $E,16($ctx)
 
262
        addq    $inp,$num,$num
 
263
 
 
264
.Lloop:
 
265
        .set    noreorder
 
266
        ldah    $K,23170(zero)
 
267
        zapnot  $B,0xf,$B
 
268
        lda     $K,31129($K)    # K_00_19
 
269
___
 
270
for ($i=0;$i<20;$i++) { &BODY_00_19($i,@V); unshift(@V,pop(@V)); }
 
271
 
 
272
$code.=<<___;
 
273
        ldah    $K,28378(zero)
 
274
        lda     $K,-5215($K)    # K_20_39
 
275
___
 
276
for (;$i<40;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
 
277
 
 
278
$code.=<<___;
 
279
        ldah    $K,-28900(zero)
 
280
        lda     $K,-17188($K)   # K_40_59
 
281
___
 
282
for (;$i<60;$i++) { &BODY_40_59($i,@V); unshift(@V,pop(@V)); }
 
283
 
 
284
$code.=<<___;
 
285
        ldah    $K,-13725(zero)
 
286
        lda     $K,-15914($K)   # K_60_79
 
287
___
 
288
for (;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
 
289
 
 
290
$code.=<<___;
 
291
        addl    @X[0],$A,$A
 
292
        addl    @X[1],$B,$B
 
293
        addl    @X[2],$C,$C
 
294
        addl    @X[3],$D,$D
 
295
        addl    @X[4],$E,$E
 
296
        stl     $A,0($ctx)
 
297
        stl     $B,4($ctx)
 
298
        addq    $inp,64,$inp
 
299
        stl     $C,8($ctx)
 
300
        stl     $D,12($ctx)
 
301
        stl     $E,16($ctx)
 
302
        cmpult  $inp,$num,$t1
 
303
        bne     $t1,.Lloop
 
304
 
 
305
        .set    noreorder
 
306
        ldq     ra,0(sp)
 
307
        ldq     s0,8(sp)
 
308
        ldq     s1,16(sp)
 
309
        ldq     s2,24(sp)
 
310
        ldq     s3,32(sp)
 
311
        ldq     s4,40(sp)
 
312
        ldq     s5,48(sp)
 
313
        ldq     fp,56(sp)
 
314
        lda     sp,64(sp)
 
315
        ret     (ra)
 
316
.end    sha1_block_data_order
 
317
.ascii  "SHA1 block transform for Alpha, CRYPTOGAMS by <appro\@openssl.org>"
 
318
.align  2
 
319
___
 
320
$output=shift and open STDOUT,">$output";
 
321
print $code;
 
322
close STDOUT;