Commit 7d1f55e9 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

Add ghash-s390x.pl.

parent d52d5ad1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-
my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o::::::::::::void";
my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o:::::sha1-alpha.o:::::::ghash-alpha.o:void";
my $mips3_asm=":bn-mips3.o:::::::::::::void";
my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o::aes_ctr.o aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o::::::void";
my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o::aes_ctr.o aes-s390x.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::ghash-s390x.o:void";
my $armv4_asm=":bn_asm.o armv4-mont.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o:void";
my $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o:32";
my $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o:64";
+2 −2
Original line number Diff line number Diff line
@@ -1506,7 +1506,7 @@ $multilib =

*** debug-ben-debug
$cc           = gcc
$cflags       = -Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED -DBN_DEBUG -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -g3 -O2 -pipe
$cflags       = -Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -g3 -O2 -pipe
$unistd       = 
$thread_cflag = (unknown)
$sys_id       = 
@@ -3893,7 +3893,7 @@ $rmd160_obj =
$rc5_obj      = 
$wp_obj       = 
$cmll_obj     = 
$modes_obj    = 
$modes_obj    = ghash-s390x.o
$perlasm_scheme = void
$dso_scheme   = dlfcn
$shared_target= linux-shared
+171 −0
Original line number Diff line number Diff line
#!/usr/bin/env perl

# ====================================================================
# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
# ====================================================================

# September 2010.

while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
open STDOUT,">$output";

$Zhi="%r0";
$Zlo="%r1";

$Xi="%r2";	# argument block
$Htbl="%r3";
$inp="%r4";
$len="%r5";

$rem0="%r6";	# variables
$rem1="%r7";
$nlo="%r8";
$nhi="%r9";
$xi="%r10";
$cnt="%r11";
$tmp="%r12";
$x78="%r13";
$rem_4bit="%r14";

$sp="%r15";

$code.=<<___;
.text

.globl	gcm_gmult_4bit
.align	32
gcm_gmult_4bit:
	stmg	%r6,%r14,48($sp)

	aghi	$Xi,-1
	lghi	$len,1
	lghi	$x78,`0xf<<3`
	larl	$rem_4bit,rem_4bit

	lg	$Zlo,8+1($Xi)		# Xi
	j	.Lgmult_shortcut
.type	gcm_gmult_4bit,\@function
.size	gcm_gmult_4bit,(.-gcm_gmult_4bit)

.globl	gcm_ghash_4bit
.align	32
gcm_ghash_4bit:
	stmg	%r6,%r14,48($sp)

	aghi	$Xi,-1
	srlg	$len,$len,4
	lghi	$x78,`0xf<<3`
	larl	$rem_4bit,rem_4bit

	lg	$Zlo,8+1($Xi)		# Xi
	lg	$Zhi,0+1($Xi)
.Louter:
	xg	$Zlo,8($inp)		# Xi ^= inp 
	xg	$Zhi,0($inp)
	stg	$Zlo,8+1($Xi)
	stg	$Zhi,0+1($Xi)

.Lgmult_shortcut:
	lghi	$tmp,0xff
	srlg	$xi,$Zlo,8		# extract first two bytes
	lgr	$nhi,$Zlo
	ngr	$xi,$tmp
	ngr	$nhi,$tmp

	sllg	$nlo,$nhi,4
	nill	$nhi,0xf0
	nill	$nlo,0xf0
	lghi	$cnt,14

	lg	$Zlo,8($nlo,$Htbl)
	lg	$Zhi,0($nlo,$Htbl)

	sllg	$nlo,$xi,4
	nill	$xi,0xf0
	sllg	$rem0,$Zlo,3
	nill	$nlo,0xf0

	srlg	$Zlo,$Zlo,4
	ngr	$rem0,$x78
	sllg	$tmp,$Zhi,60
	xg	$Zlo,8($nhi,$Htbl)
	srlg	$Zhi,$Zhi,4
	xgr	$Zlo,$tmp
	xg	$Zhi,0($nhi,$Htbl)
	lgr	$nhi,$xi
	sllg	$rem1,$Zlo,3

.Lghash_inner:
	srlg	$Zlo,$Zlo,4
	ngr	$rem1,$x78
	xg	$Zlo,8($nlo,$Htbl)
	sllg	$tmp,$Zhi,60
	xg	$Zhi,0($rem0,$rem_4bit)
	xgr	$Zlo,$tmp
	srlg	$Zhi,$Zhi,4
	llgc	$xi,0($cnt,$Xi)
	sllg	$rem0,$Zlo,3
	xg	$Zhi,0($nlo,$Htbl)
	sllg	$nlo,$xi,4
	nill	$xi,0xf0
	nill	$nlo,0xf0

	srlg	$Zlo,$Zlo,4
	ngr	$rem0,$x78
	xg	$Zlo,8($nhi,$Htbl)
	sllg	$tmp,$Zhi,60
	xg	$Zhi,0($rem1,$rem_4bit)
	xgr	$Zlo,$tmp
	srlg	$Zhi,$Zhi,4
	sllg	$rem1,$Zlo,3
	xg	$Zhi,0($nhi,$Htbl)
	lgr	$nhi,$xi
	brct	$cnt,.Lghash_inner

	srlg	$Zlo,$Zlo,4
	ngr	$rem1,$x78
	xg	$Zlo,8($nlo,$Htbl)
	sllg	$tmp,$Zhi,60
	xg	$Zhi,0($rem0,$rem_4bit)
	xgr	$Zlo,$tmp
	srlg	$Zhi,$Zhi,4
	sllg	$rem0,$Zlo,3
	xg	$Zhi,0($nlo,$Htbl)

	srlg	$Zlo,$Zlo,4
	ngr	$rem0,$x78
	xg	$Zhi,0($rem1,$rem_4bit)
	sllg	$tmp,$Zhi,60
	xg	$Zlo,8($nhi,$Htbl)
	srlg	$Zhi,$Zhi,4
	xgr	$Zlo,$tmp
	xg	$Zhi,0($nhi,$Htbl)

	la	$inp,16($inp)
	xg	$Zhi,0($rem0,$rem_4bit)
	brctg	$len,.Louter

	stg	$Zlo,8+1($Xi)
	stg	$Zhi,0+1($Xi)
	lmg	%r6,%r14,48($sp)
	br	%r14
.type	gcm_ghash_4bit,\@function
.size	gcm_ghash_4bit,(.-gcm_ghash_4bit)

.align	64
rem_4bit:
	.long	`0x0000<<16`,0,`0x1C20<<16`,0,`0x3840<<16`,0,`0x2460<<16`,0
	.long	`0x7080<<16`,0,`0x6CA0<<16`,0,`0x48C0<<16`,0,`0x54E0<<16`,0
	.long	`0xE100<<16`,0,`0xFD20<<16`,0,`0xD940<<16`,0,`0xC560<<16`,0
	.long	`0x9180<<16`,0,`0x8DA0<<16`,0,`0xA9C0<<16`,0,`0xB5E0<<16`,0
.type	rem_4bit,\@object
.size	rem_4bit,(.-rem_4bit)
.string	"GHASH for s390x, CRYPTOGAMS by <appro\@openssl.org>"
___

$code =~ s/\`([^\`]*)\`/eval $1/gem;
print $code;
close STDOUT;