Commit 90ba3a28 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

s390x assembler pack: extend OPENSSL_s390xcap_P to 128 bits.

parent bc9092f7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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>"
___

+6 −6
Original line number Diff line number Diff line
@@ -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);
+9 −5
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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;