PPC assebmly pack: initial POWER9 support tidbits.
Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
b9077d85b0
commit
e0e532823f
4 changed files with 39 additions and 0 deletions
|
@ -207,6 +207,21 @@ my $mtsle = sub {
|
|||
" .long ".sprintf "0x%X",(31<<26)|($arg<<21)|(147*2);
|
||||
};
|
||||
|
||||
# PowerISA 3.0 stuff
|
||||
my $maddhdu = sub {
|
||||
my ($f, $rt, $ra, $rb, $rc) = @_;
|
||||
" .long ".sprintf "0x%X",(4<<26)|($rt<<21)|($ra<<16)|($rb<<11)|($rc<<6)|49;
|
||||
};
|
||||
my $maddld = sub {
|
||||
my ($f, $rt, $ra, $rb, $rc) = @_;
|
||||
" .long ".sprintf "0x%X",(4<<26)|($rt<<21)|($ra<<16)|($rb<<11)|($rc<<6)|51;
|
||||
};
|
||||
|
||||
my $darn = sub {
|
||||
my ($f, $rt, $l) = @_;
|
||||
" .long ".sprintf "0x%X",(31<<26)|($rt<<21)|($l<<16)|(755<<1);
|
||||
};
|
||||
|
||||
while($line=<>) {
|
||||
|
||||
$line =~ s|[#!;].*$||; # get rid of asm-style comments...
|
||||
|
|
|
@ -12,5 +12,6 @@ extern unsigned int OPENSSL_ppccap_P;
|
|||
# define PPC_ALTIVEC (1<<1)
|
||||
# define PPC_CRYPTO207 (1<<2)
|
||||
# define PPC_FPU (1<<3)
|
||||
# define PPC_MADD300 (1<<4)
|
||||
|
||||
#endif
|
||||
|
|
|
@ -151,6 +151,7 @@ static unsigned long (*getauxval) (unsigned long) = NULL;
|
|||
|
||||
#define HWCAP2 26 /* AT_HWCAP2 */
|
||||
#define HWCAP_VEC_CRYPTO (1U << 25)
|
||||
#define HWCAP_ARCH_3_00 (1U << 23)
|
||||
|
||||
# if defined(__GNUC__) && __GNUC__>=2
|
||||
__attribute__ ((constructor))
|
||||
|
@ -208,6 +209,9 @@ void OPENSSL_cpuid_setup(void)
|
|||
if (__power_set(0xffffffffU<<16)) /* POWER8 and later */
|
||||
OPENSSL_ppccap_P |= PPC_CRYPTO207;
|
||||
|
||||
if (__power_set(0xffffffffU<<17)) /* POWER9 and later */
|
||||
OPENSSL_ppccap_P |= PPC_MADD300;
|
||||
|
||||
return;
|
||||
# endif
|
||||
#endif
|
||||
|
@ -236,6 +240,10 @@ void OPENSSL_cpuid_setup(void)
|
|||
OPENSSL_ppccap_P |= PPC_CRYPTO207;
|
||||
}
|
||||
|
||||
if (hwcap & HWCAP_ARCH_3_00) {
|
||||
OPENSSL_ppccap_P |= PPC_MADD300;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -285,6 +293,11 @@ void OPENSSL_cpuid_setup(void)
|
|||
}
|
||||
}
|
||||
|
||||
if (sigsetjmp(ill_jmp, 1) == 0) {
|
||||
OPENSSL_madd300_probe();
|
||||
OPENSSL_ppccap_P |= PPC_MADD300;
|
||||
}
|
||||
|
||||
sigaction(SIGILL, &ill_oact, NULL);
|
||||
sigprocmask(SIG_SETMASK, &oset, NULL);
|
||||
}
|
||||
|
|
|
@ -60,6 +60,16 @@ $code=<<___;
|
|||
.byte 0,12,0x14,0,0,0,0,0
|
||||
.size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe
|
||||
|
||||
.globl .OPENSSL_madd300_probe
|
||||
.align 4
|
||||
.OPENSSL_madd300_probe:
|
||||
xor r0,r0,r0
|
||||
maddld r3,r0,r0,r0
|
||||
maddhdu r3,r0,r0,r0
|
||||
blr
|
||||
.long 0
|
||||
.byte 0,12,0x14,0,0,0,0,0
|
||||
|
||||
.globl .OPENSSL_wipe_cpu
|
||||
.align 4
|
||||
.OPENSSL_wipe_cpu:
|
||||
|
|
Loading…
Reference in a new issue