PPC assebmly pack: initial POWER9 support tidbits.
Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
parent
b9077d85b0
commit
e0e532823f
@ -207,6 +207,21 @@ my $mtsle = sub {
|
|||||||
" .long ".sprintf "0x%X",(31<<26)|($arg<<21)|(147*2);
|
" .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=<>) {
|
while($line=<>) {
|
||||||
|
|
||||||
$line =~ s|[#!;].*$||; # get rid of asm-style comments...
|
$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_ALTIVEC (1<<1)
|
||||||
# define PPC_CRYPTO207 (1<<2)
|
# define PPC_CRYPTO207 (1<<2)
|
||||||
# define PPC_FPU (1<<3)
|
# define PPC_FPU (1<<3)
|
||||||
|
# define PPC_MADD300 (1<<4)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -151,6 +151,7 @@ static unsigned long (*getauxval) (unsigned long) = NULL;
|
|||||||
|
|
||||||
#define HWCAP2 26 /* AT_HWCAP2 */
|
#define HWCAP2 26 /* AT_HWCAP2 */
|
||||||
#define HWCAP_VEC_CRYPTO (1U << 25)
|
#define HWCAP_VEC_CRYPTO (1U << 25)
|
||||||
|
#define HWCAP_ARCH_3_00 (1U << 23)
|
||||||
|
|
||||||
# if defined(__GNUC__) && __GNUC__>=2
|
# if defined(__GNUC__) && __GNUC__>=2
|
||||||
__attribute__ ((constructor))
|
__attribute__ ((constructor))
|
||||||
@ -208,6 +209,9 @@ void OPENSSL_cpuid_setup(void)
|
|||||||
if (__power_set(0xffffffffU<<16)) /* POWER8 and later */
|
if (__power_set(0xffffffffU<<16)) /* POWER8 and later */
|
||||||
OPENSSL_ppccap_P |= PPC_CRYPTO207;
|
OPENSSL_ppccap_P |= PPC_CRYPTO207;
|
||||||
|
|
||||||
|
if (__power_set(0xffffffffU<<17)) /* POWER9 and later */
|
||||||
|
OPENSSL_ppccap_P |= PPC_MADD300;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
@ -236,6 +240,10 @@ void OPENSSL_cpuid_setup(void)
|
|||||||
OPENSSL_ppccap_P |= PPC_CRYPTO207;
|
OPENSSL_ppccap_P |= PPC_CRYPTO207;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hwcap & HWCAP_ARCH_3_00) {
|
||||||
|
OPENSSL_ppccap_P |= PPC_MADD300;
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
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);
|
sigaction(SIGILL, &ill_oact, NULL);
|
||||||
sigprocmask(SIG_SETMASK, &oset, NULL);
|
sigprocmask(SIG_SETMASK, &oset, NULL);
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,16 @@ $code=<<___;
|
|||||||
.byte 0,12,0x14,0,0,0,0,0
|
.byte 0,12,0x14,0,0,0,0,0
|
||||||
.size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe
|
.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
|
.globl .OPENSSL_wipe_cpu
|
||||||
.align 4
|
.align 4
|
||||||
.OPENSSL_wipe_cpu:
|
.OPENSSL_wipe_cpu:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user