diff options
author | Jerry Shih <bignose1007@gmail.com> | 2023-09-25 08:45:55 +0800 |
---|---|---|
committer | Hugo Landau <hlandau@openssl.org> | 2023-10-26 15:55:50 +0100 |
commit | 3e56c0efe72aad6d4246149d9461af48072b681b (patch) | |
tree | 4323aaada7d4d8354e4d474c59924d1209e70524 /crypto/perlasm | |
parent | a5871e951d3f3c3f0c498a0420c5ce1f53c425a5 (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.pm | 46 |
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 { |