summaryrefslogtreecommitdiffstats
path: root/crypto/perlasm
diff options
context:
space:
mode:
authorJerry Shih <bignose1007@gmail.com>2023-09-25 08:45:55 +0800
committerHugo Landau <hlandau@openssl.org>2023-10-26 15:55:50 +0100
commit3e56c0efe72aad6d4246149d9461af48072b681b (patch)
tree4323aaada7d4d8354e4d474c59924d1209e70524 /crypto/perlasm
parenta5871e951d3f3c3f0c498a0420c5ce1f53c425a5 (diff)
riscv: Provide vector crypto implementation of AES-128/256-XTS mode.
To accelerate the performance of the AES-XTS mode, in this patch, we have the specialized multi-block implementation for AES-128-XTS and AES-256-XTS. Signed-off-by: Jerry Shih <jerry.shih@sifive.com> Signed-off-by: Phoebe Chen <phoebe.chen@sifive.com> Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Hugo Landau <hlandau@openssl.org> (Merged from https://github.com/openssl/openssl/pull/21923)
Diffstat (limited to 'crypto/perlasm')
-rw-r--r--crypto/perlasm/riscv.pm46
1 files changed, 46 insertions, 0 deletions
diff --git a/crypto/perlasm/riscv.pm b/crypto/perlasm/riscv.pm
index 8d602d8493..9fdee77793 100644
--- a/crypto/perlasm/riscv.pm
+++ b/crypto/perlasm/riscv.pm
@@ -442,6 +442,15 @@ sub viota_m {
return ".word ".($template | ($vm << 25) | ($vs2 << 20) | ($vd << 7));
}
+sub vle8_v {
+ # vle8.v vd, (rs1), vm
+ my $template = 0b000000_0_00000_00000_000_00000_0000111;
+ my $vd = read_vreg shift;
+ my $rs1 = read_reg shift;
+ my $vm = read_mask_vreg shift;
+ return ".word ".($template | ($vm << 25) | ($rs1 << 15) | ($vd << 7));
+}
+
sub vle32_v {
# vle32.v vd, (rs1), vm
my $template = 0b000000_0_00000_00000_110_00000_0000111;
@@ -568,6 +577,15 @@ sub vor_vv_v0t {
return ".word ".($template | ($vs2 << 20) | ($vs1 << 15) | ($vd << 7));
}
+sub vse8_v {
+ # vse8.v vd, (rs1), vm
+ my $template = 0b000000_0_00000_00000_000_00000_0100111;
+ my $vd = read_vreg shift;
+ my $rs1 = read_reg shift;
+ my $vm = read_mask_vreg shift;
+ return ".word ".($template | ($vm << 25) | ($rs1 << 15) | ($vd << 7));
+}
+
sub vse32_v {
# vse32.v vd, (rs1), vm
my $template = 0b000000_0_00000_00000_110_00000_0100111;
@@ -744,6 +762,15 @@ sub vxor_vv {
return ".word ".($template | ($vs2 << 20) | ($vs1 << 15) | ($vd << 7));
}
+sub vzext_vf2 {
+ # vzext.vf2 vd, vs2, vm
+ my $template = 0b010010_0_00000_00110_010_00000_1010111;
+ my $vd = read_vreg shift;
+ my $vs2 = read_vreg shift;
+ my $vm = read_mask_vreg shift;
+ return ".word ".($template | ($vm << 25) | ($vs2 << 20) | ($vd << 7));
+}
+
# Vector crypto instructions
## Zvbb and Zvkb instructions
@@ -759,6 +786,15 @@ sub vxor_vv {
## vror (also in zvkb)
## vwsll
+sub vbrev8_v {
+ # vbrev8.v vd, vs2, vm
+ my $template = 0b010010_0_00000_01000_010_00000_1010111;
+ my $vd = read_vreg shift;
+ my $vs2 = read_vreg shift;
+ my $vm = read_mask_vreg shift;
+ return ".word ".($template | ($vm << 25) | ($vs2 << 20) | ($vd << 7));
+}
+
sub vrev8_v {
# vrev8.v vd, vs2, vm
my $template = 0b010010_0_00000_01001_010_00000_1010111;
@@ -780,6 +816,16 @@ sub vror_vi {
return ".word ".($template | ($uimm_i5 << 26) | ($vs2 << 20) | ($uimm_i4_0 << 15) | ($vd << 7));
}
+sub vwsll_vv {
+ # vwsll.vv vd, vs2, vs1, vm
+ my $template = 0b110101_0_00000_00000_000_00000_1010111;
+ my $vd = read_vreg shift;
+ my $vs2 = read_vreg shift;
+ my $vs1 = read_vreg shift;
+ my $vm = read_mask_vreg shift;
+ return ".word ".($template | ($vm << 25) | ($vs2 << 20) | ($vs1 << 15) | ($vd << 7));
+}
+
## Zvbc instructions
sub vclmulh_vx {