s390x assembler pack: extend OPENSSL_s390xcap_P to 128 bits.
authorAndy Polyakov <appro@openssl.org>
Sat, 18 Sep 2010 08:46:53 +0000 (08:46 +0000)
committerAndy Polyakov <appro@openssl.org>
Sat, 18 Sep 2010 08:46:53 +0000 (08:46 +0000)
crypto/aes/asm/aes-s390x.pl
crypto/s390xcap.c
crypto/s390xcpuid.S
crypto/sha/asm/sha1-s390x.pl
crypto/sha/asm/sha512-s390x.pl

index 5ffacb8cf4616a5a6baefd59e426f47866d4d34a..4be64e3e512f23ce2d25d4e4c1cae0a68144e8a0 100644 (file)
@@ -1485,7 +1485,7 @@ $code.=<<___;
 ___
 }
 $code.=<<___;
-.comm  OPENSSL_s390xcap_P,8,8
+.comm  OPENSSL_s390xcap_P,16,8
 .string        "AES for s390x, CRYPTOGAMS by <appro\@openssl.org>"
 ___
 
index ffbe0235f996214099aba8fdef2c7d1758e8a85c..f2e94ef47e83cd125759df5d38b8de81a612f268 100644 (file)
@@ -4,7 +4,7 @@
 #include <setjmp.h>
 #include <signal.h>
 
-extern unsigned long OPENSSL_s390xcap_P;
+extern unsigned long OPENSSL_s390xcap_P[];
 
 static sigjmp_buf ill_jmp;
 static void ill_handler (int sig) { siglongjmp(ill_jmp,sig); }
@@ -16,7 +16,9 @@ void OPENSSL_cpuid_setup(void)
        sigset_t oset;
        struct sigaction ill_act,oact;
 
-       if (OPENSSL_s390xcap_P) return;
+       if (OPENSSL_s390xcap_P[0]) return;
+
+       OPENSSL_s390xcap_P[0] = 1UL<<(8*sizeof(unsigned long)-1);
 
        memset(&ill_act,0,sizeof(ill_act));
        ill_act.sa_handler = ill_handler;
@@ -27,10 +29,8 @@ void OPENSSL_cpuid_setup(void)
        sigaction (SIGILL,&ill_act,&oact);
 
        /* protection against missing store-facility-list-extended */
-       if (sigsetjmp(ill_jmp,0) == 0)
-               OPENSSL_s390xcap_P = OPENSSL_s390x_facilities();
-       else
-               OPENSSL_s390xcap_P = 1UL<<63;
+       if (sigsetjmp(ill_jmp,1) == 0)
+               OPENSSL_s390x_facilities();
 
        sigaction (SIGILL,&oact,NULL);
        sigprocmask(SIG_SETMASK,&oset,NULL);
index b053c6a28190ca4d4c83b74b6b4b603efb184d6d..82312d8b4e9e903e127493e977095d6822fd3839 100644 (file)
@@ -5,10 +5,14 @@
 .align 16
 OPENSSL_s390x_facilities:
        lghi    %r0,0
-       .long   0xb2b0f010      # stfle 16(%r15)
-       lg      %r2,16(%r15)
-       larl    %r1,OPENSSL_s390xcap_P
-       stg     %r2,0(%r1)
+       larl    %r2,OPENSSL_s390xcap_P
+       stg     %r0,8(%r2)
+       .long   0xb2b02000      # stfle 0(%r2)
+       brc     8,.Ldone
+       lghi    %r0,1
+       .long   0xb2b02000      # stfle 0(%r2)
+.Ldone:
+       lg      %r2,0(%r2)
        br      %r14
 .size  OPENSSL_s390x_facilities,.-OPENSSL_s390x_facilities
 
@@ -89,4 +93,4 @@ OPENSSL_cleanse:
 .section       .init
        brasl   %r14,OPENSSL_cpuid_setup
 
-.comm  OPENSSL_s390xcap_P,8,8
+.comm  OPENSSL_s390xcap_P,16,8
index 659afffc08da462232ae675129419d6e91ff6ae5..0e38f8e36d4b7187780a3005834a9031505849ee 100644 (file)
@@ -217,7 +217,7 @@ $code.=<<___;
        br      %r14
 .size  sha1_block_data_order,.-sha1_block_data_order
 .string        "SHA1 block transform for s390x, CRYPTOGAMS by <appro\@openssl.org>"
-.comm  OPENSSL_s390xcap_P,8,8
+.comm  OPENSSL_s390xcap_P,16,8
 ___
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;
index 9d68215e2bed82c6f7e6c79a8b1a5be483b9d1fc..3a358a486092a6d43a3d9491cdb7313f413f436a 100644 (file)
@@ -290,7 +290,7 @@ $code.=<<___;
        br      %r14
 .size  $Func,.-$Func
 .string        "SHA${label} block transform for s390x, CRYPTOGAMS by <appro\@openssl.org>"
-.comm  OPENSSL_s390xcap_P,8,8
+.comm  OPENSSL_s390xcap_P,16,8
 ___
 
 $code =~ s/\`([^\`]*)\`/eval $1/gem;