2
===================================================================
6
4
"debian-powerpc","gcc:-DB_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
7
5
"debian-powerpcspe","gcc:-DB_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
8
6
"debian-ppc64","gcc:-m64 -DB_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
9
+"debian-ppc64el","gcc:-m64 -DL_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
7
+"debian-ppc64el","gcc:-m64 -DL_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64le:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
10
8
"debian-s390","gcc:-DB_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
11
9
"debian-s390x","gcc:-DB_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
12
10
"debian-sh3", "gcc:-DL_ENDIAN -DTERMIO ${debian_cflags}::-D_REENTRANT::-ldl:BN_LLONG:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
13
"linux-generic64","gcc:-DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
14
"linux-ppc64", "gcc:-m64 -DB_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
15
+"linux-ppc64le", "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64le:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
16
"linux-ia64", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
17
"linux-ia64-ecc","ecc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
18
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
19
--- a/crypto/aes/asm/aes-ppc.pl
20
+++ b/crypto/aes/asm/aes-ppc.pl
23
} else { die "nonsense $flavour"; }
26
+if ($flavour =~ /le$/) {
27
+ die "little-endian is 64-bit only: $flavour" if ($SIZE_T == 4);
31
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
32
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
33
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
39
+$code.=<<___ if (!$LITTLE_ENDIAN);
45
+$code.=<<___ if ($LITTLE_ENDIAN);
54
+ rlwimi $s0,$t0,24,0,7
55
+ rlwimi $s1,$t1,24,0,7
56
+ rlwimi $s2,$t2,24,0,7
57
+ rlwimi $s3,$t3,24,0,7
58
+ rlwimi $s0,$t0,24,16,23
59
+ rlwimi $s1,$t1,24,16,23
60
+ rlwimi $s2,$t2,24,16,23
61
+ rlwimi $s3,$t3,24,16,23
65
bl Lppc_AES_encrypt_compact
67
+$code.=<<___ if ($LITTLE_ENDIAN);
72
+ rlwimi $t0,$s0,24,0,7
73
+ rlwimi $t1,$s1,24,0,7
74
+ rlwimi $t2,$s2,24,0,7
75
+ rlwimi $t3,$s3,24,0,7
76
+ rlwimi $t0,$s0,24,16,23
77
+ rlwimi $t1,$s1,24,16,23
78
+ rlwimi $t2,$s2,24,16,23
79
+ rlwimi $t3,$s3,24,16,23
85
+$code.=<<___ if (!$LITTLE_ENDIAN);
100
+$code.=<<___ if (!$LITTLE_ENDIAN);
106
+$code.=<<___ if ($LITTLE_ENDIAN);
115
+ rlwimi $s0,$t0,24,0,7
116
+ rlwimi $s1,$t1,24,0,7
117
+ rlwimi $s2,$t2,24,0,7
118
+ rlwimi $s3,$t3,24,0,7
119
+ rlwimi $s0,$t0,24,16,23
120
+ rlwimi $s1,$t1,24,16,23
121
+ rlwimi $s2,$t2,24,16,23
122
+ rlwimi $s3,$t3,24,16,23
126
bl Lppc_AES_decrypt_compact
128
+$code.=<<___ if ($LITTLE_ENDIAN);
133
+ rlwimi $t0,$s0,24,0,7
134
+ rlwimi $t1,$s1,24,0,7
135
+ rlwimi $t2,$s2,24,0,7
136
+ rlwimi $t3,$s3,24,0,7
137
+ rlwimi $t0,$s0,24,16,23
138
+ rlwimi $t1,$s1,24,16,23
139
+ rlwimi $t2,$s2,24,16,23
140
+ rlwimi $t3,$s3,24,16,23
146
+$code.=<<___ if (!$LITTLE_ENDIAN);
156
--- a/crypto/perlasm/ppc-xlate.pl
157
+++ b/crypto/perlasm/ppc-xlate.pl
159
/osx/ && do { $name = "_$name";
162
- /linux.*32/ && do { $ret .= ".globl $name\n";
164
+ /linux.*64le/ && do { $ret .= ".globl $name\n";
165
$ret .= ".type $name,\@function";
172
- if ($flavour =~ /linux.*32/)
173
+ if ($flavour =~ /linux.*32/ || $flavour =~ /linux.*64le/)
175
".size " . join(",",@_);
186
+ if (/^0x([0-9a-f]*?)([0-9a-f]{1,8})$/io)
187
+ { $hi=$1?"0x$1":"0"; $lo="0x$2"; }
188
+ elsif (/^([0-9]+)$/o)
189
+ { $hi=$1>>32; $lo=$1&0xffffffff; } # error-prone with 32-bit perl
191
+ { $hi=undef; $lo=$_; }
194
+ { push(@ret,$flavour=~/le$/o?".long\t$lo,$hi":".long\t$hi,$lo"); }
196
+ { push(@ret,".quad $lo"); }
201
################################################################
202
# simplified mnemonics not handled by at least one assembler
203
--- a/crypto/sha/asm/sha1-ppc.pl
204
+++ b/crypto/sha/asm/sha1-ppc.pl
207
} else { die "nonsense $flavour"; }
209
+# Define endianess based on flavour
212
+if ($flavour =~ /le$/) {
213
+ die "little-endian is 64-bit only: $flavour" if ($SIZE_T == 4);
217
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
218
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
219
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
221
@X=("r16","r17","r18","r19","r20","r21","r22","r23",
222
"r24","r25","r26","r27","r28","r29","r30","r31");
225
+my ($dst, $src, $temp_reg) = @_;
226
+$code.=<<___ if (!$LITTLE_ENDIAN);
229
+$code.=<<___ if ($LITTLE_ENDIAN);
231
+ rotlwi $dst,$temp_reg,8
232
+ rlwimi $dst,$temp_reg,24,0,7
233
+ rlwimi $dst,$temp_reg,24,16,23
238
my ($i,$a,$b,$c,$d,$e,$f)=@_;
240
-$code.=<<___ if ($i==0);
241
- lwz @X[$i],`$i*4`($inp)
244
+ # Since the last value of $f is discarded, we can use
245
+ # it as a temp reg to swap byte-order when needed.
246
+ loadbe("@X[$i]","`$i*4`($inp)",$f) if ($i==0);
247
+ loadbe("@X[$j]","`$j*4`($inp)",$f) if ($i<15);
248
$code.=<<___ if ($i<15);
249
- lwz @X[$j],`$j*4`($inp)
253
--- a/crypto/sha/asm/sha512-ppc.pl
254
+++ b/crypto/sha/asm/sha512-ppc.pl
257
} else { die "nonsense $flavour"; }
260
+if ($flavour =~ /le$/) {
261
+ die "little-endian is 64-bit only: $flavour" if ($SIZE_T==4);
265
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
266
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
267
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
268
@@ -314,16 +320,33 @@
271
for($i=0;$i<16;$i++) {
272
-$code.=<<___ if ($SZ==4);
273
+$code.=<<___ if ($SZ==4 && !$LITTLE_ENDIAN);
274
lwz @X[$i],`$i*$SZ`($inp)
276
+$code.=<<___ if ($SZ==4 && $LITTLE_ENDIAN);
277
+ lwz $a0,`$i*$SZ`($inp)
278
+ rotlwi @X[$i],$a0,8
279
+ rlwimi @X[$i],$a0,24,0,7
280
+ rlwimi @X[$i],$a0,24,16,23
282
# 64-bit loads are split to 2x32-bit ones, as CPU can't handle
283
# unaligned 64-bit loads, only 32-bit ones...
284
-$code.=<<___ if ($SZ==8);
285
+$code.=<<___ if ($SZ==8 && !$LITTLE_ENDIAN);
286
lwz $t0,`$i*$SZ`($inp)
287
lwz @X[$i],`$i*$SZ+4`($inp)
288
insrdi @X[$i],$t0,32,0
290
+$code.=<<___ if ($SZ==8 && $LITTLE_ENDIAN);
291
+ lwz $a0,`$i*$SZ`($inp)
292
+ lwz $a1,`$i*$SZ+4`($inp)
294
+ rotlwi @X[$i],$a1,8
295
+ rlwimi $t0,$a0,24,0,7
296
+ rlwimi @X[$i],$a1,24,0,7
297
+ rlwimi $t0,$a0,24,16,23
298
+ rlwimi @X[$i],$a1,24,16,23
299
+ insrdi @X[$i],$t0,32,0
304
@@ -395,46 +418,46 @@
307
$code.=<<___ if ($SZ==8);
308
- .long 0x428a2f98,0xd728ae22,0x71374491,0x23ef65cd
309
- .long 0xb5c0fbcf,0xec4d3b2f,0xe9b5dba5,0x8189dbbc
310
- .long 0x3956c25b,0xf348b538,0x59f111f1,0xb605d019
311
- .long 0x923f82a4,0xaf194f9b,0xab1c5ed5,0xda6d8118
312
- .long 0xd807aa98,0xa3030242,0x12835b01,0x45706fbe
313
- .long 0x243185be,0x4ee4b28c,0x550c7dc3,0xd5ffb4e2
314
- .long 0x72be5d74,0xf27b896f,0x80deb1fe,0x3b1696b1
315
- .long 0x9bdc06a7,0x25c71235,0xc19bf174,0xcf692694
316
- .long 0xe49b69c1,0x9ef14ad2,0xefbe4786,0x384f25e3
317
- .long 0x0fc19dc6,0x8b8cd5b5,0x240ca1cc,0x77ac9c65
318
- .long 0x2de92c6f,0x592b0275,0x4a7484aa,0x6ea6e483
319
- .long 0x5cb0a9dc,0xbd41fbd4,0x76f988da,0x831153b5
320
- .long 0x983e5152,0xee66dfab,0xa831c66d,0x2db43210
321
- .long 0xb00327c8,0x98fb213f,0xbf597fc7,0xbeef0ee4
322
- .long 0xc6e00bf3,0x3da88fc2,0xd5a79147,0x930aa725
323
- .long 0x06ca6351,0xe003826f,0x14292967,0x0a0e6e70
324
- .long 0x27b70a85,0x46d22ffc,0x2e1b2138,0x5c26c926
325
- .long 0x4d2c6dfc,0x5ac42aed,0x53380d13,0x9d95b3df
326
- .long 0x650a7354,0x8baf63de,0x766a0abb,0x3c77b2a8
327
- .long 0x81c2c92e,0x47edaee6,0x92722c85,0x1482353b
328
- .long 0xa2bfe8a1,0x4cf10364,0xa81a664b,0xbc423001
329
- .long 0xc24b8b70,0xd0f89791,0xc76c51a3,0x0654be30
330
- .long 0xd192e819,0xd6ef5218,0xd6990624,0x5565a910
331
- .long 0xf40e3585,0x5771202a,0x106aa070,0x32bbd1b8
332
- .long 0x19a4c116,0xb8d2d0c8,0x1e376c08,0x5141ab53
333
- .long 0x2748774c,0xdf8eeb99,0x34b0bcb5,0xe19b48a8
334
- .long 0x391c0cb3,0xc5c95a63,0x4ed8aa4a,0xe3418acb
335
- .long 0x5b9cca4f,0x7763e373,0x682e6ff3,0xd6b2b8a3
336
- .long 0x748f82ee,0x5defb2fc,0x78a5636f,0x43172f60
337
- .long 0x84c87814,0xa1f0ab72,0x8cc70208,0x1a6439ec
338
- .long 0x90befffa,0x23631e28,0xa4506ceb,0xde82bde9
339
- .long 0xbef9a3f7,0xb2c67915,0xc67178f2,0xe372532b
340
- .long 0xca273ece,0xea26619c,0xd186b8c7,0x21c0c207
341
- .long 0xeada7dd6,0xcde0eb1e,0xf57d4f7f,0xee6ed178
342
- .long 0x06f067aa,0x72176fba,0x0a637dc5,0xa2c898a6
343
- .long 0x113f9804,0xbef90dae,0x1b710b35,0x131c471b
344
- .long 0x28db77f5,0x23047d84,0x32caab7b,0x40c72493
345
- .long 0x3c9ebe0a,0x15c9bebc,0x431d67c4,0x9c100d4c
346
- .long 0x4cc5d4be,0xcb3e42b6,0x597f299c,0xfc657e2a
347
- .long 0x5fcb6fab,0x3ad6faec,0x6c44198c,0x4a475817
348
+ .quad 0x428a2f98d728ae22,0x7137449123ef65cd
349
+ .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
350
+ .quad 0x3956c25bf348b538,0x59f111f1b605d019
351
+ .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
352
+ .quad 0xd807aa98a3030242,0x12835b0145706fbe
353
+ .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
354
+ .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
355
+ .quad 0x9bdc06a725c71235,0xc19bf174cf692694
356
+ .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
357
+ .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
358
+ .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
359
+ .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
360
+ .quad 0x983e5152ee66dfab,0xa831c66d2db43210
361
+ .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
362
+ .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
363
+ .quad 0x06ca6351e003826f,0x142929670a0e6e70
364
+ .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
365
+ .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
366
+ .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
367
+ .quad 0x81c2c92e47edaee6,0x92722c851482353b
368
+ .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
369
+ .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
370
+ .quad 0xd192e819d6ef5218,0xd69906245565a910
371
+ .quad 0xf40e35855771202a,0x106aa07032bbd1b8
372
+ .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
373
+ .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
374
+ .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
375
+ .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
376
+ .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
377
+ .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
378
+ .quad 0x90befffa23631e28,0xa4506cebde82bde9
379
+ .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
380
+ .quad 0xca273eceea26619c,0xd186b8c721c0c207
381
+ .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
382
+ .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
383
+ .quad 0x113f9804bef90dae,0x1b710b35131c471b
384
+ .quad 0x28db77f523047d84,0x32caab7b40c72493
385
+ .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
386
+ .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
387
+ .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
389
$code.=<<___ if ($SZ==4);
390
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5