PPC assembly pack: jumbo update from master.
Add Vector Permutation AES and little-endian support.
This commit is contained in:
parent
5572bc4e2f
commit
50f1b47c7f
@ -139,8 +139,8 @@ my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o::aes
|
||||
my $armv4_asm="armcap.o armv4cpuid.o:bn_asm.o armv4-mont.o armv4-gf2m.o::aes_cbc.o aes-armv4.o bsaes-armv7.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o::void";
|
||||
my $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::32";
|
||||
my $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::64";
|
||||
my $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::::";
|
||||
my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::::";
|
||||
my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::::";
|
||||
my $ppc32_asm=$ppc64_asm;
|
||||
my $no_asm=":::::::::::::::void";
|
||||
|
||||
# As for $BSDthreads. Idea is to maintain "collective" set of flags,
|
||||
@ -365,6 +365,7 @@ my %table=(
|
||||
####
|
||||
"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)",
|
||||
"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",
|
||||
"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):::",
|
||||
"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)",
|
||||
"linux-ia64-icc","icc:-DL_ENDIAN -DTERMIO -O2 -Wall::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
|
||||
"linux-x86_64", "gcc:-m64 -DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
|
||||
|
61
TABLE
61
TABLE
@ -902,10 +902,10 @@ $bn_ops = BN_LLONG RC4_CHAR
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
@ -935,10 +935,10 @@ $bn_ops = BN_LLONG RC4_CHAR
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
@ -1001,7 +1001,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
@ -1034,7 +1034,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
@ -1463,10 +1463,10 @@ $bn_ops = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
@ -1496,7 +1496,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
@ -2189,10 +2189,10 @@ $bn_ops = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
@ -4400,10 +4400,10 @@ $bn_ops = BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
@ -4433,7 +4433,7 @@ $bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
@ -4455,6 +4455,39 @@ $ranlib =
|
||||
$arflags =
|
||||
$multilib = 64
|
||||
|
||||
*** linux-ppc64le
|
||||
$cc = gcc
|
||||
$cflags = -m64 -DL_ENDIAN -DTERMIO -O3 -Wall
|
||||
$unistd =
|
||||
$thread_cflag = -D_REENTRANT
|
||||
$sys_id =
|
||||
$lflags = -ldl
|
||||
$bn_ops = SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL
|
||||
$cpuid_obj = ppccpuid.o ppccap.o
|
||||
$bn_obj = bn-ppc.o ppc-mont.o ppc64-mont.o
|
||||
$des_obj =
|
||||
$aes_obj = aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o
|
||||
$bf_obj =
|
||||
$md5_obj =
|
||||
$sha1_obj = sha1-ppc.o sha256-ppc.o sha512-ppc.o
|
||||
$cast_obj =
|
||||
$rc4_obj =
|
||||
$rmd160_obj =
|
||||
$rc5_obj =
|
||||
$wp_obj =
|
||||
$cmll_obj =
|
||||
$modes_obj =
|
||||
$engines_obj =
|
||||
$perlasm_scheme = linux64le
|
||||
$dso_scheme = dlfcn
|
||||
$shared_target= linux-shared
|
||||
$shared_cflag = -fPIC
|
||||
$shared_ldflag = -m64
|
||||
$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR)
|
||||
$ranlib =
|
||||
$arflags =
|
||||
$multilib =
|
||||
|
||||
*** linux-sparcv8
|
||||
$cc = gcc
|
||||
$cflags = -mv8 -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall -DBN_DIV2W
|
||||
|
@ -75,6 +75,8 @@ aest4-sparcv9.s: asm/aest4-sparcv9.pl
|
||||
|
||||
aes-ppc.s: asm/aes-ppc.pl
|
||||
$(PERL) asm/aes-ppc.pl $(PERLASM_SCHEME) $@
|
||||
vpaes-ppc.s: asm/vpaes-ppc.pl
|
||||
$(PERL) asm/vpaes-ppc.pl $(PERLASM_SCHEME) $@
|
||||
|
||||
aes-parisc.s: asm/aes-parisc.pl
|
||||
$(PERL) asm/aes-parisc.pl $(PERLASM_SCHEME) $@
|
||||
|
@ -45,6 +45,8 @@ if ($flavour =~ /64/) {
|
||||
$PUSH ="stw";
|
||||
} else { die "nonsense $flavour"; }
|
||||
|
||||
$LITTLE_ENDIAN = ($flavour=~/le$/) ? $SIZE_T : 0;
|
||||
|
||||
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
||||
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
|
||||
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
|
||||
@ -361,17 +363,61 @@ $code.=<<___;
|
||||
bne Lenc_unaligned
|
||||
|
||||
Lenc_unaligned_ok:
|
||||
___
|
||||
$code.=<<___ if (!$LITTLE_ENDIAN);
|
||||
lwz $s0,0($inp)
|
||||
lwz $s1,4($inp)
|
||||
lwz $s2,8($inp)
|
||||
lwz $s3,12($inp)
|
||||
___
|
||||
$code.=<<___ if ($LITTLE_ENDIAN);
|
||||
lwz $t0,0($inp)
|
||||
lwz $t1,4($inp)
|
||||
lwz $t2,8($inp)
|
||||
lwz $t3,12($inp)
|
||||
rotlwi $s0,$t0,8
|
||||
rotlwi $s1,$t1,8
|
||||
rotlwi $s2,$t2,8
|
||||
rotlwi $s3,$t3,8
|
||||
rlwimi $s0,$t0,24,0,7
|
||||
rlwimi $s1,$t1,24,0,7
|
||||
rlwimi $s2,$t2,24,0,7
|
||||
rlwimi $s3,$t3,24,0,7
|
||||
rlwimi $s0,$t0,24,16,23
|
||||
rlwimi $s1,$t1,24,16,23
|
||||
rlwimi $s2,$t2,24,16,23
|
||||
rlwimi $s3,$t3,24,16,23
|
||||
___
|
||||
$code.=<<___;
|
||||
bl LAES_Te
|
||||
bl Lppc_AES_encrypt_compact
|
||||
$POP $out,`$FRAME-$SIZE_T*19`($sp)
|
||||
___
|
||||
$code.=<<___ if ($LITTLE_ENDIAN);
|
||||
rotlwi $t0,$s0,8
|
||||
rotlwi $t1,$s1,8
|
||||
rotlwi $t2,$s2,8
|
||||
rotlwi $t3,$s3,8
|
||||
rlwimi $t0,$s0,24,0,7
|
||||
rlwimi $t1,$s1,24,0,7
|
||||
rlwimi $t2,$s2,24,0,7
|
||||
rlwimi $t3,$s3,24,0,7
|
||||
rlwimi $t0,$s0,24,16,23
|
||||
rlwimi $t1,$s1,24,16,23
|
||||
rlwimi $t2,$s2,24,16,23
|
||||
rlwimi $t3,$s3,24,16,23
|
||||
stw $t0,0($out)
|
||||
stw $t1,4($out)
|
||||
stw $t2,8($out)
|
||||
stw $t3,12($out)
|
||||
___
|
||||
$code.=<<___ if (!$LITTLE_ENDIAN);
|
||||
stw $s0,0($out)
|
||||
stw $s1,4($out)
|
||||
stw $s2,8($out)
|
||||
stw $s3,12($out)
|
||||
___
|
||||
$code.=<<___;
|
||||
b Lenc_done
|
||||
|
||||
Lenc_unaligned:
|
||||
@ -795,17 +841,61 @@ Lenc_compact_done:
|
||||
bne Ldec_unaligned
|
||||
|
||||
Ldec_unaligned_ok:
|
||||
___
|
||||
$code.=<<___ if (!$LITTLE_ENDIAN);
|
||||
lwz $s0,0($inp)
|
||||
lwz $s1,4($inp)
|
||||
lwz $s2,8($inp)
|
||||
lwz $s3,12($inp)
|
||||
___
|
||||
$code.=<<___ if ($LITTLE_ENDIAN);
|
||||
lwz $t0,0($inp)
|
||||
lwz $t1,4($inp)
|
||||
lwz $t2,8($inp)
|
||||
lwz $t3,12($inp)
|
||||
rotlwi $s0,$t0,8
|
||||
rotlwi $s1,$t1,8
|
||||
rotlwi $s2,$t2,8
|
||||
rotlwi $s3,$t3,8
|
||||
rlwimi $s0,$t0,24,0,7
|
||||
rlwimi $s1,$t1,24,0,7
|
||||
rlwimi $s2,$t2,24,0,7
|
||||
rlwimi $s3,$t3,24,0,7
|
||||
rlwimi $s0,$t0,24,16,23
|
||||
rlwimi $s1,$t1,24,16,23
|
||||
rlwimi $s2,$t2,24,16,23
|
||||
rlwimi $s3,$t3,24,16,23
|
||||
___
|
||||
$code.=<<___;
|
||||
bl LAES_Td
|
||||
bl Lppc_AES_decrypt_compact
|
||||
$POP $out,`$FRAME-$SIZE_T*19`($sp)
|
||||
___
|
||||
$code.=<<___ if ($LITTLE_ENDIAN);
|
||||
rotlwi $t0,$s0,8
|
||||
rotlwi $t1,$s1,8
|
||||
rotlwi $t2,$s2,8
|
||||
rotlwi $t3,$s3,8
|
||||
rlwimi $t0,$s0,24,0,7
|
||||
rlwimi $t1,$s1,24,0,7
|
||||
rlwimi $t2,$s2,24,0,7
|
||||
rlwimi $t3,$s3,24,0,7
|
||||
rlwimi $t0,$s0,24,16,23
|
||||
rlwimi $t1,$s1,24,16,23
|
||||
rlwimi $t2,$s2,24,16,23
|
||||
rlwimi $t3,$s3,24,16,23
|
||||
stw $t0,0($out)
|
||||
stw $t1,4($out)
|
||||
stw $t2,8($out)
|
||||
stw $t3,12($out)
|
||||
___
|
||||
$code.=<<___ if (!$LITTLE_ENDIAN);
|
||||
stw $s0,0($out)
|
||||
stw $s1,4($out)
|
||||
stw $s2,8($out)
|
||||
stw $s3,12($out)
|
||||
___
|
||||
$code.=<<___;
|
||||
b Ldec_done
|
||||
|
||||
Ldec_unaligned:
|
||||
|
1507
crypto/aes/asm/vpaes-ppc.pl
Normal file
1507
crypto/aes/asm/vpaes-ppc.pl
Normal file
File diff suppressed because it is too large
Load Diff
@ -157,6 +157,11 @@ void AES_xts_decrypt(const char *inp,char *out,size_t len,
|
||||
const unsigned char iv[16]);
|
||||
#endif
|
||||
|
||||
#if defined(VPAES_ASM) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC))
|
||||
extern unsigned int OPENSSL_ppccap_P;
|
||||
#define VPAES_CAPABLE (OPENSSL_ppccap_P&(1<<1))
|
||||
#endif
|
||||
|
||||
#if defined(AES_ASM) && !defined(I386_ONLY) && ( \
|
||||
((defined(__i386) || defined(__i386__) || \
|
||||
defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
|
||||
|
@ -27,7 +27,8 @@ my $globl = sub {
|
||||
/osx/ && do { $name = "_$name";
|
||||
last;
|
||||
};
|
||||
/linux.*32/ && do { $ret .= ".globl $name\n";
|
||||
/linux.*(32|64le)/
|
||||
&& do { $ret .= ".globl $name\n";
|
||||
$ret .= ".type $name,\@function";
|
||||
last;
|
||||
};
|
||||
@ -49,7 +50,9 @@ my $globl = sub {
|
||||
$ret;
|
||||
};
|
||||
my $text = sub {
|
||||
($flavour =~ /aix/) ? ".csect" : ".text";
|
||||
my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text";
|
||||
$ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/);
|
||||
$ret;
|
||||
};
|
||||
my $machine = sub {
|
||||
my $junk = shift;
|
||||
@ -64,8 +67,8 @@ my $size = sub {
|
||||
if ($flavour =~ /linux/)
|
||||
{ shift;
|
||||
my $name = shift; $name =~ s|^[\.\_]||;
|
||||
my $ret = ".size $name,.-".($flavour=~/64/?".":"").$name;
|
||||
$ret .= "\n.size .$name,.-.$name" if ($flavour=~/64/);
|
||||
my $ret = ".size $name,.-".($flavour=~/64$/?".":"").$name;
|
||||
$ret .= "\n.size .$name,.-.$name" if ($flavour=~/64$/);
|
||||
$ret;
|
||||
}
|
||||
else
|
||||
@ -79,6 +82,25 @@ my $asciz = sub {
|
||||
else
|
||||
{ ""; }
|
||||
};
|
||||
my $quad = sub {
|
||||
shift;
|
||||
my @ret;
|
||||
my ($hi,$lo);
|
||||
for (@_) {
|
||||
if (/^0x([0-9a-f]*?)([0-9a-f]{1,8})$/io)
|
||||
{ $hi=$1?"0x$1":"0"; $lo="0x$2"; }
|
||||
elsif (/^([0-9]+)$/o)
|
||||
{ $hi=$1>>32; $lo=$1&0xffffffff; } # error-prone with 32-bit perl
|
||||
else
|
||||
{ $hi=undef; $lo=$_; }
|
||||
|
||||
if (defined($hi))
|
||||
{ push(@ret,$flavour=~/le$/o?".long\t$lo,$hi":".long\t$hi,$lo"); }
|
||||
else
|
||||
{ push(@ret,".quad $lo"); }
|
||||
}
|
||||
join("\n",@ret);
|
||||
};
|
||||
|
||||
################################################################
|
||||
# simplified mnemonics not handled by at least one assembler
|
||||
@ -124,6 +146,10 @@ my $extrdi = sub {
|
||||
$b = ($b+$n)&63; $n = 64-$n;
|
||||
" rldicl $ra,$rs,$b,$n";
|
||||
};
|
||||
my $vmr = sub {
|
||||
my ($f,$vx,$vy) = @_;
|
||||
" vor $vx,$vy,$vy";
|
||||
};
|
||||
|
||||
while($line=<>) {
|
||||
|
||||
@ -140,7 +166,10 @@ while($line=<>) {
|
||||
{
|
||||
$line =~ s|(^[\.\w]+)\:\s*||;
|
||||
my $label = $1;
|
||||
printf "%s:",($GLOBALS{$label} or $label) if ($label);
|
||||
if ($label) {
|
||||
printf "%s:",($GLOBALS{$label} or $label);
|
||||
printf "\n.localentry\t$GLOBALS{$label},0" if ($GLOBALS{$label} && $flavour =~ /linux.*64le/);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
@ -149,7 +178,7 @@ while($line=<>) {
|
||||
my $mnemonic = $2;
|
||||
my $f = $3;
|
||||
my $opcode = eval("\$$mnemonic");
|
||||
$line =~ s|\bc?[rf]([0-9]+)\b|$1|g if ($c ne "." and $flavour !~ /osx/);
|
||||
$line =~ s/\b(c?[rf]|v|vs)([0-9]+)\b/$2/g if ($c ne "." and $flavour !~ /osx/);
|
||||
if (ref($opcode) eq 'CODE') { $line = &$opcode($f,split(',',$line)); }
|
||||
elsif ($mnemonic) { $line = $c.$mnemonic.$f."\t".$line; }
|
||||
}
|
||||
|
@ -9,8 +9,7 @@
|
||||
|
||||
# I let hardware handle unaligned input(*), except on page boundaries
|
||||
# (see below for details). Otherwise straightforward implementation
|
||||
# with X vector in register bank. The module is big-endian [which is
|
||||
# not big deal as there're no little-endian targets left around].
|
||||
# with X vector in register bank.
|
||||
#
|
||||
# (*) this means that this module is inappropriate for PPC403? Does
|
||||
# anybody know if pre-POWER3 can sustain unaligned load?
|
||||
@ -38,6 +37,10 @@ if ($flavour =~ /64/) {
|
||||
$PUSH ="stw";
|
||||
} else { die "nonsense $flavour"; }
|
||||
|
||||
# Define endianess based on flavour
|
||||
# i.e.: linux64le
|
||||
$LITTLE_ENDIAN = ($flavour=~/le$/) ? $SIZE_T : 0;
|
||||
|
||||
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
||||
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
|
||||
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
|
||||
@ -68,14 +71,28 @@ $T ="r12";
|
||||
@X=("r16","r17","r18","r19","r20","r21","r22","r23",
|
||||
"r24","r25","r26","r27","r28","r29","r30","r31");
|
||||
|
||||
sub loadbe {
|
||||
my ($dst, $src, $temp_reg) = @_;
|
||||
$code.=<<___ if (!$LITTLE_ENDIAN);
|
||||
lwz $dst,$src
|
||||
___
|
||||
$code.=<<___ if ($LITTLE_ENDIAN);
|
||||
lwz $temp_reg,$src
|
||||
rotlwi $dst,$temp_reg,8
|
||||
rlwimi $dst,$temp_reg,24,0,7
|
||||
rlwimi $dst,$temp_reg,24,16,23
|
||||
___
|
||||
}
|
||||
|
||||
sub BODY_00_19 {
|
||||
my ($i,$a,$b,$c,$d,$e,$f)=@_;
|
||||
my $j=$i+1;
|
||||
$code.=<<___ if ($i==0);
|
||||
lwz @X[$i],`$i*4`($inp)
|
||||
___
|
||||
|
||||
# Since the last value of $f is discarded, we can use
|
||||
# it as a temp reg to swap byte-order when needed.
|
||||
loadbe("@X[$i]","`$i*4`($inp)",$f) if ($i==0);
|
||||
loadbe("@X[$j]","`$j*4`($inp)",$f) if ($i<15);
|
||||
$code.=<<___ if ($i<15);
|
||||
lwz @X[$j],`$j*4`($inp)
|
||||
add $f,$K,$e
|
||||
rotlwi $e,$a,5
|
||||
add $f,$f,@X[$i]
|
||||
|
@ -9,8 +9,7 @@
|
||||
|
||||
# I let hardware handle unaligned input, except on page boundaries
|
||||
# (see below for details). Otherwise straightforward implementation
|
||||
# with X vector in register bank. The module is big-endian [which is
|
||||
# not big deal as there're no little-endian targets left around].
|
||||
# with X vector in register bank.
|
||||
|
||||
# sha256 | sha512
|
||||
# -m64 -m32 | -m64 -m32
|
||||
@ -56,6 +55,8 @@ if ($flavour =~ /64/) {
|
||||
$PUSH="stw";
|
||||
} else { die "nonsense $flavour"; }
|
||||
|
||||
$LITTLE_ENDIAN = ($flavour=~/le$/) ? $SIZE_T : 0;
|
||||
|
||||
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
||||
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
|
||||
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
|
||||
@ -229,7 +230,7 @@ ___
|
||||
} else {
|
||||
for ($i=16;$i<32;$i++) {
|
||||
$code.=<<___;
|
||||
lwz r$i,`4*($i-16)`($ctx)
|
||||
lwz r$i,`$LITTLE_ENDIAN^(4*($i-16))`($ctx)
|
||||
___
|
||||
}
|
||||
}
|
||||
@ -353,15 +354,32 @@ Lsha2_block_private:
|
||||
$LD $t1,0($Tbl)
|
||||
___
|
||||
for($i=0;$i<16;$i++) {
|
||||
$code.=<<___ if ($SZ==4);
|
||||
$code.=<<___ if ($SZ==4 && !$LITTLE_ENDIAN);
|
||||
lwz @X[$i],`$i*$SZ`($inp)
|
||||
___
|
||||
$code.=<<___ if ($SZ==4 && $LITTLE_ENDIAN);
|
||||
lwz $a0,`$i*$SZ`($inp)
|
||||
rotlwi @X[$i],$a0,8
|
||||
rlwimi @X[$i],$a0,24,0,7
|
||||
rlwimi @X[$i],$a0,24,16,23
|
||||
___
|
||||
# 64-bit loads are split to 2x32-bit ones, as CPU can't handle
|
||||
# unaligned 64-bit loads, only 32-bit ones...
|
||||
$code.=<<___ if ($SZ==8);
|
||||
$code.=<<___ if ($SZ==8 && !$LITTLE_ENDIAN);
|
||||
lwz $t0,`$i*$SZ`($inp)
|
||||
lwz @X[$i],`$i*$SZ+4`($inp)
|
||||
insrdi @X[$i],$t0,32,0
|
||||
___
|
||||
$code.=<<___ if ($SZ==8 && $LITTLE_ENDIAN);
|
||||
lwz $a0,`$i*$SZ`($inp)
|
||||
lwz $a1,`$i*$SZ+4`($inp)
|
||||
rotlwi $t0,$a0,8
|
||||
rotlwi @X[$i],$a1,8
|
||||
rlwimi $t0,$a0,24,0,7
|
||||
rlwimi @X[$i],$a1,24,0,7
|
||||
rlwimi $t0,$a0,24,16,23
|
||||
rlwimi @X[$i],$a1,24,16,23
|
||||
insrdi @X[$i],$t0,32,0
|
||||
___
|
||||
&ROUND_00_15($i,@V);
|
||||
unshift(@V,pop(@V));
|
||||
@ -445,9 +463,9 @@ my ($i, $ahi,$alo,$bhi,$blo,$chi,$clo,$dhi,$dlo,
|
||||
$ehi,$elo,$fhi,$flo,$ghi,$glo,$hhi,$hlo)=@_;
|
||||
|
||||
$code.=<<___;
|
||||
lwz $t2,`$SZ*($i%16)+4`($Tbl)
|
||||
lwz $t2,`$SZ*($i%16)+($LITTLE_ENDIAN^4)`($Tbl)
|
||||
xor $a0,$flo,$glo
|
||||
lwz $t3,`$SZ*($i%16)+0`($Tbl)
|
||||
lwz $t3,`$SZ*($i%16)+($LITTLE_ENDIAN^0)`($Tbl)
|
||||
xor $a1,$fhi,$ghi
|
||||
addc $hlo,$hlo,$t0 ; h+=x[i]
|
||||
stw $t0,`$XOFF+0+$SZ*($i%16)`($sp) ; save x[i]
|
||||
@ -510,10 +528,20 @@ $code.=<<___ if ($i>=15);
|
||||
lwz $t0,`$XOFF+0+$SZ*(($i+2)%16)`($sp)
|
||||
lwz $t1,`$XOFF+4+$SZ*(($i+2)%16)`($sp)
|
||||
___
|
||||
$code.=<<___ if ($i<15);
|
||||
$code.=<<___ if ($i<15 && !$LITTLE_ENDIAN);
|
||||
lwz $t1,`$SZ*($i+1)+0`($inp)
|
||||
lwz $t0,`$SZ*($i+1)+4`($inp)
|
||||
___
|
||||
$code.=<<___ if ($i<15 && $LITTLE_ENDIAN);
|
||||
lwz $a2,`$SZ*($i+1)+0`($inp)
|
||||
lwz $a3,`$SZ*($i+1)+4`($inp)
|
||||
rotlwi $t1,$a2,8
|
||||
rotlwi $t0,$a3,8
|
||||
rlwimi $t1,$a2,24,0,7
|
||||
rlwimi $t0,$a3,24,0,7
|
||||
rlwimi $t1,$a2,24,16,23
|
||||
rlwimi $t0,$a3,24,16,23
|
||||
___
|
||||
$code.=<<___;
|
||||
xor $s0,$s0,$t2 ; Sigma0(a)
|
||||
xor $s1,$s1,$t3
|
||||
@ -579,11 +607,25 @@ ___
|
||||
$code.=<<___;
|
||||
.align 4
|
||||
Lsha2_block_private:
|
||||
___
|
||||
$code.=<<___ if (!$LITTLE_ENDIAN);
|
||||
lwz $t1,0($inp)
|
||||
xor $a2,@V[3],@V[5] ; B^C, magic seed
|
||||
lwz $t0,4($inp)
|
||||
xor $a3,@V[2],@V[4]
|
||||
___
|
||||
$code.=<<___ if ($LITTLE_ENDIAN);
|
||||
lwz $a1,0($inp)
|
||||
xor $a2,@V[3],@V[5] ; B^C, magic seed
|
||||
lwz $a0,4($inp)
|
||||
xor $a3,@V[2],@V[4]
|
||||
rotlwi $t1,$a1,8
|
||||
rotlwi $t0,$a0,8
|
||||
rlwimi $t1,$a1,24,0,7
|
||||
rlwimi $t0,$a0,24,0,7
|
||||
rlwimi $t1,$a1,24,16,23
|
||||
rlwimi $t0,$a0,24,16,23
|
||||
___
|
||||
for($i=0;$i<16;$i++) {
|
||||
&ROUND_00_15_ppc32($i,@V);
|
||||
unshift(@V,pop(@V)); unshift(@V,pop(@V));
|
||||
@ -609,54 +651,54 @@ $code.=<<___;
|
||||
$POP $num,`$FRAME-$SIZE_T*24`($sp) ; end pointer
|
||||
subi $Tbl,$Tbl,`($rounds-16)*$SZ` ; rewind Tbl
|
||||
|
||||
lwz $t0,0($ctx)
|
||||
lwz $t1,4($ctx)
|
||||
lwz $t2,8($ctx)
|
||||
lwz $t3,12($ctx)
|
||||
lwz $a0,16($ctx)
|
||||
lwz $a1,20($ctx)
|
||||
lwz $a2,24($ctx)
|
||||
lwz $t0,`$LITTLE_ENDIAN^0`($ctx)
|
||||
lwz $t1,`$LITTLE_ENDIAN^4`($ctx)
|
||||
lwz $t2,`$LITTLE_ENDIAN^8`($ctx)
|
||||
lwz $t3,`$LITTLE_ENDIAN^12`($ctx)
|
||||
lwz $a0,`$LITTLE_ENDIAN^16`($ctx)
|
||||
lwz $a1,`$LITTLE_ENDIAN^20`($ctx)
|
||||
lwz $a2,`$LITTLE_ENDIAN^24`($ctx)
|
||||
addc @V[1],@V[1],$t1
|
||||
lwz $a3,28($ctx)
|
||||
lwz $a3,`$LITTLE_ENDIAN^28`($ctx)
|
||||
adde @V[0],@V[0],$t0
|
||||
lwz $t0,32($ctx)
|
||||
lwz $t0,`$LITTLE_ENDIAN^32`($ctx)
|
||||
addc @V[3],@V[3],$t3
|
||||
lwz $t1,36($ctx)
|
||||
lwz $t1,`$LITTLE_ENDIAN^36`($ctx)
|
||||
adde @V[2],@V[2],$t2
|
||||
lwz $t2,40($ctx)
|
||||
lwz $t2,`$LITTLE_ENDIAN^40`($ctx)
|
||||
addc @V[5],@V[5],$a1
|
||||
lwz $t3,44($ctx)
|
||||
lwz $t3,`$LITTLE_ENDIAN^44`($ctx)
|
||||
adde @V[4],@V[4],$a0
|
||||
lwz $a0,48($ctx)
|
||||
lwz $a0,`$LITTLE_ENDIAN^48`($ctx)
|
||||
addc @V[7],@V[7],$a3
|
||||
lwz $a1,52($ctx)
|
||||
lwz $a1,`$LITTLE_ENDIAN^52`($ctx)
|
||||
adde @V[6],@V[6],$a2
|
||||
lwz $a2,56($ctx)
|
||||
lwz $a2,`$LITTLE_ENDIAN^56`($ctx)
|
||||
addc @V[9],@V[9],$t1
|
||||
lwz $a3,60($ctx)
|
||||
lwz $a3,`$LITTLE_ENDIAN^60`($ctx)
|
||||
adde @V[8],@V[8],$t0
|
||||
stw @V[0],0($ctx)
|
||||
stw @V[1],4($ctx)
|
||||
stw @V[0],`$LITTLE_ENDIAN^0`($ctx)
|
||||
stw @V[1],`$LITTLE_ENDIAN^4`($ctx)
|
||||
addc @V[11],@V[11],$t3
|
||||
stw @V[2],8($ctx)
|
||||
stw @V[3],12($ctx)
|
||||
stw @V[2],`$LITTLE_ENDIAN^8`($ctx)
|
||||
stw @V[3],`$LITTLE_ENDIAN^12`($ctx)
|
||||
adde @V[10],@V[10],$t2
|
||||
stw @V[4],16($ctx)
|
||||
stw @V[5],20($ctx)
|
||||
stw @V[4],`$LITTLE_ENDIAN^16`($ctx)
|
||||
stw @V[5],`$LITTLE_ENDIAN^20`($ctx)
|
||||
addc @V[13],@V[13],$a1
|
||||
stw @V[6],24($ctx)
|
||||
stw @V[7],28($ctx)
|
||||
stw @V[6],`$LITTLE_ENDIAN^24`($ctx)
|
||||
stw @V[7],`$LITTLE_ENDIAN^28`($ctx)
|
||||
adde @V[12],@V[12],$a0
|
||||
stw @V[8],32($ctx)
|
||||
stw @V[9],36($ctx)
|
||||
stw @V[8],`$LITTLE_ENDIAN^32`($ctx)
|
||||
stw @V[9],`$LITTLE_ENDIAN^36`($ctx)
|
||||
addc @V[15],@V[15],$a3
|
||||
stw @V[10],40($ctx)
|
||||
stw @V[11],44($ctx)
|
||||
stw @V[10],`$LITTLE_ENDIAN^40`($ctx)
|
||||
stw @V[11],`$LITTLE_ENDIAN^44`($ctx)
|
||||
adde @V[14],@V[14],$a2
|
||||
stw @V[12],48($ctx)
|
||||
stw @V[13],52($ctx)
|
||||
stw @V[14],56($ctx)
|
||||
stw @V[15],60($ctx)
|
||||
stw @V[12],`$LITTLE_ENDIAN^48`($ctx)
|
||||
stw @V[13],`$LITTLE_ENDIAN^52`($ctx)
|
||||
stw @V[14],`$LITTLE_ENDIAN^56`($ctx)
|
||||
stw @V[15],`$LITTLE_ENDIAN^60`($ctx)
|
||||
|
||||
addi $inp,$inp,`16*$SZ` ; advance inp
|
||||
$PUSH $inp,`$FRAME-$SIZE_T*23`($sp)
|
||||
@ -685,46 +727,46 @@ LPICmeup:
|
||||
.space `64-9*4`
|
||||
___
|
||||
$code.=<<___ if ($SZ==8);
|
||||
.long 0x428a2f98,0xd728ae22,0x71374491,0x23ef65cd
|
||||
.long 0xb5c0fbcf,0xec4d3b2f,0xe9b5dba5,0x8189dbbc
|
||||
.long 0x3956c25b,0xf348b538,0x59f111f1,0xb605d019
|
||||
.long 0x923f82a4,0xaf194f9b,0xab1c5ed5,0xda6d8118
|
||||
.long 0xd807aa98,0xa3030242,0x12835b01,0x45706fbe
|
||||
.long 0x243185be,0x4ee4b28c,0x550c7dc3,0xd5ffb4e2
|
||||
.long 0x72be5d74,0xf27b896f,0x80deb1fe,0x3b1696b1
|
||||
.long 0x9bdc06a7,0x25c71235,0xc19bf174,0xcf692694
|
||||
.long 0xe49b69c1,0x9ef14ad2,0xefbe4786,0x384f25e3
|
||||
.long 0x0fc19dc6,0x8b8cd5b5,0x240ca1cc,0x77ac9c65
|
||||
.long 0x2de92c6f,0x592b0275,0x4a7484aa,0x6ea6e483
|
||||
.long 0x5cb0a9dc,0xbd41fbd4,0x76f988da,0x831153b5
|
||||
.long 0x983e5152,0xee66dfab,0xa831c66d,0x2db43210
|
||||
.long 0xb00327c8,0x98fb213f,0xbf597fc7,0xbeef0ee4
|
||||
.long 0xc6e00bf3,0x3da88fc2,0xd5a79147,0x930aa725
|
||||
.long 0x06ca6351,0xe003826f,0x14292967,0x0a0e6e70
|
||||
.long 0x27b70a85,0x46d22ffc,0x2e1b2138,0x5c26c926
|
||||
.long 0x4d2c6dfc,0x5ac42aed,0x53380d13,0x9d95b3df
|
||||
.long 0x650a7354,0x8baf63de,0x766a0abb,0x3c77b2a8
|
||||
.long 0x81c2c92e,0x47edaee6,0x92722c85,0x1482353b
|
||||
.long 0xa2bfe8a1,0x4cf10364,0xa81a664b,0xbc423001
|
||||
.long 0xc24b8b70,0xd0f89791,0xc76c51a3,0x0654be30
|
||||
.long 0xd192e819,0xd6ef5218,0xd6990624,0x5565a910
|
||||
.long 0xf40e3585,0x5771202a,0x106aa070,0x32bbd1b8
|
||||
.long 0x19a4c116,0xb8d2d0c8,0x1e376c08,0x5141ab53
|
||||
.long 0x2748774c,0xdf8eeb99,0x34b0bcb5,0xe19b48a8
|
||||
.long 0x391c0cb3,0xc5c95a63,0x4ed8aa4a,0xe3418acb
|
||||
.long 0x5b9cca4f,0x7763e373,0x682e6ff3,0xd6b2b8a3
|
||||
.long 0x748f82ee,0x5defb2fc,0x78a5636f,0x43172f60
|
||||
.long 0x84c87814,0xa1f0ab72,0x8cc70208,0x1a6439ec
|
||||
.long 0x90befffa,0x23631e28,0xa4506ceb,0xde82bde9
|
||||
.long 0xbef9a3f7,0xb2c67915,0xc67178f2,0xe372532b
|
||||
.long 0xca273ece,0xea26619c,0xd186b8c7,0x21c0c207
|
||||
.long 0xeada7dd6,0xcde0eb1e,0xf57d4f7f,0xee6ed178
|
||||
.long 0x06f067aa,0x72176fba,0x0a637dc5,0xa2c898a6
|
||||
.long 0x113f9804,0xbef90dae,0x1b710b35,0x131c471b
|
||||
.long 0x28db77f5,0x23047d84,0x32caab7b,0x40c72493
|
||||
.long 0x3c9ebe0a,0x15c9bebc,0x431d67c4,0x9c100d4c
|
||||
.long 0x4cc5d4be,0xcb3e42b6,0x597f299c,0xfc657e2a
|
||||
.long 0x5fcb6fab,0x3ad6faec,0x6c44198c,0x4a475817
|
||||
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
|
||||
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
|
||||
.quad 0x3956c25bf348b538,0x59f111f1b605d019
|
||||
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
|
||||
.quad 0xd807aa98a3030242,0x12835b0145706fbe
|
||||
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
|
||||
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
|
||||
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
|
||||
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
|
||||
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
|
||||
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
|
||||
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
|
||||
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
|
||||
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
|
||||
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
|
||||
.quad 0x06ca6351e003826f,0x142929670a0e6e70
|
||||
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
|
||||
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
|
||||
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
|
||||
.quad 0x81c2c92e47edaee6,0x92722c851482353b
|
||||
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
|
||||
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
|
||||
.quad 0xd192e819d6ef5218,0xd69906245565a910
|
||||
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
|
||||
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
|
||||
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
|
||||
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
|
||||
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
|
||||
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
|
||||
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
|
||||
.quad 0x90befffa23631e28,0xa4506cebde82bde9
|
||||
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
|
||||
.quad 0xca273eceea26619c,0xd186b8c721c0c207
|
||||
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
|
||||
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
|
||||
.quad 0x113f9804bef90dae,0x1b710b35131c471b
|
||||
.quad 0x28db77f523047d84,0x32caab7b40c72493
|
||||
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
|
||||
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
|
||||
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
|
||||
___
|
||||
$code.=<<___ if ($SZ==4);
|
||||
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
|
||||
|
Loading…
x
Reference in New Issue
Block a user