s390x assembly pack: update perlasm module
Add non-base instructions which are used by the chacha20 and poly1305 modules. Signed-off-by: Patrick Steuer <patrick.steuer@de.ibm.com> Reviewed-by: Paul Dale <paul.dale@oracle.com> Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/8181)
This commit is contained in:
parent
11aad86285
commit
3062468b0a
1 changed files with 84 additions and 2 deletions
|
@ -6,23 +6,37 @@
|
||||||
# in the file LICENSE in the source distribution or at
|
# in the file LICENSE in the source distribution or at
|
||||||
# https://www.openssl.org/source/license.html
|
# https://www.openssl.org/source/license.html
|
||||||
|
|
||||||
# Copyright IBM Corp. 2018
|
# Copyright IBM Corp. 2018-2019
|
||||||
# Author: Patrick Steuer <patrick.steuer@de.ibm.com>
|
# Author: Patrick Steuer <patrick.steuer@de.ibm.com>
|
||||||
|
|
||||||
package perlasm::s390x;
|
package perlasm::s390x;
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
use bigint;
|
||||||
use Carp qw(confess);
|
use Carp qw(confess);
|
||||||
use Exporter qw(import);
|
use Exporter qw(import);
|
||||||
|
|
||||||
our @EXPORT=qw(PERLASM_BEGIN PERLASM_END);
|
our @EXPORT=qw(PERLASM_BEGIN PERLASM_END);
|
||||||
our @EXPORT_OK=qw(AUTOLOAD LABEL INCLUDE stfle);
|
our @EXPORT_OK=qw(AUTOLOAD LABEL INCLUDE stfle);
|
||||||
our %EXPORT_TAGS=(
|
our %EXPORT_TAGS=(
|
||||||
|
# long-displacement facility
|
||||||
|
LD => [qw(clgfi)],
|
||||||
|
# general-instruction-extension facility
|
||||||
|
GE => [qw(risbg)],
|
||||||
|
# extended-immediate facility
|
||||||
|
EI => [qw(lt)],
|
||||||
|
# miscellaneous-instruction-extensions facility 1
|
||||||
|
MI1 => [qw(risbgn)],
|
||||||
|
# message-security assist
|
||||||
MSA => [qw(kmac km kmc kimd klmd)],
|
MSA => [qw(kmac km kmc kimd klmd)],
|
||||||
|
# message-security-assist extension 4
|
||||||
MSA4 => [qw(kmf kmo pcc kmctr)],
|
MSA4 => [qw(kmf kmo pcc kmctr)],
|
||||||
|
# message-security-assist extension 5
|
||||||
MSA5 => [qw(ppno prno)],
|
MSA5 => [qw(ppno prno)],
|
||||||
|
# message-security-assist extension 8
|
||||||
MSA8 => [qw(kma)],
|
MSA8 => [qw(kma)],
|
||||||
|
# vector facility
|
||||||
VX => [qw(vgef vgeg vgbm vzero vone vgm vgmb vgmh vgmf vgmg
|
VX => [qw(vgef vgeg vgbm vzero vone vgm vgmb vgmh vgmf vgmg
|
||||||
vl vlr vlrep vlrepb vlreph vlrepf vlrepg vleb vleh vlef vleg vleib
|
vl vlr vlrep vlrepb vlreph vlrepf vlrepg vleb vleh vlef vleg vleib
|
||||||
vleih vleif vleig vlgv vlgvb vlgvh vlgvf vlgvg vllez vllezb vllezh
|
vleih vleif vleig vlgv vlgvb vlgvh vlgvf vlgvg vllez vllezb vllezh
|
||||||
|
@ -71,6 +85,7 @@ our %EXPORT_TAGS=(
|
||||||
wfmadb vfms vfmsdb wfmsdb vfpso vfpsodb wfpsodb vflcdb wflcdb
|
wfmadb vfms vfmsdb wfmsdb vfpso vfpsodb wfpsodb vflcdb wflcdb
|
||||||
vflndb wflndb vflpdb wflpdb vfsq vfsqdb wfsqdb vfs vfsdb wfsdb
|
vflndb wflndb vflpdb wflpdb vfsq vfsqdb wfsqdb vfs vfsdb wfsdb
|
||||||
vftci vftcidb wftcidb)],
|
vftci vftcidb wftcidb)],
|
||||||
|
# vector-enhancements facility 1
|
||||||
VXE => [qw(vbperm vllezlf vmsl vmslg vnx vnn voc vpopctb vpopcth
|
VXE => [qw(vbperm vllezlf vmsl vmslg vnx vnn voc vpopctb vpopcth
|
||||||
vpopctf vpopctg vfasb wfasb wfaxb wfcsb wfcxb wfksb wfkxb vfcesb
|
vpopctf vpopctg vfasb wfasb wfaxb wfcsb wfcxb wfksb wfkxb vfcesb
|
||||||
vfcesbs wfcesb wfcesbs wfcexb wfcexbs vfchsb vfchsbs wfchsb wfchsbs
|
vfcesbs wfcesb wfcesbs wfcexb wfcexbs vfchsb vfchsbs wfchsb wfchsbs
|
||||||
|
@ -83,10 +98,11 @@ our %EXPORT_TAGS=(
|
||||||
wfnmsxb vfpsosb wfpsosb vflcsb wflcsb vflnsb wflnsb vflpsb wflpsb
|
wfnmsxb vfpsosb wfpsosb vflcsb wflcsb vflnsb wflnsb vflpsb wflpsb
|
||||||
vfpsoxb wfpsoxb vflcxb wflcxb vflnxb wflnxb vflpxb wflpxb vfsqsb
|
vfpsoxb wfpsoxb vflcxb wflcxb vflnxb wflnxb vflpxb wflpxb vfsqsb
|
||||||
wfsqsb wfsqxb vfssb wfssb wfsxb vftcisb wftcisb wftcixb)],
|
wfsqsb wfsqxb vfssb wfssb wfsxb vftcisb wftcisb wftcixb)],
|
||||||
|
# vector-packed-decimal facility
|
||||||
VXD => [qw(vlrlr vlrl vstrlr vstrl vap vcp vcvb vcvbg vcvd vcvdg vdp
|
VXD => [qw(vlrlr vlrl vstrlr vstrl vap vcp vcvb vcvbg vcvd vcvdg vdp
|
||||||
vlip vmp vmsp vpkz vpsop vrp vsdp vsrp vsp vtp vupkz)],
|
vlip vmp vmsp vpkz vpsop vrp vsdp vsrp vsp vtp vupkz)],
|
||||||
);
|
);
|
||||||
Exporter::export_ok_tags(qw(MSA MSA4 MSA5 MSA8 VX VXE VXD));
|
Exporter::export_ok_tags(qw(LD GE EI MI1 MSA MSA4 MSA5 MSA8 VX VXE VXD));
|
||||||
|
|
||||||
our $AUTOLOAD;
|
our $AUTOLOAD;
|
||||||
|
|
||||||
|
@ -143,6 +159,28 @@ sub stfle {
|
||||||
S(0xb2b0,@_);
|
S(0xb2b0,@_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# MISC
|
||||||
|
|
||||||
|
sub clgfi {
|
||||||
|
confess(err("ARGNUM")) if ($#_!=1);
|
||||||
|
RILa(0xc2e,@_);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub lt {
|
||||||
|
confess(err("ARGNUM")) if ($#_!=1);
|
||||||
|
RXYa(0xe312,@_);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub risbg {
|
||||||
|
confess(err("ARGNUM")) if ($#_<3||$#_>4);
|
||||||
|
RIEf(0xec55,@_);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub risbgn {
|
||||||
|
confess(err("ARGNUM")) if ($#_<3||$#_>4);
|
||||||
|
RIEf(0xec59,@_);
|
||||||
|
}
|
||||||
|
|
||||||
# MSA
|
# MSA
|
||||||
|
|
||||||
sub kmac {
|
sub kmac {
|
||||||
|
@ -2486,6 +2524,36 @@ sub vupkz {
|
||||||
# Instruction Formats
|
# Instruction Formats
|
||||||
#
|
#
|
||||||
|
|
||||||
|
sub RIEf {
|
||||||
|
confess(err("ARGNUM")) if ($#_<4||5<$#_);
|
||||||
|
my $ops=join(',',@_[1..$#_]);
|
||||||
|
my $memn=(caller(1))[3];
|
||||||
|
$memn=~s/^.*:://;
|
||||||
|
my ($opcode,$r1,$r2,$i3,$i4,$i5)=(shift,get_R(shift),get_R(shift),
|
||||||
|
get_I(shift,8),get_I(shift,8),
|
||||||
|
get_I(shift,8));
|
||||||
|
|
||||||
|
$out.="\t.word\t";
|
||||||
|
$out.=sprintf("%#06x",(($opcode>>8)<<8|$r1<<4|$r2)).",";
|
||||||
|
$out.=sprintf("%#06x",($i3<<8)|$i4).",";
|
||||||
|
$out.=sprintf("%#06x",($i5<<8)|($opcode&0xff));
|
||||||
|
$out.="\t# $memn\t$ops\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
sub RILa {
|
||||||
|
confess(err("ARGNUM")) if ($#_!=2);
|
||||||
|
my $ops=join(',',@_[1..$#_]);
|
||||||
|
my $memn=(caller(1))[3];
|
||||||
|
$memn=~s/^.*:://;
|
||||||
|
my ($opcode,$r1,$i2)=(shift,get_R(shift),get_I(shift,32));
|
||||||
|
|
||||||
|
$out.="\t.word\t";
|
||||||
|
$out.=sprintf("%#06x",(($opcode>>4)<<8|$r1<<4|($opcode&0xf))).",";
|
||||||
|
$out.=sprintf("%#06x",($i2>>16)).",";
|
||||||
|
$out.=sprintf("%#06x",($i2&0xffff));
|
||||||
|
$out.="\t# $memn\t$ops\n"
|
||||||
|
}
|
||||||
|
|
||||||
sub RRE {
|
sub RRE {
|
||||||
confess(err("ARGNUM")) if ($#_<0||2<$#_);
|
confess(err("ARGNUM")) if ($#_<0||2<$#_);
|
||||||
my $ops=join(',',@_[1..$#_]);
|
my $ops=join(',',@_[1..$#_]);
|
||||||
|
@ -2510,6 +2578,20 @@ sub RRFb {
|
||||||
$out.="\t# $memn\t$ops\n"
|
$out.="\t# $memn\t$ops\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub RXYa {
|
||||||
|
confess(err("ARGNUM")) if ($#_!=2);
|
||||||
|
my $ops=join(',',@_[1..$#_]);
|
||||||
|
my $memn=(caller(1))[3];
|
||||||
|
$memn=~s/^.*:://;
|
||||||
|
my ($opcode,$r1,$d2,$x2,$b2)=(shift,get_R(shift),get_DXB(shift));
|
||||||
|
|
||||||
|
$out.="\t.word\t";
|
||||||
|
$out.=sprintf("%#06x",(($opcode>>8)<<8|$r1<<4|$x2)).",";
|
||||||
|
$out.=sprintf("%#06x",($b2<<12|($d2&0xfff))).",";
|
||||||
|
$out.=sprintf("%#06x",(($d2>>12)<<8|$opcode&0xff));
|
||||||
|
$out.="\t# $memn\t$ops\n"
|
||||||
|
}
|
||||||
|
|
||||||
sub S {
|
sub S {
|
||||||
confess(err("ARGNUM")) if ($#_<0||1<$#_);
|
confess(err("ARGNUM")) if ($#_<0||1<$#_);
|
||||||
my $ops=join(',',@_[1..$#_]);
|
my $ops=join(',',@_[1..$#_]);
|
||||||
|
|
Loading…
Reference in a new issue