Loading crypto/perlasm/ppc-xlate.pl +15 −0 Original line number Diff line number Diff line Loading @@ -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... Loading crypto/ppc_arch.h +1 −0 Original line number Diff line number Diff line Loading @@ -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 crypto/ppccap.c +13 −0 Original line number Diff line number Diff line Loading @@ -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)) Loading Loading @@ -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 Loading Loading @@ -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; } Loading Loading @@ -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); } crypto/ppccpuid.pl +10 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
crypto/perlasm/ppc-xlate.pl +15 −0 Original line number Diff line number Diff line Loading @@ -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... Loading
crypto/ppc_arch.h +1 −0 Original line number Diff line number Diff line Loading @@ -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
crypto/ppccap.c +13 −0 Original line number Diff line number Diff line Loading @@ -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)) Loading Loading @@ -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 Loading Loading @@ -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; } Loading Loading @@ -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); }
crypto/ppccpuid.pl +10 −0 Original line number Diff line number Diff line Loading @@ -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