From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212392; cv=none; d=zohomail.com; s=zohoarc; b=M9NMpWWXY/3P8U5wwIbrpKM8EhIYfXhggYYSXBaP15MdtByNFSqUCIkA02ouhwhYEIsu58gGkFAurcBIw5UbzUvZ/2RLoMR6VKQFjMMpAZXptE1NPglJoBfnqIyWZsKrxT9IPYLApsYwxWA58+L50wHQno2Q/DdL7ZB7OgvILvk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212392; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gsEJ37kFBNib5jJ+8MTgXRz3AX625bRkZVxUHawfefw=; b=KE+TXEN3yTPLarha0i+p4xtuSLsbNNmBWScIRvy0u9FdirJY/U8yIDoLCLIKRsGbFi8H2Rl6fCAC8lb2ICevea3ZBtneXMlNpxptDsFbXnowfdVNLX9PBafquefvy3Z7t/I4huRgOTrtstQ3OcLhBkPof/7NlnSu2CRLerzd+LE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212391894221.4851898532272; Wed, 29 Apr 2020 19:06:31 -0700 (PDT) Received: from localhost ([::1]:50056 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyas-0000Pu-8u for importer@patchew.org; Wed, 29 Apr 2020 22:06:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37304) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYu-0006yL-BC for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXc-0004jB-Ss for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:28 -0400 Received: from mail-pj1-x1044.google.com ([2607:f8b0:4864:20::1044]:53864) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXc-0004it-Fk for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:08 -0400 Received: by mail-pj1-x1044.google.com with SMTP id hi11so58529pjb.3 for ; Wed, 29 Apr 2020 19:03:08 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gsEJ37kFBNib5jJ+8MTgXRz3AX625bRkZVxUHawfefw=; b=lcrIq6MxITkYZT+ZbCpZx4mRysfEHcGumTPMNoUSVchseyN73aSszo5YX4kjBZCD5O 1kK5Sr6Dl6D1owviLMvpb7SaLhokLV8U+65TGlVuzWhdAkWorcA4iXlcelWwo87eJ0IA 8vVGgRk7Ddtl9ggfTtqvzYu3wy+hK99VLEkH7mMkpRj2zfFw3DiRnscZDYIhwsu2ujRW 3APC+2xnjPRjJy8GQHIcb8k5tMGfHMgPgnFo9oi/pwOLALpl9GoRP+cRKUtKdeTuO/ec 2W7aDmEyYwBCLwngWDveA6U02Byz+haKiMsYCdVl5OFfhpnctuGFUGsWFB82c2LvVir6 u3wA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gsEJ37kFBNib5jJ+8MTgXRz3AX625bRkZVxUHawfefw=; b=Uf/Ov4NBQkoACkIXhl1fpXdlxPPK1qUsQBrjEQU0CKP1T4sOehOGrwg/MYN3DwvHRN tPXFz/mx00V60TbVxYje2KiLxasQi+ltiQGdDfKt2zfekKD11ZUE1CPEbuuem+JKBo3k BY1e1q6SNE3INy6rka515HItaQmWcq0yupvj09gwR0QHEuYu9mFfTOaqkXgzbottCqCD OQxFEDXTrrI6nT3nt/mx/C1MlL3fHa/uTu8O80HRznWaeK/DB8r5hu7oEkwEeamdIYuL I1i37Q6x43BMgD758KusrduuH8uXqSsnZhNbevx4r2j5EQuyR6gqeW3NwGulTzzvZG5+ hH2w== X-Gm-Message-State: AGi0PuYofatblGSXUQ4DoTXzP8LUuz3NDXzP9wNgEU1aIKVxP6FjqrC/ Xikhkww2yQ1fEhzYE87Qzq4hREM2oa4= X-Google-Smtp-Source: APiQypKmkJ1ttTrGLLJbJv0LLx0M/TA37loq+i7GqVc/kuX9X/oZok8IYMqtcL1QfO9TvZRmkC3MBQ== X-Received: by 2002:a17:90a:8c3:: with SMTP id 3mr254605pjn.147.1588212186400; Wed, 29 Apr 2020 19:03:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 1/9] target/arm: Convert aes and sm4 to gvec helpers Date: Wed, 29 Apr 2020 19:02:55 -0700 Message-Id: <20200430020303.20264-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1044; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1044.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::1044 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" With this conversion, we will be able to use the same helpers with sve. This also fixes a bug in which we failed to clear the high bits of the SVE register after an AdvSIMD operation. Signed-off-by: Richard Henderson --- target/arm/helper.h | 6 ++-- target/arm/vec_internal.h | 10 ++++++ target/arm/crypto_helper.c | 72 +++++++++++++++++++++++++++----------- target/arm/translate-a64.c | 56 ++++++++++++++++++----------- target/arm/translate.c | 27 +++++++------- target/arm/vec_helper.c | 10 ------ 6 files changed, 115 insertions(+), 66 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 032d5cdfbd..6623b6689a 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -513,7 +513,7 @@ DEF_HELPER_FLAGS_2(neon_qzip8, TCG_CALL_NO_RWG, void, p= tr, ptr) DEF_HELPER_FLAGS_2(neon_qzip16, TCG_CALL_NO_RWG, void, ptr, ptr) DEF_HELPER_FLAGS_2(neon_qzip32, TCG_CALL_NO_RWG, void, ptr, ptr) =20 -DEF_HELPER_FLAGS_3(crypto_aese, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(crypto_aese, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_3(crypto_aesmc, TCG_CALL_NO_RWG, void, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_4(crypto_sha1_3reg, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= i32) @@ -534,8 +534,8 @@ DEF_HELPER_FLAGS_5(crypto_sm3tt, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, i32, i32) DEF_HELPER_FLAGS_3(crypto_sm3partw1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) DEF_HELPER_FLAGS_3(crypto_sm3partw2, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) =20 -DEF_HELPER_FLAGS_2(crypto_sm4e, TCG_CALL_NO_RWG, void, ptr, ptr) -DEF_HELPER_FLAGS_3(crypto_sm4ekey, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) +DEF_HELPER_FLAGS_4(crypto_sm4e, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(crypto_sm4ekey, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) =20 DEF_HELPER_FLAGS_3(crc32, TCG_CALL_NO_RWG_SE, i32, i32, i32, i32) DEF_HELPER_FLAGS_3(crc32c, TCG_CALL_NO_RWG_SE, i32, i32, i32, i32) diff --git a/target/arm/vec_internal.h b/target/arm/vec_internal.h index ac365123c4..7eaffeb060 100644 --- a/target/arm/vec_internal.h +++ b/target/arm/vec_internal.h @@ -20,6 +20,16 @@ #ifndef TARGET_ARM_VEC_INTERNALS_H #define TARGET_ARM_VEC_INTERNALS_H =20 +static inline void clear_tail(void *vd, uintptr_t opr_sz, uintptr_t max_sz) +{ + uint64_t *d =3D vd + opr_sz; + uintptr_t i; + + for (i =3D opr_sz; i < max_sz; i +=3D 8) { + *d++ =3D 0; + } +} + static inline int32_t do_sqrshl_bhs(int32_t src, int32_t shift, int bits, bool round, uint32_t *sat) { diff --git a/target/arm/crypto_helper.c b/target/arm/crypto_helper.c index f800266727..6bd5a3d2d0 100644 --- a/target/arm/crypto_helper.c +++ b/target/arm/crypto_helper.c @@ -13,7 +13,9 @@ =20 #include "cpu.h" #include "exec/helper-proto.h" +#include "tcg/tcg-gvec-desc.h" #include "crypto/aes.h" +#include "vec_internal.h" =20 union CRYPTO_STATE { uint8_t bytes[16]; @@ -29,18 +31,15 @@ union CRYPTO_STATE { #define CR_ST_WORD(state, i) (state.words[i]) #endif =20 -void HELPER(crypto_aese)(void *vd, void *vm, uint32_t decrypt) +static void do_crypto_aese(uint64_t *rd, uint64_t *rn, + uint64_t *rm, bool decrypt) { static uint8_t const * const sbox[2] =3D { AES_sbox, AES_isbox }; static uint8_t const * const shift[2] =3D { AES_shifts, AES_ishifts }; - uint64_t *rd =3D vd; - uint64_t *rm =3D vm; union CRYPTO_STATE rk =3D { .l =3D { rm[0], rm[1] } }; - union CRYPTO_STATE st =3D { .l =3D { rd[0], rd[1] } }; + union CRYPTO_STATE st =3D { .l =3D { rn[0], rn[1] } }; int i; =20 - assert(decrypt < 2); - /* xor state vector with round key */ rk.l[0] ^=3D st.l[0]; rk.l[1] ^=3D st.l[1]; @@ -54,7 +53,18 @@ void HELPER(crypto_aese)(void *vd, void *vm, uint32_t de= crypt) rd[1] =3D st.l[1]; } =20 -void HELPER(crypto_aesmc)(void *vd, void *vm, uint32_t decrypt) +void HELPER(crypto_aese)(void *vd, void *vn, void *vm, uint32_t desc) +{ + intptr_t i, opr_sz =3D simd_oprsz(desc); + bool decrypt =3D simd_data(desc); + + for (i =3D 0; i < opr_sz; i +=3D 16) { + do_crypto_aese(vd + i, vn + i, vm + i, decrypt); + } + clear_tail(vd, opr_sz, simd_maxsz(desc)); +} + +static void do_crypto_aesmc(uint64_t *rd, uint64_t *rm, bool decrypt) { static uint32_t const mc[][256] =3D { { /* MixColumns lookup table */ @@ -190,13 +200,9 @@ void HELPER(crypto_aesmc)(void *vd, void *vm, uint32_t= decrypt) 0xbe805d9f, 0xb58d5491, 0xa89a4f83, 0xa397468d, } }; =20 - uint64_t *rd =3D vd; - uint64_t *rm =3D vm; union CRYPTO_STATE st =3D { .l =3D { rm[0], rm[1] } }; int i; =20 - assert(decrypt < 2); - for (i =3D 0; i < 16; i +=3D 4) { CR_ST_WORD(st, i >> 2) =3D mc[decrypt][CR_ST_BYTE(st, i)] ^ @@ -209,6 +215,17 @@ void HELPER(crypto_aesmc)(void *vd, void *vm, uint32_t= decrypt) rd[1] =3D st.l[1]; } =20 +void HELPER(crypto_aesmc)(void *vd, void *vm, uint32_t desc) +{ + intptr_t i, opr_sz =3D simd_oprsz(desc); + bool decrypt =3D simd_data(desc); + + for (i =3D 0; i < opr_sz; i +=3D 16) { + do_crypto_aesmc(vd + i, vm + i, decrypt); + } + clear_tail(vd, opr_sz, simd_maxsz(desc)); +} + /* * SHA-1 logical functions */ @@ -638,12 +655,10 @@ static uint8_t const sm4_sbox[] =3D { 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48, }; =20 -void HELPER(crypto_sm4e)(void *vd, void *vn) +static void do_crypto_sm4e(uint64_t *rd, uint64_t *rn, uint64_t *rm) { - uint64_t *rd =3D vd; - uint64_t *rn =3D vn; - union CRYPTO_STATE d =3D { .l =3D { rd[0], rd[1] } }; - union CRYPTO_STATE n =3D { .l =3D { rn[0], rn[1] } }; + union CRYPTO_STATE d =3D { .l =3D { rn[0], rn[1] } }; + union CRYPTO_STATE n =3D { .l =3D { rm[0], rm[1] } }; uint32_t t, i; =20 for (i =3D 0; i < 4; i++) { @@ -665,11 +680,18 @@ void HELPER(crypto_sm4e)(void *vd, void *vn) rd[1] =3D d.l[1]; } =20 -void HELPER(crypto_sm4ekey)(void *vd, void *vn, void* vm) +void HELPER(crypto_sm4e)(void *vd, void *vn, void *vm, uint32_t desc) +{ + intptr_t i, opr_sz =3D simd_oprsz(desc); + + for (i =3D 0; i < opr_sz; i +=3D 16) { + do_crypto_sm4e(vd + i, vn + i, vm + i); + } + clear_tail(vd, opr_sz, simd_maxsz(desc)); +} + +static void do_crypto_sm4ekey(uint64_t *rd, uint64_t *rn, uint64_t *rm) { - uint64_t *rd =3D vd; - uint64_t *rn =3D vn; - uint64_t *rm =3D vm; union CRYPTO_STATE d; union CRYPTO_STATE n =3D { .l =3D { rn[0], rn[1] } }; union CRYPTO_STATE m =3D { .l =3D { rm[0], rm[1] } }; @@ -693,3 +715,13 @@ void HELPER(crypto_sm4ekey)(void *vd, void *vn, void* = vm) rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; } + +void HELPER(crypto_sm4ekey)(void *vd, void *vn, void* vm, uint32_t desc) +{ + intptr_t i, opr_sz =3D simd_oprsz(desc); + + for (i =3D 0; i < opr_sz; i +=3D 16) { + do_crypto_sm4ekey(vd + i, vn + i, vm + i); + } + clear_tail(vd, opr_sz, simd_maxsz(desc)); +} diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 632c1c34ed..b2adf3a39e 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -682,6 +682,15 @@ static void gen_gvec_op2(DisasContext *s, bool is_q, i= nt rd, is_q ? 16 : 8, vec_full_reg_size(s), gvec_op); } =20 +/* Expand a 2-operand operation using an out-of-line helper. */ +static void gen_gvec_op2_ool(DisasContext *s, bool is_q, int rd, + int rn, int data, gen_helper_gvec_2 *fn) +{ + tcg_gen_gvec_2_ool(vec_full_reg_offset(s, rd), + vec_full_reg_offset(s, rn), + is_q ? 16 : 8, vec_full_reg_size(s), data, fn); +} + /* Expand a 3-operand AdvSIMD vector operation using an op descriptor. */ static void gen_gvec_op3(DisasContext *s, bool is_q, int rd, int rn, int rm, const GVecGen3 *gvec_op) @@ -14455,9 +14464,8 @@ static void disas_crypto_aes(DisasContext *s, uint3= 2_t insn) int rn =3D extract32(insn, 5, 5); int rd =3D extract32(insn, 0, 5); int decrypt; - TCGv_ptr tcg_rd_ptr, tcg_rn_ptr; - TCGv_i32 tcg_decrypt; - CryptoThreeOpIntFn *genfn; + gen_helper_gvec_2 *genfn2 =3D NULL; + gen_helper_gvec_3 *genfn3 =3D NULL; =20 if (!dc_isar_feature(aa64_aes, s) || size !=3D 0) { unallocated_encoding(s); @@ -14467,19 +14475,19 @@ static void disas_crypto_aes(DisasContext *s, uin= t32_t insn) switch (opcode) { case 0x4: /* AESE */ decrypt =3D 0; - genfn =3D gen_helper_crypto_aese; + genfn3 =3D gen_helper_crypto_aese; break; case 0x6: /* AESMC */ decrypt =3D 0; - genfn =3D gen_helper_crypto_aesmc; + genfn2 =3D gen_helper_crypto_aesmc; break; case 0x5: /* AESD */ decrypt =3D 1; - genfn =3D gen_helper_crypto_aese; + genfn3 =3D gen_helper_crypto_aese; break; case 0x7: /* AESIMC */ decrypt =3D 1; - genfn =3D gen_helper_crypto_aesmc; + genfn2 =3D gen_helper_crypto_aesmc; break; default: unallocated_encoding(s); @@ -14489,16 +14497,11 @@ static void disas_crypto_aes(DisasContext *s, uin= t32_t insn) if (!fp_access_check(s)) { return; } - - tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); - tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); - tcg_decrypt =3D tcg_const_i32(decrypt); - - genfn(tcg_rd_ptr, tcg_rn_ptr, tcg_decrypt); - - tcg_temp_free_ptr(tcg_rd_ptr); - tcg_temp_free_ptr(tcg_rn_ptr); - tcg_temp_free_i32(tcg_decrypt); + if (genfn2) { + gen_gvec_op2_ool(s, true, rd, rn, decrypt, genfn2); + } else { + gen_gvec_op3_ool(s, true, rd, rd, rn, decrypt, genfn3); + } } =20 /* Crypto three-reg SHA @@ -14641,13 +14644,15 @@ static void disas_crypto_two_reg_sha(DisasContext= *s, uint32_t insn) */ static void disas_crypto_three_reg_sha512(DisasContext *s, uint32_t insn) { + static const GVecGen3 sm4ekey_op =3D { .fno =3D gen_helper_crypto_sm4e= key }; int opcode =3D extract32(insn, 10, 2); int o =3D extract32(insn, 14, 1); int rm =3D extract32(insn, 16, 5); int rn =3D extract32(insn, 5, 5); int rd =3D extract32(insn, 0, 5); bool feature; - CryptoThreeOpFn *genfn; + CryptoThreeOpFn *genfn =3D NULL; + const GVecGen3 *gvecop =3D NULL; =20 if (o =3D=3D 0) { switch (opcode) { @@ -14682,7 +14687,7 @@ static void disas_crypto_three_reg_sha512(DisasCont= ext *s, uint32_t insn) break; case 2: /* SM4EKEY */ feature =3D dc_isar_feature(aa64_sm4, s); - genfn =3D gen_helper_crypto_sm4ekey; + gvecop =3D &sm4ekey_op; break; default: unallocated_encoding(s); @@ -14699,6 +14704,11 @@ static void disas_crypto_three_reg_sha512(DisasCon= text *s, uint32_t insn) return; } =20 + if (gvecop) { + gen_gvec_op3(s, true, rd, rn, rm, gvecop); + return; + } + if (genfn) { TCGv_ptr tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr; =20 @@ -14751,6 +14761,7 @@ static void disas_crypto_two_reg_sha512(DisasContex= t *s, uint32_t insn) TCGv_ptr tcg_rd_ptr, tcg_rn_ptr; bool feature; CryptoTwoOpFn *genfn; + gen_helper_gvec_3 *gvecfn =3D NULL; =20 switch (opcode) { case 0: /* SHA512SU0 */ @@ -14759,7 +14770,7 @@ static void disas_crypto_two_reg_sha512(DisasContex= t *s, uint32_t insn) break; case 1: /* SM4E */ feature =3D dc_isar_feature(aa64_sm4, s); - genfn =3D gen_helper_crypto_sm4e; + gvecfn =3D gen_helper_crypto_sm4e; break; default: unallocated_encoding(s); @@ -14775,6 +14786,11 @@ static void disas_crypto_two_reg_sha512(DisasConte= xt *s, uint32_t insn) return; } =20 + if (gvecfn) { + gen_gvec_op3_ool(s, true, rd, rd, rn, 0, gvecfn); + return; + } + tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); =20 diff --git a/target/arm/translate.c b/target/arm/translate.c index 94a81b8323..caa98ed309 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -6925,22 +6925,23 @@ static int disas_neon_data_insn(DisasContext *s, ui= nt32_t insn) if (!dc_isar_feature(aa32_aes, s) || ((rm | rd) & 1)) { return 1; } - ptr1 =3D vfp_reg_ptr(true, rd); - ptr2 =3D vfp_reg_ptr(true, rm); - - /* Bit 6 is the lowest opcode bit; it distinguishes b= etween - * encryption (AESE/AESMC) and decryption (AESD/AESIM= C) - */ - tmp3 =3D tcg_const_i32(extract32(insn, 6, 1)); - + /* + * Bit 6 is the lowest opcode bit; it distinguishes + * between encryption (AESE/AESMC) and decryption + * (AESD/AESIMC). + */ if (op =3D=3D NEON_2RM_AESE) { - gen_helper_crypto_aese(ptr1, ptr2, tmp3); + tcg_gen_gvec_3_ool(vfp_reg_offset(true, rd), + vfp_reg_offset(true, rd), + vfp_reg_offset(true, rm), + 16, 16, extract32(insn, 6, 1), + gen_helper_crypto_aese); } else { - gen_helper_crypto_aesmc(ptr1, ptr2, tmp3); + tcg_gen_gvec_2_ool(vfp_reg_offset(true, rd), + vfp_reg_offset(true, rm), + 16, 16, extract32(insn, 6, 1), + gen_helper_crypto_aesmc); } - tcg_temp_free_ptr(ptr1); - tcg_temp_free_ptr(ptr2); - tcg_temp_free_i32(tmp3); break; case NEON_2RM_SHA1H: if (!dc_isar_feature(aa32_sha1, s) || ((rm | rd) & 1))= { diff --git a/target/arm/vec_helper.c b/target/arm/vec_helper.c index 2339be124c..25dca56090 100644 --- a/target/arm/vec_helper.c +++ b/target/arm/vec_helper.c @@ -38,16 +38,6 @@ #define H4(x) (x) #endif =20 -static void clear_tail(void *vd, uintptr_t opr_sz, uintptr_t max_sz) -{ - uint64_t *d =3D vd + opr_sz; - uintptr_t i; - - for (i =3D opr_sz; i < max_sz; i +=3D 8) { - *d++ =3D 0; - } -} - /* Signed saturating rounding doubling multiply-accumulate high half, 8-bi= t */ void HELPER(sve2_sqrdmlah_b)(void *vd, void *vn, void *vm, void *va, uint32_t desc) --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212479; cv=none; d=zohomail.com; s=zohoarc; b=alUOeQchFVKGJsF4axJ8e7tdWO3Dom3xxd8km6oucZsHWHMwbJb8FimDiKLKiGnO3lYMc6UbVu8uGzmchoTZU0tO/KGCspetXZxc6kFXtmV0z2w1HbKnFI/uVn3bVHMC3GDVjM9FQOC/e0yKIb2CHaJKD0kkcGya2BQQzmM7GCk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212479; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=VmO/69xNBHoMNdGAHFDHCHAr0eDNIq/8r0lrH1o8vr0=; b=dMhBSv3CbtGBemvfDbaGNMXM9T7U2pNbLYL7MembakldUl+xPlc1yb8itEhJMhEpa7vRhOLa0jFW+EASD6FWu2GTEBP/8PyNAn1TSQfy/qiqqO2A7iJAVcoJ1B3qYHDOeqHbcFHGCUcO91vPdowSk1rX1UPKUhRp/zb+0kUbCAc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212479097511.72292844080573; Wed, 29 Apr 2020 19:07:59 -0700 (PDT) Received: from localhost ([::1]:56912 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTycH-0003D0-Qy for importer@patchew.org; Wed, 29 Apr 2020 22:07:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37308) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYv-0006yO-01 for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:50 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXd-0004jL-Sf for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:28 -0400 Received: from mail-pj1-x1044.google.com ([2607:f8b0:4864:20::1044]:40653) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXd-0004j8-Fu for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:09 -0400 Received: by mail-pj1-x1044.google.com with SMTP id fu13so56567pjb.5 for ; Wed, 29 Apr 2020 19:03:09 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VmO/69xNBHoMNdGAHFDHCHAr0eDNIq/8r0lrH1o8vr0=; b=o17U29QwcQoqMMM7lJwGvMty3dbrQhQ8I7bmbNOEsvTHLSBAFOFZZllxOiliIvE0KB lK/QogZpWjXN+GnAE0a/Q9aSH8jX6jbz55NCFlaU3ITL8kozfHFCRVZKhHsUBzyZHSJC FEre82FBJ1TBuuxLKU0OAwnTcMvCpAdgm1GAsu5c1/fxPX8fHVPlh7cwTcOsVycHVace ulGIiccGW9h/uOzbErcjZyMvCRheqWITfR2mghjOb69PGLVZ00LVR90auZA6STpDctnL LqaTV0YCha4Ssm71T/ZMSGYHSv+hgpjUvYpFuErfWiAk0jfNjK1+OuvXvizpXrG8K+l0 ErZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VmO/69xNBHoMNdGAHFDHCHAr0eDNIq/8r0lrH1o8vr0=; b=QcjtB7SSAjK8DC7e6tdGDwEzbjDPWH5Xox6BxhMJTEPr7WFeaDJoeqwp30Klwc2XVm 7M8rsVOluy54IcA65ixBVQVBga6wAhB/T9xNjwRz3YLbvg0a/5ZarxbIXLLDLGZ0eiCw KBiC2Ry8u4giyGTQ4/vfOFYE0AtMxtgERIneURIkEsAfbWmZ43mYdXVlRIDi3vF3BW+h uaP3L1OZauetqwAAsc2Q6hu5//VtHEMjRHIjWM6zJAYtKNhqYBS5aE01qVzXH+7CXRih rmsU89iVakSykzAn3mN637c1TJcSI8keObCjthEt7b9DEMOs+WvCKX5/fVhwB1/Ir5kH 7ypg== X-Gm-Message-State: AGi0PubGsUfqxu3HwV066qXiLo5l0luFlrJhd1jSw2dRf4HphmqnVEeb PJsP1OxIoKTIz7VfbG8ABG7tgSZzWKA= X-Google-Smtp-Source: APiQypLLoIo5GyhPvNEjgXtq1ALEJCPc2siDySZLFjGGMm78cKNeYOIDKaver3SznyMor4w13gPfwg== X-Received: by 2002:a17:90a:8509:: with SMTP id l9mr272288pjn.113.1588212187889; Wed, 29 Apr 2020 19:03:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 2/9] target/arm: Convert rax1 to gvec helpers Date: Wed, 29 Apr 2020 19:02:56 -0700 Message-Id: <20200430020303.20264-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1044; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1044.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::1044 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" With this conversion, we will be able to use the same helpers with sve. This also fixes a bug in which we failed to clear the high bits of the SVE register after an AdvSIMD operation. Signed-off-by: Richard Henderson --- target/arm/helper.h | 2 ++ target/arm/translate-a64.h | 2 ++ target/arm/crypto_helper.c | 11 ++++++++ target/arm/translate-a64.c | 53 ++++++++++++++++++-------------------- 4 files changed, 40 insertions(+), 28 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 6623b6689a..96cf4464be 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -537,6 +537,8 @@ DEF_HELPER_FLAGS_3(crypto_sm3partw2, TCG_CALL_NO_RWG, v= oid, ptr, ptr, ptr) DEF_HELPER_FLAGS_4(crypto_sm4e, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(crypto_sm4ekey, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) =20 +DEF_HELPER_FLAGS_4(crypto_rax1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_3(crc32, TCG_CALL_NO_RWG_SE, i32, i32, i32, i32) DEF_HELPER_FLAGS_3(crc32c, TCG_CALL_NO_RWG_SE, i32, i32, i32, i32) =20 diff --git a/target/arm/translate-a64.h b/target/arm/translate-a64.h index 84c40377bd..f2250a8dd1 100644 --- a/target/arm/translate-a64.h +++ b/target/arm/translate-a64.h @@ -141,4 +141,6 @@ void arm_gen_gvec_xar(unsigned vece, uint32_t rd_ofs, u= int32_t rn_ofs, uint32_t rm_ofs, int64_t shift, uint32_t opr_sz, uint32_t max_sz); =20 +extern const GVecGen3 rax1_op; + #endif /* TARGET_ARM_TRANSLATE_A64_H */ diff --git a/target/arm/crypto_helper.c b/target/arm/crypto_helper.c index 6bd5a3d2d0..372d8350e4 100644 --- a/target/arm/crypto_helper.c +++ b/target/arm/crypto_helper.c @@ -725,3 +725,14 @@ void HELPER(crypto_sm4ekey)(void *vd, void *vn, void* = vm, uint32_t desc) } clear_tail(vd, opr_sz, simd_maxsz(desc)); } + +void HELPER(crypto_rax1)(void *vd, void *vn, void *vm, uint32_t desc) +{ + intptr_t i, opr_sz =3D simd_oprsz(desc); + uint64_t *d =3D vd, *n =3D vn, *m =3D vm; + + for (i =3D 0; i < opr_sz / 8; ++i) { + d[i] =3D n[i] ^ rol64(m[i], 1); + } + clear_tail(vd, opr_sz, simd_maxsz(desc)); +} diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index b2adf3a39e..2eb4315b6d 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -14636,6 +14636,29 @@ static void disas_crypto_two_reg_sha(DisasContext = *s, uint32_t insn) tcg_temp_free_ptr(tcg_rn_ptr); } =20 +static void gen_rax1_i64(TCGv_i64 d, TCGv_i64 n, TCGv_i64 m) +{ + tcg_gen_rotli_i64(d, m, 1); + tcg_gen_xor_i64(d, d, n); +} + +static void gen_rax1_vec(unsigned vece, TCGv_vec d, TCGv_vec n, TCGv_vec m) +{ + tcg_gen_rotli_vec(vece, d, m, 1); + tcg_gen_xor_vec(vece, d, d, n); +} + +static const TCGOpcode rax1_opc[] =3D { INDEX_op_rotli_vec, 0 }; + +const GVecGen3 rax1_op =3D +{ + .fni8 =3D gen_rax1_i64, + .fniv =3D gen_rax1_vec, + .opt_opc =3D rax1_opc, + .fno =3D gen_helper_crypto_rax1, + .vece =3D MO_64, +}; + /* Crypto three-reg SHA512 * 31 21 20 16 15 14 13 12 11 10 9 5 4 0 * +-----------------------+------+---+---+-----+--------+------+------+ @@ -14670,7 +14693,7 @@ static void disas_crypto_three_reg_sha512(DisasCont= ext *s, uint32_t insn) break; case 3: /* RAX1 */ feature =3D dc_isar_feature(aa64_sha3, s); - genfn =3D NULL; + gvecop =3D &rax1_op; break; default: g_assert_not_reached(); @@ -14706,10 +14729,7 @@ static void disas_crypto_three_reg_sha512(DisasCon= text *s, uint32_t insn) =20 if (gvecop) { gen_gvec_op3(s, true, rd, rn, rm, gvecop); - return; - } - - if (genfn) { + } else { TCGv_ptr tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr; =20 tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); @@ -14721,29 +14741,6 @@ static void disas_crypto_three_reg_sha512(DisasCon= text *s, uint32_t insn) tcg_temp_free_ptr(tcg_rd_ptr); tcg_temp_free_ptr(tcg_rn_ptr); tcg_temp_free_ptr(tcg_rm_ptr); - } else { - TCGv_i64 tcg_op1, tcg_op2, tcg_res[2]; - int pass; - - tcg_op1 =3D tcg_temp_new_i64(); - tcg_op2 =3D tcg_temp_new_i64(); - tcg_res[0] =3D tcg_temp_new_i64(); - tcg_res[1] =3D tcg_temp_new_i64(); - - for (pass =3D 0; pass < 2; pass++) { - read_vec_element(s, tcg_op1, rn, pass, MO_64); - read_vec_element(s, tcg_op2, rm, pass, MO_64); - - tcg_gen_rotli_i64(tcg_res[pass], tcg_op2, 1); - tcg_gen_xor_i64(tcg_res[pass], tcg_res[pass], tcg_op1); - } - write_vec_element(s, tcg_res[0], rd, 0, MO_64); - write_vec_element(s, tcg_res[1], rd, 1, MO_64); - - tcg_temp_free_i64(tcg_op1); - tcg_temp_free_i64(tcg_op2); - tcg_temp_free_i64(tcg_res[0]); - tcg_temp_free_i64(tcg_res[1]); } } =20 --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212394; cv=none; d=zohomail.com; s=zohoarc; b=ZeZeQ8LvPCierljOxODZzHLH1Y54kUt83CT40d+ZV9OKzTwf7P8PSp6xX9yJQTcoVRoIVr9inMsdv55iDNwbe0pRSm6hI0RBV+4q/WavDmsJxrvfDgcIO052vUI7U7CXG557rH7iHwzPTrOA6ZLgoo1plzGqRhZuRkVDHUTfu88= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212394; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=UBqJb5Jdsa7NV9JcGHmEClWTryX2MT6M5prjM2Nl448=; b=Ei0fbMEOP32LjU3YGPUpXkh9iMcTx6ZhM6n5zK2/eBt1FpWsa7ORzasEnohsHWDjHizndMPxIrX929T2iooqvYZjK8YSJca2WjPpScIMIb1T+Ej9n79wGQdnJ4fFteSNeQE8r8CS8s+njJw+UuLwx+XxFJUZJtMzeNbMYdb+77g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212394465216.8042559942694; Wed, 29 Apr 2020 19:06:34 -0700 (PDT) Received: from localhost ([::1]:50282 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyau-0000WP-Rs for importer@patchew.org; Wed, 29 Apr 2020 22:06:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37316) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYw-0006yS-Ub for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXh-0004jn-5s for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:30 -0400 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]:55893) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXg-0004jQ-Kf for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:12 -0400 Received: by mail-pj1-x1043.google.com with SMTP id a32so54397pje.5 for ; Wed, 29 Apr 2020 19:03:10 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=UBqJb5Jdsa7NV9JcGHmEClWTryX2MT6M5prjM2Nl448=; b=DpOmy8el0LgZG9lbalpewJt+t0k0JNzziaCR11MqU2AIbJ0/QEQjj15mkMQpdGHvce eSRGswcN4ZbjvSpqIJ4hmrBFmbrPyIfNCPYygVj+k3tyw5Pn/LIX4raWp3edMhzwar4t cT9xJsw5WMeiYfX+2LP4ZPgahM9nFB2+WJ+uUpDLE2smD3xbbSInC6yEvt9kUsRKHQDY OSAI4t+/5plgTRSDJd8zq5e56IRXar5/6Ye6yroo93wf5kBvlJV+aSbmRF8sjU5g1xvf yvAXeeEAZrCQwzhcGZHE1kPDHJiOvvtWTdpyr/ri/pIUYHEH8dNaeKtsPB1fhPkyLY7c ooEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=UBqJb5Jdsa7NV9JcGHmEClWTryX2MT6M5prjM2Nl448=; b=S7MgGji+KASoOrPN72WKN+VKqG7OXgdEqVNyrRhLyf0Kbea6UrkXmneWo8juoDf5qa zoUV7b/GFQ4ot+KHOAJtaJ3woDsuPu8vRS7+sslQDh1wlt6OTEUw+qQtGLUFWPrd3Wsf wUHyk/hxvF183MJ1xiGd6USt5NIleuedt0Tmkg2lA6giRUdJel2bMqbhAUcIETM4pNqz 7vHd7VkfM612TN+kt6/LMIAv5Pfaxek06t1Vj9iutZfEAt21dNVSOcxyuHXlL1OrWTSZ bsTIidpuNXgQEIo2A8V2OCAypLzmdIsi0eFOjFBSrMKrsRKJpbPVY2htI+T9/vOYedSF n8Rw== X-Gm-Message-State: AGi0Puajc7yn/zJYJUszGuSK49ml8oT3ncdoQqnu2iyD6yoJ1fK3TE+b /PkhST7ZaCC03h9LGqVgrR49X8fVBA0= X-Google-Smtp-Source: APiQypJUD7G6fOqJdq6ADrF4TTWNeDFZRKL+PBMhfPQe2hYmw+a1MmrAJZMGCuCt+7R0+p/Mi9H6LQ== X-Received: by 2002:a17:902:d30a:: with SMTP id b10mr1357888plc.3.1588212189064; Wed, 29 Apr 2020 19:03:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 3/9] target/arm: Convert sha512 and sm3 to gvec helpers Date: Wed, 29 Apr 2020 19:02:57 -0700 Message-Id: <20200430020303.20264-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1043; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1043.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::1043 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Do not yet convert the helpers to loop over opr_sz, but the descriptor allows the vector tail to be cleared. Which fixes an existing bug. Signed-off-by: Richard Henderson --- target/arm/helper.h | 15 +++++---- target/arm/crypto_helper.c | 37 +++++++++++++++++++---- target/arm/translate-a64.c | 62 +++++++++++++++----------------------- 3 files changed, 64 insertions(+), 50 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 96cf4464be..d564747808 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -525,14 +525,17 @@ DEF_HELPER_FLAGS_3(crypto_sha256h2, TCG_CALL_NO_RWG, = void, ptr, ptr, ptr) DEF_HELPER_FLAGS_2(crypto_sha256su0, TCG_CALL_NO_RWG, void, ptr, ptr) DEF_HELPER_FLAGS_3(crypto_sha256su1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) =20 -DEF_HELPER_FLAGS_3(crypto_sha512h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) -DEF_HELPER_FLAGS_3(crypto_sha512h2, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) -DEF_HELPER_FLAGS_2(crypto_sha512su0, TCG_CALL_NO_RWG, void, ptr, ptr) -DEF_HELPER_FLAGS_3(crypto_sha512su1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) +DEF_HELPER_FLAGS_4(crypto_sha512h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(crypto_sha512h2, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_3(crypto_sha512su0, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(crypto_sha512su1, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_5(crypto_sm3tt, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32= , i32) -DEF_HELPER_FLAGS_3(crypto_sm3partw1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) -DEF_HELPER_FLAGS_3(crypto_sm3partw2, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) +DEF_HELPER_FLAGS_4(crypto_sm3partw1, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(crypto_sm3partw2, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_4(crypto_sm4e, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(crypto_sm4ekey, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) diff --git a/target/arm/crypto_helper.c b/target/arm/crypto_helper.c index 372d8350e4..637e4c00bb 100644 --- a/target/arm/crypto_helper.c +++ b/target/arm/crypto_helper.c @@ -31,6 +31,19 @@ union CRYPTO_STATE { #define CR_ST_WORD(state, i) (state.words[i]) #endif =20 +/* + * The caller has not been converted to full gvec, and so only + * modifies the low 16 bytes of the vector register. + */ +static void clear_tail_16(void *vd, uint32_t desc) +{ + int opr_sz =3D simd_oprsz(desc); + int max_sz =3D simd_maxsz(desc); + + assert(opr_sz =3D=3D 16); + clear_tail(vd, opr_sz, max_sz); +} + static void do_crypto_aese(uint64_t *rd, uint64_t *rn, uint64_t *rm, bool decrypt) { @@ -470,7 +483,7 @@ static uint64_t s1_512(uint64_t x) return ror64(x, 19) ^ ror64(x, 61) ^ (x >> 6); } =20 -void HELPER(crypto_sha512h)(void *vd, void *vn, void *vm) +void HELPER(crypto_sha512h)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -483,9 +496,11 @@ void HELPER(crypto_sha512h)(void *vd, void *vn, void *= vm) =20 rd[0] =3D d0; rd[1] =3D d1; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sha512h2)(void *vd, void *vn, void *vm) +void HELPER(crypto_sha512h2)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -498,9 +513,11 @@ void HELPER(crypto_sha512h2)(void *vd, void *vn, void = *vm) =20 rd[0] =3D d0; rd[1] =3D d1; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sha512su0)(void *vd, void *vn) +void HELPER(crypto_sha512su0)(void *vd, void *vn, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -512,9 +529,11 @@ void HELPER(crypto_sha512su0)(void *vd, void *vn) =20 rd[0] =3D d0; rd[1] =3D d1; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sha512su1)(void *vd, void *vn, void *vm) +void HELPER(crypto_sha512su1)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -522,9 +541,11 @@ void HELPER(crypto_sha512su1)(void *vd, void *vn, void= *vm) =20 rd[0] +=3D s1_512(rn[0]) + rm[0]; rd[1] +=3D s1_512(rn[1]) + rm[1]; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sm3partw1)(void *vd, void *vn, void *vm) +void HELPER(crypto_sm3partw1)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -548,9 +569,11 @@ void HELPER(crypto_sm3partw1)(void *vd, void *vn, void= *vm) =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sm3partw2)(void *vd, void *vn, void *vm) +void HELPER(crypto_sm3partw2)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -568,6 +591,8 @@ void HELPER(crypto_sm3partw2)(void *vd, void *vn, void = *vm) =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(vd, desc); } =20 void HELPER(crypto_sm3tt)(void *vd, void *vn, void *vm, uint32_t imm2, diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 2eb4315b6d..c737a409d0 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -14668,28 +14668,36 @@ const GVecGen3 rax1_op =3D static void disas_crypto_three_reg_sha512(DisasContext *s, uint32_t insn) { static const GVecGen3 sm4ekey_op =3D { .fno =3D gen_helper_crypto_sm4e= key }; + static const GVecGen3 sha512h_op =3D { .fno =3D gen_helper_crypto_sha5= 12h }; + static const GVecGen3 sha512h2_op + =3D { .fno =3D gen_helper_crypto_sha512h2 }; + static const GVecGen3 sha512su1_op + =3D { .fno =3D gen_helper_crypto_sha512su1 }; + static const GVecGen3 sm3partw1_op + =3D { .fno =3D gen_helper_crypto_sm3partw1 }; + static const GVecGen3 sm3partw2_op + =3D { .fno =3D gen_helper_crypto_sm3partw2 }; int opcode =3D extract32(insn, 10, 2); int o =3D extract32(insn, 14, 1); int rm =3D extract32(insn, 16, 5); int rn =3D extract32(insn, 5, 5); int rd =3D extract32(insn, 0, 5); bool feature; - CryptoThreeOpFn *genfn =3D NULL; const GVecGen3 *gvecop =3D NULL; =20 if (o =3D=3D 0) { switch (opcode) { case 0: /* SHA512H */ feature =3D dc_isar_feature(aa64_sha512, s); - genfn =3D gen_helper_crypto_sha512h; + gvecop =3D &sha512h_op; break; case 1: /* SHA512H2 */ feature =3D dc_isar_feature(aa64_sha512, s); - genfn =3D gen_helper_crypto_sha512h2; + gvecop =3D &sha512h2_op; break; case 2: /* SHA512SU1 */ feature =3D dc_isar_feature(aa64_sha512, s); - genfn =3D gen_helper_crypto_sha512su1; + gvecop =3D &sha512su1_op; break; case 3: /* RAX1 */ feature =3D dc_isar_feature(aa64_sha3, s); @@ -14702,11 +14710,11 @@ static void disas_crypto_three_reg_sha512(DisasCo= ntext *s, uint32_t insn) switch (opcode) { case 0: /* SM3PARTW1 */ feature =3D dc_isar_feature(aa64_sm3, s); - genfn =3D gen_helper_crypto_sm3partw1; + gvecop =3D &sm3partw1_op; break; case 1: /* SM3PARTW2 */ feature =3D dc_isar_feature(aa64_sm3, s); - genfn =3D gen_helper_crypto_sm3partw2; + gvecop =3D &sm3partw2_op; break; case 2: /* SM4EKEY */ feature =3D dc_isar_feature(aa64_sm4, s); @@ -14726,22 +14734,7 @@ static void disas_crypto_three_reg_sha512(DisasCon= text *s, uint32_t insn) if (!fp_access_check(s)) { return; } - - if (gvecop) { - gen_gvec_op3(s, true, rd, rn, rm, gvecop); - } else { - TCGv_ptr tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr; - - tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); - tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); - tcg_rm_ptr =3D vec_full_reg_ptr(s, rm); - - genfn(tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr); - - tcg_temp_free_ptr(tcg_rd_ptr); - tcg_temp_free_ptr(tcg_rn_ptr); - tcg_temp_free_ptr(tcg_rm_ptr); - } + gen_gvec_op3(s, true, rd, rn, rm, gvecop); } =20 /* Crypto two-reg SHA512 @@ -14755,19 +14748,14 @@ static void disas_crypto_two_reg_sha512(DisasCont= ext *s, uint32_t insn) int opcode =3D extract32(insn, 10, 2); int rn =3D extract32(insn, 5, 5); int rd =3D extract32(insn, 0, 5); - TCGv_ptr tcg_rd_ptr, tcg_rn_ptr; bool feature; - CryptoTwoOpFn *genfn; - gen_helper_gvec_3 *gvecfn =3D NULL; =20 switch (opcode) { case 0: /* SHA512SU0 */ feature =3D dc_isar_feature(aa64_sha512, s); - genfn =3D gen_helper_crypto_sha512su0; break; case 1: /* SM4E */ feature =3D dc_isar_feature(aa64_sm4, s); - gvecfn =3D gen_helper_crypto_sm4e; break; default: unallocated_encoding(s); @@ -14783,18 +14771,16 @@ static void disas_crypto_two_reg_sha512(DisasCont= ext *s, uint32_t insn) return; } =20 - if (gvecfn) { - gen_gvec_op3_ool(s, true, rd, rd, rn, 0, gvecfn); - return; + switch (opcode) { + case 0: /* SHA512SU0 */ + gen_gvec_op2_ool(s, true, rd, rn, 0, gen_helper_crypto_sha512su0); + break; + case 1: /* SM4E */ + gen_gvec_op3_ool(s, true, rd, rd, rn, 0, gen_helper_crypto_sm4e); + break; + default: + g_assert_not_reached(); } - - tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); - tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); - - genfn(tcg_rd_ptr, tcg_rn_ptr); - - tcg_temp_free_ptr(tcg_rd_ptr); - tcg_temp_free_ptr(tcg_rn_ptr); } =20 /* Crypto four-register --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212542; cv=none; d=zohomail.com; s=zohoarc; b=HTz6+pfrF0m4MW49wwnEyllg1yRhwJib8m7+Qri5/AqwcgWXZmbQpTFNDWuYBBO5ihk0dwFZyxZrT2t4a36UXEDsqB8N5zPB3kkEBXEXX74OpLF2V7CO40Q4ZEam+EDOESBA/D6sNpkO8I7BcK/Jbna64nV5kFEZZPyVION+YGg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212542; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=rFHIQ9gnK1y50o1in1Rk9q+bTI5N/EWp2WgbbTSdhTY=; b=Edz12TJHJLmeDNw1jYyAelJuunQ2CfSUCxOyHyTBLzJiD/K5p4zo1mlome44BtwUTl4k1sGOmumU3Cd8ysUPvTLhJdSQjuMh/MZhLIRVOfYu0PE5/GteVh6voIbO5/QU/Y8UoK12gpr4PFc192GrLGSJSEo1JM/LOkw38oL4b2s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212542326351.6692791468703; Wed, 29 Apr 2020 19:09:02 -0700 (PDT) Received: from localhost ([::1]:60432 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTydI-0004gj-Uo for importer@patchew.org; Wed, 29 Apr 2020 22:09:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37312) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYw-0006yP-1L for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXg-0004je-W9 for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:29 -0400 Received: from mail-pg1-x542.google.com ([2607:f8b0:4864:20::542]:38600) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXg-0004jU-HY for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:12 -0400 Received: by mail-pg1-x542.google.com with SMTP id p8so2003421pgi.5 for ; Wed, 29 Apr 2020 19:03:12 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rFHIQ9gnK1y50o1in1Rk9q+bTI5N/EWp2WgbbTSdhTY=; b=m5deyNEyqdnNkDjltijr9SHncA6Y8rOkJxtNPAiWqW18n09PTfGTCBn52I3nGiFgWS 8SPjYq9hdwMf1msM0tp4d+TttrGNj6qQU67qvArcD7biNWuwAhqWHP45blCWQC8Jzrv5 4JwvKWv5dp+LmqZ5oO9AaImGY0yPEIieSA8d6lx+i7KBqxeZOOkx4YocznYAwo56dhq4 34CiaiksSkYcrkVCBaHH4PVEleUfyEP4ZbmFRLYikWJSKHiBUVhdab1z4Wy07QTcRgd8 3CK05cRxd7ll2MyPRQ1VFTYDpoaR6WWlI8SzFqq2iczs5J5vZRmtxFoXdsg29d5EguPn 3inA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=rFHIQ9gnK1y50o1in1Rk9q+bTI5N/EWp2WgbbTSdhTY=; b=D+mwWp5AHMKuQWL3EVVYr3PGm1e79rxKRSPlnutHOYlNsppvFkH2AzTvFhMPfBCDor xa2gfEdeEa31PyTJj4mbIkEsyIHaBnUR/fxRM36jjjFq5i4aLQ/RofJPFh8onnqsOuK+ lyLAOwz4imRUpxpgpYK8d9l4iB/1VbKaKOk3HFMvxW/fPmnZB3akhp/r+/B4OaY5O64r LeQ0OugrsVv0pUPuozqv0sFnDACBPbHfBHu46dvHf+29OTK1Bxoz8QZWm5whtsjvxx3C NndWA1Gzt7AATPs41oV6/Wto9J8FHFMm2Mbq4dRMoz9jp63t4kesoJOg2J/l5L/54IGd PLqw== X-Gm-Message-State: AGi0PubIxLSNeN0GTKt8kTHsA8/1f0L3UiePja3AlUqMN+EuUeoqE0Qa ngnqb/W8YebRogkrr04JF3CkU0wy4GM= X-Google-Smtp-Source: APiQypJXnxaPv0aDfeydJW6dGFf9SxLM8DfPmH9sgWoBTCKYb7XP+RsGAMTpgRph1dWglNolLK+iVQ== X-Received: by 2002:aa7:9302:: with SMTP id 2mr1140034pfj.256.1588212190327; Wed, 29 Apr 2020 19:03:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 4/9] target/arm: Convert sha1 and sha256 to gvec helpers Date: Wed, 29 Apr 2020 19:02:58 -0700 Message-Id: <20200430020303.20264-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::542; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x542.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::542 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Do not yet convert the helpers to loop over opr_sz, but the descriptor allows the vector tail to be cleared. Which fixes an existing bug. Signed-off-by: Richard Henderson --- target/arm/helper.h | 12 +++++------ target/arm/crypto_helper.c | 24 +++++++++++++++------ target/arm/translate-a64.c | 34 +++++++++++------------------ target/arm/translate.c | 44 +++++++++++++++----------------------- 4 files changed, 53 insertions(+), 61 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index d564747808..07466ddc6c 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -517,13 +517,13 @@ DEF_HELPER_FLAGS_4(crypto_aese, TCG_CALL_NO_RWG, void= , ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_3(crypto_aesmc, TCG_CALL_NO_RWG, void, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_4(crypto_sha1_3reg, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= i32) -DEF_HELPER_FLAGS_2(crypto_sha1h, TCG_CALL_NO_RWG, void, ptr, ptr) -DEF_HELPER_FLAGS_2(crypto_sha1su1, TCG_CALL_NO_RWG, void, ptr, ptr) +DEF_HELPER_FLAGS_3(crypto_sha1h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(crypto_sha1su1, TCG_CALL_NO_RWG, void, ptr, ptr, i32) =20 -DEF_HELPER_FLAGS_3(crypto_sha256h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) -DEF_HELPER_FLAGS_3(crypto_sha256h2, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) -DEF_HELPER_FLAGS_2(crypto_sha256su0, TCG_CALL_NO_RWG, void, ptr, ptr) -DEF_HELPER_FLAGS_3(crypto_sha256su1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr) +DEF_HELPER_FLAGS_4(crypto_sha256h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(crypto_sha256h2, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_3(crypto_sha256su0, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(crypto_sha256su1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= i32) =20 DEF_HELPER_FLAGS_4(crypto_sha512h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) DEF_HELPER_FLAGS_4(crypto_sha512h2, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) diff --git a/target/arm/crypto_helper.c b/target/arm/crypto_helper.c index 637e4c00bb..7124745c32 100644 --- a/target/arm/crypto_helper.c +++ b/target/arm/crypto_helper.c @@ -303,7 +303,7 @@ void HELPER(crypto_sha1_3reg)(void *vd, void *vn, void = *vm, uint32_t op) rd[1] =3D d.l[1]; } =20 -void HELPER(crypto_sha1h)(void *vd, void *vm) +void HELPER(crypto_sha1h)(void *vd, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rm =3D vm; @@ -314,9 +314,11 @@ void HELPER(crypto_sha1h)(void *vd, void *vm) =20 rd[0] =3D m.l[0]; rd[1] =3D m.l[1]; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sha1su1)(void *vd, void *vm) +void HELPER(crypto_sha1su1)(void *vd, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rm =3D vm; @@ -330,6 +332,8 @@ void HELPER(crypto_sha1su1)(void *vd, void *vm) =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(vd, desc); } =20 /* @@ -357,7 +361,7 @@ static uint32_t s1(uint32_t x) return ror32(x, 17) ^ ror32(x, 19) ^ (x >> 10); } =20 -void HELPER(crypto_sha256h)(void *vd, void *vn, void *vm) +void HELPER(crypto_sha256h)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -388,9 +392,11 @@ void HELPER(crypto_sha256h)(void *vd, void *vn, void *= vm) =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sha256h2)(void *vd, void *vn, void *vm) +void HELPER(crypto_sha256h2)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -413,9 +419,11 @@ void HELPER(crypto_sha256h2)(void *vd, void *vn, void = *vm) =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sha256su0)(void *vd, void *vm) +void HELPER(crypto_sha256su0)(void *vd, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rm =3D vm; @@ -429,9 +437,11 @@ void HELPER(crypto_sha256su0)(void *vd, void *vm) =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sha256su1)(void *vd, void *vn, void *vm) +void HELPER(crypto_sha256su1)(void *vd, void *vn, void *vm, uint32_t desc) { uint64_t *rd =3D vd; uint64_t *rn =3D vn; @@ -447,6 +457,8 @@ void HELPER(crypto_sha256su1)(void *vd, void *vn, void = *vm) =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(vd, desc); } =20 /* diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index c737a409d0..48f71e01e4 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -14517,8 +14517,7 @@ static void disas_crypto_three_reg_sha(DisasContext= *s, uint32_t insn) int rm =3D extract32(insn, 16, 5); int rn =3D extract32(insn, 5, 5); int rd =3D extract32(insn, 0, 5); - CryptoThreeOpFn *genfn; - TCGv_ptr tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr; + gen_helper_gvec_3 *genfn; bool feature; =20 if (size !=3D 0) { @@ -14560,23 +14559,22 @@ static void disas_crypto_three_reg_sha(DisasConte= xt *s, uint32_t insn) return; } =20 - tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); - tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); - tcg_rm_ptr =3D vec_full_reg_ptr(s, rm); - if (genfn) { - genfn(tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr); + gen_gvec_op3_ool(s, true, rd, rn, rm, 0, genfn); } else { TCGv_i32 tcg_opcode =3D tcg_const_i32(opcode); + TCGv_ptr tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); + TCGv_ptr tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); + TCGv_ptr tcg_rm_ptr =3D vec_full_reg_ptr(s, rm); =20 gen_helper_crypto_sha1_3reg(tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr, tcg_opcode); - tcg_temp_free_i32(tcg_opcode); - } =20 - tcg_temp_free_ptr(tcg_rd_ptr); - tcg_temp_free_ptr(tcg_rn_ptr); - tcg_temp_free_ptr(tcg_rm_ptr); + tcg_temp_free_i32(tcg_opcode); + tcg_temp_free_ptr(tcg_rd_ptr); + tcg_temp_free_ptr(tcg_rn_ptr); + tcg_temp_free_ptr(tcg_rm_ptr); + } } =20 /* Crypto two-reg SHA @@ -14591,9 +14589,8 @@ static void disas_crypto_two_reg_sha(DisasContext *= s, uint32_t insn) int opcode =3D extract32(insn, 12, 5); int rn =3D extract32(insn, 5, 5); int rd =3D extract32(insn, 0, 5); - CryptoTwoOpFn *genfn; + gen_helper_gvec_2 *genfn; bool feature; - TCGv_ptr tcg_rd_ptr, tcg_rn_ptr; =20 if (size !=3D 0) { unallocated_encoding(s); @@ -14626,14 +14623,7 @@ static void disas_crypto_two_reg_sha(DisasContext = *s, uint32_t insn) if (!fp_access_check(s)) { return; } - - tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); - tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); - - genfn(tcg_rd_ptr, tcg_rn_ptr); - - tcg_temp_free_ptr(tcg_rd_ptr); - tcg_temp_free_ptr(tcg_rn_ptr); + gen_gvec_op2_ool(s, true, rd, rn, 0, genfn); } =20 static void gen_rax1_i64(TCGv_i64 d, TCGv_i64 n, TCGv_i64 m) diff --git a/target/arm/translate.c b/target/arm/translate.c index caa98ed309..517048e982 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -5364,28 +5364,30 @@ static int disas_neon_data_insn(DisasContext *s, ui= nt32_t insn) tmp4 =3D tcg_const_i32(size); gen_helper_crypto_sha1_3reg(ptr1, ptr2, ptr3, tmp4); tcg_temp_free_i32(tmp4); + tcg_temp_free_ptr(ptr1); + tcg_temp_free_ptr(ptr2); + tcg_temp_free_ptr(ptr3); } else { /* SHA-256 */ - if (!dc_isar_feature(aa32_sha2, s) || size =3D=3D 3) { + gen_helper_gvec_3 *fn; + + if (!dc_isar_feature(aa32_sha2, s)) { return 1; } - ptr1 =3D vfp_reg_ptr(true, rd); - ptr2 =3D vfp_reg_ptr(true, rn); - ptr3 =3D vfp_reg_ptr(true, rm); switch (size) { case 0: - gen_helper_crypto_sha256h(ptr1, ptr2, ptr3); + fn =3D gen_helper_crypto_sha256h; break; case 1: - gen_helper_crypto_sha256h2(ptr1, ptr2, ptr3); + fn =3D gen_helper_crypto_sha256h2; break; case 2: - gen_helper_crypto_sha256su1(ptr1, ptr2, ptr3); + fn =3D gen_helper_crypto_sha256su1; break; + default: + return 1; } + tcg_gen_gvec_3_ool(rd_ofs, rn_ofs, rm_ofs, 16, 16, 0, fn); } - tcg_temp_free_ptr(ptr1); - tcg_temp_free_ptr(ptr2); - tcg_temp_free_ptr(ptr3); return 0; =20 case NEON_3R_VPADD_VQRDMLAH: @@ -6947,13 +6949,8 @@ static int disas_neon_data_insn(DisasContext *s, uin= t32_t insn) if (!dc_isar_feature(aa32_sha1, s) || ((rm | rd) & 1))= { return 1; } - ptr1 =3D vfp_reg_ptr(true, rd); - ptr2 =3D vfp_reg_ptr(true, rm); - - gen_helper_crypto_sha1h(ptr1, ptr2); - - tcg_temp_free_ptr(ptr1); - tcg_temp_free_ptr(ptr2); + tcg_gen_gvec_2_ool(rd_ofs, rm_ofs, 16, 16, 0, + gen_helper_crypto_sha1h); break; case NEON_2RM_SHA1SU1: if ((rm | rd) & 1) { @@ -6967,17 +6964,10 @@ static int disas_neon_data_insn(DisasContext *s, ui= nt32_t insn) } else if (!dc_isar_feature(aa32_sha1, s)) { return 1; } - ptr1 =3D vfp_reg_ptr(true, rd); - ptr2 =3D vfp_reg_ptr(true, rm); - if (q) { - gen_helper_crypto_sha256su0(ptr1, ptr2); - } else { - gen_helper_crypto_sha1su1(ptr1, ptr2); - } - tcg_temp_free_ptr(ptr1); - tcg_temp_free_ptr(ptr2); + tcg_gen_gvec_2_ool(rd_ofs, rm_ofs, 16, 16, 0, + q ? gen_helper_crypto_sha256su0 + : gen_helper_crypto_sha1su1); break; - case NEON_2RM_VMVN: tcg_gen_gvec_not(0, rd_ofs, rm_ofs, vec_size, vec_size= ); break; --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212485; cv=none; d=zohomail.com; s=zohoarc; b=jV+/eIpaY5M1/I7sdkcQVHe1kiM4/JFiqD7fZ8XsNsMTlcnDLlFf9qa2uZSFJGzFOCeyvcZAePSlf97uaqxd1La4nyBz72+ki6+jwYorJsuEkK/xL7TBCU7B7ja9/YUcIEz+jdB0l5j1UzkUQ/X5eWjYb/HRUvHJBf4jXWmoSmQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212485; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=IVR+Pu37fpOVwf26ZZgBarhOf00fJmv9hlEtbY+xKbU=; b=haqll/R3scZmg8x5I76VK5M09k37yq0xOQWa9WPpd5Wx5ixpUx+0KxSOczsuT3MagbU62X+vH7RtoYZyNkzth9dWOkRUIgYvUpx/IMWQZY/4Z5DKUPTYSLmcKAHbEQoizOvnzSye4bIhwYLL5pl0UiGM/h++29IElL41bbBfhVc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212485520416.04075223889913; Wed, 29 Apr 2020 19:08:05 -0700 (PDT) Received: from localhost ([::1]:57284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTycO-0003M7-4z for importer@patchew.org; Wed, 29 Apr 2020 22:08:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37320) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYx-0006yT-TR for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXh-0004jy-Pj for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:31 -0400 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]:42123) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXh-0004jZ-CD for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:13 -0400 Received: by mail-pg1-x541.google.com with SMTP id n11so1993858pgl.9 for ; Wed, 29 Apr 2020 19:03:12 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IVR+Pu37fpOVwf26ZZgBarhOf00fJmv9hlEtbY+xKbU=; b=Bi8D1jZ2iBLKBH23sgPuhJh6OPDKl1fqp0d2t7n44joH5QL3/1R2oktREjcH6xUtfX 82Cba/D7YBAGKww8rST+RE2GuxhgZe1s7QT7aJzuZpIs44h4eivzvil52aT1y1ovqgn/ FAbjuYB/YJi0ybsWInkjRYjIaYOCENFkeUhX+y+B35pgWkYzYLi3iScd25bT7q0b2qfO VJkCuf7UnrN3zzP/u7qgXPSpehO0R1KDvZz3Hw4LpdCyziW5s9NE1a+CelQSubnPvEV7 a2i1u17JQ2CQzVFwMB4vtkrx3NT69LmHU6e/m0nYEVbYIan8+MtIjj0zw+Huv4hCmpc5 IJgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IVR+Pu37fpOVwf26ZZgBarhOf00fJmv9hlEtbY+xKbU=; b=Dd/TJHOX1VB0KYHQri4SZ0m+FMO5Sm48CYOkF6A45rtEtmVYRp8BvvrJmNqB8iZfYT syVfLKu2r1SV3Kp9XaTXH+fG9qoyJQIT+MPhe9Fa/AByopZxNg1PNAsxVunBGwuSqQYW 1XRG6g3/0YGkR0FTTjj7MxUWkESnH1q/VqJT+E9osH6SsxFEm3KSUm2X4A3et1fGT7ch dTIxgXm84IslaR2QRsZXf1VB/Zo9DfMZzt8V0EpN/XqE/mRGmX8b9UfxwMwlPZnhqwiS bOxfqmgBhVxZhCxhvH0STyPX5n1AurJuNQgHCEwROGss7gAYYzooPMvy+O576BaE/Lio 0akQ== X-Gm-Message-State: AGi0PuZH98jCqlb9VHf1AgqW2jGAKk8Kw2XZL1d+mvT6t8xSo9qXfBdO IU4WCTnclit9om0df9d/iq+ywGg5i4Q= X-Google-Smtp-Source: APiQypKCL/Uv3sB360vEqMXo6WVMMcMt5AZZhlyWwnaKDQajZi54wrM4TOuM3Ql3OdVZ8BMXh/TAyg== X-Received: by 2002:a62:5c6:: with SMTP id 189mr1145273pff.39.1588212191346; Wed, 29 Apr 2020 19:03:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 5/9] target/arm: Split helper_crypto_sha1_3reg Date: Wed, 29 Apr 2020 19:02:59 -0700 Message-Id: <20200430020303.20264-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::541; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x541.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::541 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Rather than passing an opcode to a helper, fully decode the operation at translate time. Use clear_tail_16 to zap the balance of the SVE register with the AdvSIMD write. Signed-off-by: Richard Henderson --- target/arm/helper.h | 5 +- target/arm/crypto_helper.c | 99 ++++++++++++++++++++++++-------------- target/arm/translate-a64.c | 29 +++++------ target/arm/translate.c | 70 +++++++++++++++------------ 4 files changed, 116 insertions(+), 87 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 07466ddc6c..24aca28a05 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -516,7 +516,10 @@ DEF_HELPER_FLAGS_2(neon_qzip32, TCG_CALL_NO_RWG, void,= ptr, ptr) DEF_HELPER_FLAGS_4(crypto_aese, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_3(crypto_aesmc, TCG_CALL_NO_RWG, void, ptr, ptr, i32) =20 -DEF_HELPER_FLAGS_4(crypto_sha1_3reg, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= i32) +DEF_HELPER_FLAGS_4(crypto_sha1su0, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(crypto_sha1c, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(crypto_sha1p, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(crypto_sha1m, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_3(crypto_sha1h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(crypto_sha1su1, TCG_CALL_NO_RWG, void, ptr, ptr, i32) =20 diff --git a/target/arm/crypto_helper.c b/target/arm/crypto_helper.c index 7124745c32..636683d0f1 100644 --- a/target/arm/crypto_helper.c +++ b/target/arm/crypto_helper.c @@ -24,11 +24,11 @@ union CRYPTO_STATE { }; =20 #ifdef HOST_WORDS_BIGENDIAN -#define CR_ST_BYTE(state, i) (state.bytes[(15 - (i)) ^ 8]) -#define CR_ST_WORD(state, i) (state.words[(3 - (i)) ^ 2]) +#define CR_ST_BYTE(state, i) ((state).bytes[(15 - (i)) ^ 8]) +#define CR_ST_WORD(state, i) ((state).words[(3 - (i)) ^ 2]) #else -#define CR_ST_BYTE(state, i) (state.bytes[i]) -#define CR_ST_WORD(state, i) (state.words[i]) +#define CR_ST_BYTE(state, i) ((state).bytes[i]) +#define CR_ST_WORD(state, i) ((state).words[i]) #endif =20 /* @@ -258,49 +258,74 @@ static uint32_t maj(uint32_t x, uint32_t y, uint32_t = z) return (x & y) | ((x | y) & z); } =20 -void HELPER(crypto_sha1_3reg)(void *vd, void *vn, void *vm, uint32_t op) +void HELPER(crypto_sha1su0)(void *vd, void *vn, void *vm, uint32_t desc) +{ + uint64_t *d =3D vd, *n =3D vn, *m =3D vm; + uint64_t d0, d1; + + d0 =3D d[1] ^ d[0] ^ m[0]; + d1 =3D n[0] ^ d[1] ^ m[1]; + d[0] =3D d0; + d[1] =3D d1; + + clear_tail_16(vd, desc); +} + +static inline void crypto_sha1_3reg(uint64_t *rd, uint64_t *rn, + uint64_t *rm, uint32_t desc, + uint32_t (*fn)(union CRYPTO_STATE *d)) { - uint64_t *rd =3D vd; - uint64_t *rn =3D vn; - uint64_t *rm =3D vm; union CRYPTO_STATE d =3D { .l =3D { rd[0], rd[1] } }; union CRYPTO_STATE n =3D { .l =3D { rn[0], rn[1] } }; union CRYPTO_STATE m =3D { .l =3D { rm[0], rm[1] } }; + int i; =20 - if (op =3D=3D 3) { /* sha1su0 */ - d.l[0] ^=3D d.l[1] ^ m.l[0]; - d.l[1] ^=3D n.l[0] ^ m.l[1]; - } else { - int i; + for (i =3D 0; i < 4; i++) { + uint32_t t =3D fn(&d); =20 - for (i =3D 0; i < 4; i++) { - uint32_t t; + t +=3D rol32(CR_ST_WORD(d, 0), 5) + CR_ST_WORD(n, 0) + + CR_ST_WORD(m, i); =20 - switch (op) { - case 0: /* sha1c */ - t =3D cho(CR_ST_WORD(d, 1), CR_ST_WORD(d, 2), CR_ST_WORD(d= , 3)); - break; - case 1: /* sha1p */ - t =3D par(CR_ST_WORD(d, 1), CR_ST_WORD(d, 2), CR_ST_WORD(d= , 3)); - break; - case 2: /* sha1m */ - t =3D maj(CR_ST_WORD(d, 1), CR_ST_WORD(d, 2), CR_ST_WORD(d= , 3)); - break; - default: - g_assert_not_reached(); - } - t +=3D rol32(CR_ST_WORD(d, 0), 5) + CR_ST_WORD(n, 0) - + CR_ST_WORD(m, i); - - CR_ST_WORD(n, 0) =3D CR_ST_WORD(d, 3); - CR_ST_WORD(d, 3) =3D CR_ST_WORD(d, 2); - CR_ST_WORD(d, 2) =3D ror32(CR_ST_WORD(d, 1), 2); - CR_ST_WORD(d, 1) =3D CR_ST_WORD(d, 0); - CR_ST_WORD(d, 0) =3D t; - } + CR_ST_WORD(n, 0) =3D CR_ST_WORD(d, 3); + CR_ST_WORD(d, 3) =3D CR_ST_WORD(d, 2); + CR_ST_WORD(d, 2) =3D ror32(CR_ST_WORD(d, 1), 2); + CR_ST_WORD(d, 1) =3D CR_ST_WORD(d, 0); + CR_ST_WORD(d, 0) =3D t; } rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(rd, desc); +} + +static uint32_t do_sha1c(union CRYPTO_STATE *d) +{ + return cho(CR_ST_WORD(*d, 1), CR_ST_WORD(*d, 2), CR_ST_WORD(*d, 3)); +} + +void HELPER(crypto_sha1c)(void *vd, void *vn, void *vm, uint32_t desc) +{ + crypto_sha1_3reg(vd, vn, vm, desc, do_sha1c); +} + +static uint32_t do_sha1p(union CRYPTO_STATE *d) +{ + return par(CR_ST_WORD(*d, 1), CR_ST_WORD(*d, 2), CR_ST_WORD(*d, 3)); +} + +void HELPER(crypto_sha1p)(void *vd, void *vn, void *vm, uint32_t desc) +{ + crypto_sha1_3reg(vd, vn, vm, desc, do_sha1p); +} + +static uint32_t do_sha1m(union CRYPTO_STATE *d) +{ + return maj(CR_ST_WORD(*d, 1), CR_ST_WORD(*d, 2), CR_ST_WORD(*d, 3)); +} + +void HELPER(crypto_sha1m)(void *vd, void *vn, void *vm, uint32_t desc) +{ + crypto_sha1_3reg(vd, vn, vm, desc, do_sha1m); } =20 void HELPER(crypto_sha1h)(void *vd, void *vm, uint32_t desc) diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 48f71e01e4..81ad287811 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -14527,10 +14527,19 @@ static void disas_crypto_three_reg_sha(DisasConte= xt *s, uint32_t insn) =20 switch (opcode) { case 0: /* SHA1C */ + genfn =3D gen_helper_crypto_sha1c; + feature =3D dc_isar_feature(aa64_sha1, s); + break; case 1: /* SHA1P */ + genfn =3D gen_helper_crypto_sha1p; + feature =3D dc_isar_feature(aa64_sha1, s); + break; case 2: /* SHA1M */ + genfn =3D gen_helper_crypto_sha1m; + feature =3D dc_isar_feature(aa64_sha1, s); + break; case 3: /* SHA1SU0 */ - genfn =3D NULL; + genfn =3D gen_helper_crypto_sha1su0; feature =3D dc_isar_feature(aa64_sha1, s); break; case 4: /* SHA256H */ @@ -14558,23 +14567,7 @@ static void disas_crypto_three_reg_sha(DisasContex= t *s, uint32_t insn) if (!fp_access_check(s)) { return; } - - if (genfn) { - gen_gvec_op3_ool(s, true, rd, rn, rm, 0, genfn); - } else { - TCGv_i32 tcg_opcode =3D tcg_const_i32(opcode); - TCGv_ptr tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); - TCGv_ptr tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); - TCGv_ptr tcg_rm_ptr =3D vec_full_reg_ptr(s, rm); - - gen_helper_crypto_sha1_3reg(tcg_rd_ptr, tcg_rn_ptr, - tcg_rm_ptr, tcg_opcode); - - tcg_temp_free_i32(tcg_opcode); - tcg_temp_free_ptr(tcg_rd_ptr); - tcg_temp_free_ptr(tcg_rn_ptr); - tcg_temp_free_ptr(tcg_rm_ptr); - } + gen_gvec_op3_ool(s, true, rd, rn, rm, 0, genfn); } =20 /* Crypto two-reg SHA diff --git a/target/arm/translate.c b/target/arm/translate.c index 517048e982..34ea5e53e7 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -5305,7 +5305,7 @@ static int disas_neon_data_insn(DisasContext *s, uint= 32_t insn) int vec_size; uint32_t imm; TCGv_i32 tmp, tmp2, tmp3, tmp4, tmp5; - TCGv_ptr ptr1, ptr2, ptr3; + TCGv_ptr ptr1; TCGv_i64 tmp64; =20 /* FIXME: this access check should not take precedence over UNDEF @@ -5353,38 +5353,46 @@ static int disas_neon_data_insn(DisasContext *s, ui= nt32_t insn) */ if (!q) { return 1; - } - if (!u) { /* SHA-1 */ - if (!dc_isar_feature(aa32_sha1, s)) { - return 1; - } - ptr1 =3D vfp_reg_ptr(true, rd); - ptr2 =3D vfp_reg_ptr(true, rn); - ptr3 =3D vfp_reg_ptr(true, rm); - tmp4 =3D tcg_const_i32(size); - gen_helper_crypto_sha1_3reg(ptr1, ptr2, ptr3, tmp4); - tcg_temp_free_i32(tmp4); - tcg_temp_free_ptr(ptr1); - tcg_temp_free_ptr(ptr2); - tcg_temp_free_ptr(ptr3); - } else { /* SHA-256 */ + } else { gen_helper_gvec_3 *fn; =20 - if (!dc_isar_feature(aa32_sha2, s)) { - return 1; - } - switch (size) { - case 0: - fn =3D gen_helper_crypto_sha256h; - break; - case 1: - fn =3D gen_helper_crypto_sha256h2; - break; - case 2: - fn =3D gen_helper_crypto_sha256su1; - break; - default: - return 1; + if (!u) { /* SHA-1 */ + if (!dc_isar_feature(aa32_sha1, s)) { + return 1; + } + switch (size) { + case 0: + fn =3D gen_helper_crypto_sha1c; + break; + case 1: + fn =3D gen_helper_crypto_sha1p; + break; + case 2: + fn =3D gen_helper_crypto_sha1m; + break; + case 3: + fn =3D gen_helper_crypto_sha1su0; + break; + default: + g_assert_not_reached(); + } + } else { /* SHA-256 */ + if (!dc_isar_feature(aa32_sha2, s)) { + return 1; + } + switch (size) { + case 0: + fn =3D gen_helper_crypto_sha256h; + break; + case 1: + fn =3D gen_helper_crypto_sha256h2; + break; + case 2: + fn =3D gen_helper_crypto_sha256su1; + break; + default: + return 1; + } } tcg_gen_gvec_3_ool(rd_ofs, rn_ofs, rm_ofs, 16, 16, 0, fn); } --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212609; cv=none; d=zohomail.com; s=zohoarc; b=Umrt8vidWZ7s0mJOQWaknOcwVTrc+zuT2CUWEL+9TPS6/Of6JmuDm3wmco5UVTY8jyHdGvDs8Bjfgo84V8ffa5dVFU3H69d31/Wyh+Z0CIEKKuvQY4WrZ9aedFpBo2VIxgfo9i/fbLI53X02L5moGEPTFrv7j6XaiPEz0zKt1NQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212609; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8L/HzFlnUepBjkSitOTTfcu9xtOn9f9zC8OK1sAw3q4=; b=IfS966G618WD5ztHqzzn/eAolcynFq8GeugeyJjlZVhX+h/MdMJ01gVC/NUPoXvWH5KoJK4aFYvTR6Z9/Fik0Nf18AT6BbbRF9K3siz906+QeP6g989s/K7kT9iey4w0a31Z7kd9bjuC3f9owFITXbn6/mEgeWbSEojpivKpTfA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212609299362.44970788038574; Wed, 29 Apr 2020 19:10:09 -0700 (PDT) Received: from localhost ([::1]:34390 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyeO-0005dq-2J for importer@patchew.org; Wed, 29 Apr 2020 22:10:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37324) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYy-0006yU-Kh for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXi-0004kA-JU for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:32 -0400 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]:40054) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXi-0004jt-67 for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:14 -0400 Received: by mail-pg1-x544.google.com with SMTP id n16so1997455pgb.7 for ; Wed, 29 Apr 2020 19:03:13 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8L/HzFlnUepBjkSitOTTfcu9xtOn9f9zC8OK1sAw3q4=; b=ah6WGcjs+N49ahiCGocgT+kV8ZubTY+lxR1bFn5FpRkJ3TWvKAKsGuW+6XsIm4N94Z caNVnyigjioy4vE+WSDsqzhzhZZBfX2JHJhmrBJ/hP7hQAI//KDJqE5j2TZzL6q99zLo qCSW7URZXi2XuvGiJ2YeLlCl4m+cJeZXjE+emPVwn7ydEU47BT+xCjnQu2s14X/JlEVW fmAZsPhDcTnkYlol9VTJALwWB4UCSTeCwg1Kp6xEjh+lPM4nTJwP7WkEkZfMgSsUN32g XH+MrAVH3JIaeeRDufh8u0bZM84k7e66UxIMCdxS2FtQTUjQ/bCmLlz/Ry3P6RKhdMwv LnQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8L/HzFlnUepBjkSitOTTfcu9xtOn9f9zC8OK1sAw3q4=; b=Qxhv6YcqgTlZMKtNW0jk9pKuk3KXLExVd68DICda3b47/UeTZ/6xmHcUM8lbAA6VpR vxZ9pio2cWm53W6rQ3kmDMh+N9VzApwk5JLjRyBRkgO1M67zqr4lgfu/dUIhc+s79d3R 7lU/kWQ11M8vDToxfF2HMPkpAS0Q73o5sBzfshigysv8+OdHvrBU9mKl7d4wrATWf/pH 1rSSH48qhmzXq07owVXolIOAXSbE7Qa3oz0yyNXzeQ3HPv86VsIm9ksUS0qJvUZEhO3i EkjUzoJvgigzDZ/RLxg0h8yMg6zZmeLToQN10tK1XYwREVkRaOnJ3zYj5KnNKyBOvxfD g6wg== X-Gm-Message-State: AGi0PubSdJbEoh9CEdJ9boA4EJaWQ/jMnHMy9ISUcWL97GQrRfpC6vnH tzNNaruC7vrhuiEzV1krq8/7r1OJTwM= X-Google-Smtp-Source: APiQypLDxKzmnmm5w2w7qfDnnUGnzoWJKE9CSwmEg3ObxoJPTYraSgS+Pby+X+uTjuRLW8kmAaIQBw== X-Received: by 2002:aa7:8118:: with SMTP id b24mr1099773pfi.321.1588212192332; Wed, 29 Apr 2020 19:03:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 6/9] target/arm: Split helper_crypto_sm3tt Date: Wed, 29 Apr 2020 19:03:00 -0700 Message-Id: <20200430020303.20264-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::544; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x544.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::544 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Rather than passing an opcode to a helper, fully decode the operation at translate time. Use clear_tail_16 to zap the balance of the SVE register with the AdvSIMD write. Signed-off-by: Richard Henderson --- target/arm/helper.h | 5 ++++- target/arm/crypto_helper.c | 24 ++++++++++++++++++------ target/arm/translate-a64.c | 21 +++++---------------- 3 files changed, 27 insertions(+), 23 deletions(-) diff --git a/target/arm/helper.h b/target/arm/helper.h index 24aca28a05..e891f91e65 100644 --- a/target/arm/helper.h +++ b/target/arm/helper.h @@ -534,7 +534,10 @@ DEF_HELPER_FLAGS_3(crypto_sha512su0, TCG_CALL_NO_RWG, = void, ptr, ptr, i32) DEF_HELPER_FLAGS_4(crypto_sha512su1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 -DEF_HELPER_FLAGS_5(crypto_sm3tt, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32= , i32) +DEF_HELPER_FLAGS_4(crypto_sm3tt1a, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(crypto_sm3tt1b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(crypto_sm3tt2a, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(crypto_sm3tt2b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) DEF_HELPER_FLAGS_4(crypto_sm3partw1, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(crypto_sm3partw2, TCG_CALL_NO_RWG, diff --git a/target/arm/crypto_helper.c b/target/arm/crypto_helper.c index 636683d0f1..c76806dc8d 100644 --- a/target/arm/crypto_helper.c +++ b/target/arm/crypto_helper.c @@ -632,15 +632,14 @@ void HELPER(crypto_sm3partw2)(void *vd, void *vn, voi= d *vm, uint32_t desc) clear_tail_16(vd, desc); } =20 -void HELPER(crypto_sm3tt)(void *vd, void *vn, void *vm, uint32_t imm2, - uint32_t opcode) +static inline void QEMU_ALWAYS_INLINE +crypto_sm3tt(uint64_t *rd, uint64_t *rn, uint64_t *rm, + uint32_t desc, uint32_t opcode) { - uint64_t *rd =3D vd; - uint64_t *rn =3D vn; - uint64_t *rm =3D vm; union CRYPTO_STATE d =3D { .l =3D { rd[0], rd[1] } }; union CRYPTO_STATE n =3D { .l =3D { rn[0], rn[1] } }; union CRYPTO_STATE m =3D { .l =3D { rm[0], rm[1] } }; + uint32_t imm2 =3D simd_data(desc); uint32_t t; =20 assert(imm2 < 4); @@ -655,7 +654,7 @@ void HELPER(crypto_sm3tt)(void *vd, void *vn, void *vm,= uint32_t imm2, /* SM3TT2B */ t =3D cho(CR_ST_WORD(d, 3), CR_ST_WORD(d, 2), CR_ST_WORD(d, 1)); } else { - g_assert_not_reached(); + qemu_build_not_reached(); } =20 t +=3D CR_ST_WORD(d, 0) + CR_ST_WORD(m, imm2); @@ -680,8 +679,21 @@ void HELPER(crypto_sm3tt)(void *vd, void *vn, void *vm= , uint32_t imm2, =20 rd[0] =3D d.l[0]; rd[1] =3D d.l[1]; + + clear_tail_16(rd, desc); } =20 +#define DO_SM3TT(NAME, OPCODE) \ + void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ + { crypto_sm3tt(vd, vn, vm, desc, OPCODE); } + +DO_SM3TT(crypto_sm3tt1a, 0) +DO_SM3TT(crypto_sm3tt1b, 1) +DO_SM3TT(crypto_sm3tt2a, 2) +DO_SM3TT(crypto_sm3tt2b, 3) + +#undef DO_SM3TT + static uint8_t const sm4_sbox[] =3D { 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05, diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c index 81ad287811..0fecc9b06f 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -14902,13 +14902,15 @@ static void disas_crypto_xar(DisasContext *s, uin= t32_t insn) */ static void disas_crypto_three_reg_imm2(DisasContext *s, uint32_t insn) { + static gen_helper_gvec_3 * const fns[4] =3D { + gen_helper_crypto_sm3tt1a, gen_helper_crypto_sm3tt1b, + gen_helper_crypto_sm3tt2a, gen_helper_crypto_sm3tt2b, + }; int opcode =3D extract32(insn, 10, 2); int imm2 =3D extract32(insn, 12, 2); int rm =3D extract32(insn, 16, 5); int rn =3D extract32(insn, 5, 5); int rd =3D extract32(insn, 0, 5); - TCGv_ptr tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr; - TCGv_i32 tcg_imm2, tcg_opcode; =20 if (!dc_isar_feature(aa64_sm3, s)) { unallocated_encoding(s); @@ -14919,20 +14921,7 @@ static void disas_crypto_three_reg_imm2(DisasConte= xt *s, uint32_t insn) return; } =20 - tcg_rd_ptr =3D vec_full_reg_ptr(s, rd); - tcg_rn_ptr =3D vec_full_reg_ptr(s, rn); - tcg_rm_ptr =3D vec_full_reg_ptr(s, rm); - tcg_imm2 =3D tcg_const_i32(imm2); - tcg_opcode =3D tcg_const_i32(opcode); - - gen_helper_crypto_sm3tt(tcg_rd_ptr, tcg_rn_ptr, tcg_rm_ptr, tcg_imm2, - tcg_opcode); - - tcg_temp_free_ptr(tcg_rd_ptr); - tcg_temp_free_ptr(tcg_rn_ptr); - tcg_temp_free_ptr(tcg_rm_ptr); - tcg_temp_free_i32(tcg_imm2); - tcg_temp_free_i32(tcg_opcode); + gen_gvec_op3_ool(s, true, rd, rn, rm, imm2, fns[opcode]); } =20 /* C3.6 Data processing - SIMD, inc Crypto --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212684; cv=none; d=zohomail.com; s=zohoarc; b=m2HNE9nEWOYeIFfS/Zw4X0nwbDc6stqelBtE8ioBM5mBr2Y2kJrwKVJzXdZN6L23QvBIrpmV00N6xeUwZ1AOBbHPruuXek1yxx/hCxd/D3TwtqUw26tt6hQ65ZMXTvR5sTbb8EpAL9Lg0L9jF8G2JS7TiwSM5mVzv8/nQLDB9xY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212684; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gPebZLEq22TKfPbe2B1hfEuFz1pSf7HcPvbgd2/oRv4=; b=b1/fl266VepBP0Fsut8pjYU3lV5UtG5yMwCe2Yu3o6GlVea8uj9+pFmvqGQfPWJ5TsbYdicTvwpKpKCPfNq67O2fawoM6nY87duVz2M3zy57PcBvyqD8kXPyvkp6m5go23t3zlgZ7fJ1oz8IPmDl5iE5Uj5aCjjXcOLlbPsVMcE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212684658293.9657515057603; Wed, 29 Apr 2020 19:11:24 -0700 (PDT) Received: from localhost ([::1]:36598 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyfb-0006r7-Ba for importer@patchew.org; Wed, 29 Apr 2020 22:11:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37328) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYz-0006yV-6q for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXj-0004kL-KV for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:32 -0400 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]:39901) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXj-0004k7-7f for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:15 -0400 Received: by mail-pg1-x541.google.com with SMTP id d3so2002870pgj.6 for ; Wed, 29 Apr 2020 19:03:14 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gPebZLEq22TKfPbe2B1hfEuFz1pSf7HcPvbgd2/oRv4=; b=PV0pLBEHjRV/gNiDUYzWQtpWc6TVpTeRt2gEKaMpvbi7snT1KSMzF0lAozLGwtX+cN Xn+ygt0+LR/ZuD9RXb1VyxV4XE1CRZZXrqpIUzgTNGo4VGV0anixSV+opcitaZD/ZSSp eeMuu8aqHAbCxKfScLcpbfHRYvsrsnVit++v8XzGMX3S/g0ocyKs0DaJTjKC0M0KpCyt XRkdScWG1dR80MTet/1QUkpPZiRfAP3hqsC2jE0eB/Zaj6WEyRBS69i7Hwm0XfI6OKga zIIBlCH7Wl4cJSOV1vv11SKU8FSvpbD+KP/4g0CMnPg1mRy05BBMpwkH57IpYs854Nu+ Vg+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=gPebZLEq22TKfPbe2B1hfEuFz1pSf7HcPvbgd2/oRv4=; b=hUrCYQ5NvoSL/Equr0dw/WV/RYsQaEYihBtMrgl2KT/IY0Etv3fxIYHZh1bsbDkZJi Gmj3w/HwUUpygF0gPb/KQbEBysmxb8UQRKJd9PLSwyX7z3bHWDcJ5sYmQiMhrk9EfIDD TDsVXZIS39Mj+/DNWTKD8rV+z8QBAsvUZ7A5obbomdBoZ9l9aQ4FlCVm7LQ3Z9uUOHDb QTnXB67IiBt5Ar8l5lPRHCfZ6dnK30qZeOFXBsTi25xmcN65H/V/8lMP9SibjUGxBqST vRnRNxBil0Ddi88Ut2U6eL3iq0n14RAc2YqZDHGcaDnV0Xi6N/v5QIgSzuF60vyvJ1vz rrDQ== X-Gm-Message-State: AGi0PuYHO4VUAoe1ym1e4MhBWLIOkm1jdrINQfE0rnV7/hN3FLckOj/N xawEv5SQMCfhJRiXqpMN1MKey1uGoOQ= X-Google-Smtp-Source: APiQypKslco0vWO6xTHi8aCd60X2ufJCKcYcchaY5Y/SGtcoz9BkbFVHbhsYb1+K3cNwFmL3dOR7yQ== X-Received: by 2002:a62:7c16:: with SMTP id x22mr1097817pfc.267.1588212193543; Wed, 29 Apr 2020 19:03:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 7/9] target/arm: Implement SVE2 crypto unary operations Date: Wed, 29 Apr 2020 19:03:01 -0700 Message-Id: <20200430020303.20264-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::541; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x541.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::541 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/sve.decode | 6 ++++++ target/arm/translate-sve.c | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/target/arm/sve.decode b/target/arm/sve.decode index b73b64c3f2..04985d2bb8 100644 --- a/target/arm/sve.decode +++ b/target/arm/sve.decode @@ -1551,3 +1551,9 @@ STNT1_zprz 1110010 .. 00 ..... 001 ... ..... ...= .. \ # SVE2 32-bit scatter non-temporal store (vector plus scalar) STNT1_zprz 1110010 .. 10 ..... 001 ... ..... ..... \ @rprr_scatter_store xs=3D0 esz=3D2 scale=3D0 + +### SVE2 Crypto Extensions + +# SVE2 crypto unary operations +# AESMC and AESIMC +AESMC 01000101 00 10000011100 decrypt:1 00000 rd:5 diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c index 413000df3b..44dd1fe2b0 100644 --- a/target/arm/translate-sve.c +++ b/target/arm/translate-sve.c @@ -8174,3 +8174,17 @@ static bool trans_USDOT_zzzz(DisasContext *s, arg_US= DOT_zzzz *a) } return true; } + +static bool trans_AESMC(DisasContext *s, arg_AESMC *a) +{ + if (!dc_isar_feature(aa64_sve2_aes, s)) { + return false; + } + if (sve_access_check(s)) { + unsigned vsz =3D vec_full_reg_size(s); + unsigned rd =3D vec_full_reg_offset(s, a->rd); + tcg_gen_gvec_2_ool(rd, rd, vsz, vsz, a->decrypt, + gen_helper_crypto_aesmc); + } + return true; +} --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212748; cv=none; d=zohomail.com; s=zohoarc; b=Lm0HqQCegL/T5XARsUB3Uj6s3mdK+hespvwIYmrEOONQJ6L8SNs2ZEyfnykqoz5Er55XDNgX9fFesXbCB0E31E9r16dX6jzrXhwW1ZKnMenVeTS0F1AzJlVZ0pNzkjwSDTk1L8DRhzX1vTAkyRX2yZPXMzBdrtslZZlqHgBH8Wo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212748; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Cf10Ltp+LjL7U9fSobfmU538FUNhYdLaUawwYU85+AA=; b=T2vAJegrxuhu0IoRk6Qno+5ANa5REubAewuMhLBRPS2dzwl1tTytPDMOhnT+sYk92Yl0L3wCX2kOcMk8FsYRlTCKErs2Uk8xs24FKISPE3cqysiOspRNtzV6dcs9DRJtWBlw+8PLRS/w9CQakaVU+lOkemwzzK3qJcMFRNfZQ9c= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212748409691.9281731451682; Wed, 29 Apr 2020 19:12:28 -0700 (PDT) Received: from localhost ([::1]:38974 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTygc-0007x7-VN for importer@patchew.org; Wed, 29 Apr 2020 22:12:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37332) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyYz-0006yW-Ri for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXk-0004kZ-TF for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:33 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:54284) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXk-0004kQ-G4 for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:16 -0400 Received: by mail-pj1-x102a.google.com with SMTP id y6so56703pjc.4 for ; Wed, 29 Apr 2020 19:03:16 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Cf10Ltp+LjL7U9fSobfmU538FUNhYdLaUawwYU85+AA=; b=lEXZ2Da2l0IswFDgh0qW9nxV/bsE1I6HDZLXcKaZmlcRzgsHYP84JnJNk2E0zLmwZa /U4pXFjowlyXxRtRn8NzN3PRzaLLi+xjcmqOvQG8HGICZx6yEXqB3AllVP0YZkSTickZ Jw6geE9GqP7KpMkSGXUCjHb5hkqbuaZF/qZZxy4gH3QMnMZoypfCBC/g7pBRzO6mpzTz qmOh/pR1CwVovtvtU0PF59o75a4nuxdoyJGYnYlWUtq0x6EXpS33KUvW4hV8hm8rVT9u ENx5nxlHqv0SH455VqfbYJhEyNBoUs8pFwwYl3WT/W7Hun1/nZR2nSEM9C925ulBFqBb JOSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cf10Ltp+LjL7U9fSobfmU538FUNhYdLaUawwYU85+AA=; b=i7n4aDVgcq38xMqipnHEoXYk61bePlxDT4RraT424m16lstnaSCz/vg9rYXUgNY178 P1uEGF7L252Cj/tGwg7/o/LIp/uetET40+TOk4wBefM4+XhnCzMe4MRWwuVC6lyx+zZE 1/rnPGbf2BCQvQnXts+h7/6Ftl7gYJnMrDrSKh1GacX3zR3+WoJcZh700Q+vw+ucMxvt mODcWBbLRyZew677ZYRGDjhtndmoKG7KdnLjc4lnX9mLFeKzVsO/jIu62Lz39JqXknN2 iMhZi5zqtJcO1oEgRGZvPMoX0oLbJWUvDEXP+Tr7Vqc922tBHGdnWkMnHecCn23Pe68N J8Tg== X-Gm-Message-State: AGi0PuYFcUHB1o6G3GuY2W4Dvvil34PH5pcBqbTY5rdHb7jwE9YeRLv4 tFWfPttIYXfS61onmGyHDidN+98eyxY= X-Google-Smtp-Source: APiQypI9wG6qDmbA3qPRWx6iqBPUUH71BInJKioZwBzM7kdTTAmlMp+2NeOxcvtxVOygN0MnA7MrUQ== X-Received: by 2002:a17:902:9a03:: with SMTP id v3mr1337175plp.272.1588212194808; Wed, 29 Apr 2020 19:03:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 8/9] target/arm: Implement SVE2 crypto destructive binary operations Date: Wed, 29 Apr 2020 19:03:02 -0700 Message-Id: <20200430020303.20264-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::102a X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/cpu.h | 5 +++++ target/arm/sve.decode | 7 ++++++ target/arm/translate-sve.c | 45 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 332c67bbb0..4f09dd42ba 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3870,6 +3870,11 @@ static inline bool isar_feature_aa64_sve2_bitperm(co= nst ARMISARegisters *id) return FIELD_EX64(id->id_aa64zfr0, ID_AA64ZFR0, BITPERM) !=3D 0; } =20 +static inline bool isar_feature_aa64_sve2_sm4(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64zfr0, ID_AA64ZFR0, SM4) !=3D 0; +} + static inline bool isar_feature_aa64_sve2_i8mm(const ARMISARegisters *id) { return FIELD_EX64(id->id_aa64zfr0, ID_AA64ZFR0, I8MM) !=3D 0; diff --git a/target/arm/sve.decode b/target/arm/sve.decode index 04985d2bb8..149de7949b 100644 --- a/target/arm/sve.decode +++ b/target/arm/sve.decode @@ -118,6 +118,8 @@ @pd_pn_pm ........ esz:2 .. rm:4 ....... rn:4 . rd:4 &rrr_esz @rdn_rm ........ esz:2 ...... ...... rm:5 rd:5 \ &rrr_esz rn=3D%reg_movprfx +@rdn_rm_e0 ........ .. ...... ...... rm:5 rd:5 \ + &rrr_esz rn=3D%reg_movprfx esz=3D0 @rdn_sh_i8u ........ esz:2 ...... ...... ..... rd:5 \ &rri_esz rn=3D%reg_movprfx imm=3D%sh8_i8u @rdn_i8u ........ esz:2 ...... ... imm:8 rd:5 \ @@ -1557,3 +1559,8 @@ STNT1_zprz 1110010 .. 10 ..... 001 ... ..... ...= .. \ # SVE2 crypto unary operations # AESMC and AESIMC AESMC 01000101 00 10000011100 decrypt:1 00000 rd:5 + +# SVE2 crypto destructive binary operations +AESE 01000101 00 10001 0 11100 0 ..... ..... @rdn_rm_e0 +AESD 01000101 00 10001 0 11100 1 ..... ..... @rdn_rm_e0 +SM4E 01000101 00 10001 1 11100 0 ..... ..... @rdn_rm_e0 diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c index 44dd1fe2b0..91e71882d6 100644 --- a/target/arm/translate-sve.c +++ b/target/arm/translate-sve.c @@ -8188,3 +8188,48 @@ static bool trans_AESMC(DisasContext *s, arg_AESMC *= a) } return true; } + +static bool do_aese(DisasContext *s, arg_rrr_esz *a, bool decrypt) +{ + if (!dc_isar_feature(aa64_sve2_aes, s)) { + return false; + } + if (sve_access_check(s)) { + unsigned vsz =3D vec_full_reg_size(s); + tcg_gen_gvec_3_ool(vec_full_reg_offset(s, a->rd), + vec_full_reg_offset(s, a->rn), + vec_full_reg_offset(s, a->rm), + vsz, vsz, decrypt, gen_helper_crypto_aese); + } + return true; +} + +static bool trans_AESE(DisasContext *s, arg_rrr_esz *a) +{ + return do_aese(s, a, false); +} + +static bool trans_AESD(DisasContext *s, arg_rrr_esz *a) +{ + return do_aese(s, a, true); +} + +static bool do_sm4(DisasContext *s, arg_rrr_esz *a, gen_helper_gvec_3 *fn) +{ + if (!dc_isar_feature(aa64_sve2_sm4, s)) { + return false; + } + if (sve_access_check(s)) { + unsigned vsz =3D vec_full_reg_size(s); + tcg_gen_gvec_3_ool(vec_full_reg_offset(s, a->rd), + vec_full_reg_offset(s, a->rn), + vec_full_reg_offset(s, a->rm), + vsz, vsz, 0, fn); + } + return true; +} + +static bool trans_SM4E(DisasContext *s, arg_rrr_esz *a) +{ + return do_sm4(s, a, gen_helper_crypto_sm4e); +} --=20 2.20.1 From nobody Sat May 18 21:26:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1588212395; cv=none; d=zohomail.com; s=zohoarc; b=khj62aRzbMRayeXWn+30xwJZCIDIQYGAXaEta6Lc8r+6hmZW5R4dyg+cj8uzQ99oUqLbTm8q4mWTS2VSNAksRAjl45/SOTMljQMm0HbhYH7GhSZnE912RQie2ioNdamiE72iZpVdBByKo/bwlqJITbmwcg+O3tJQzzbr/Gu6f5w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1588212395; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=cjohu6TAlmU+sTz6uKGa1YpUWk5EN4khFj5+kP1VER4=; b=fbaDo6rj02wSZuOyHvIcIJc74711oZJu+xWy2civ/0tx1lnT85PIPS2Hldr0VrVf1TLykn5XXVfaF+DI0U3r4d66dzx7ZtsL/6K7h7vmVq+HKPC/NIz9KmNBOiYjLRal4e+X7YC8qcIjc7+IlYzVV6tUUX76cbabiUauHEHYlBk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1588212395220250.05578327852083; Wed, 29 Apr 2020 19:06:35 -0700 (PDT) Received: from localhost ([::1]:50382 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyav-0000Yh-Qb for importer@patchew.org; Wed, 29 Apr 2020 22:06:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37336) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jTyZ0-0006yX-Dt for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.90_1) (envelope-from ) id 1jTyXm-0004kn-1r for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:04:34 -0400 Received: from mail-pj1-x1030.google.com ([2607:f8b0:4864:20::1030]:39182) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jTyXl-0004kX-KM for qemu-devel@nongnu.org; Wed, 29 Apr 2020 22:03:17 -0400 Received: by mail-pj1-x1030.google.com with SMTP id e6so58735pjt.4 for ; Wed, 29 Apr 2020 19:03:17 -0700 (PDT) Received: from localhost.localdomain (174-21-149-226.tukw.qwest.net. [174.21.149.226]) by smtp.gmail.com with ESMTPSA id y3sm409284pjb.41.2020.04.29.19.03.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 29 Apr 2020 19:03:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cjohu6TAlmU+sTz6uKGa1YpUWk5EN4khFj5+kP1VER4=; b=GxJFd+wcptgvAc8o9Ug5rgfsc1jheKv+QDYG0qSsTRtI39VYzF+cfv1yu3naRPepH2 z225AslqQcljfFqUOH9a6cFn5KvX28h3PPlx3scj4tB0/HQV0/0bdFR0poZJ3k+fThiF VhleY6+krAAsE3Dv1o3eXuq/BKsDIbiGPIUvexBXYmL73uj1o0vfNzCE19KnBOSmccSn +dD1ZwmmCt2mSrtSFp7j7Kbmrc3GGcHZCsxhAG9NB+LH9geqoXle9sgJRhK/P/jAYsi/ UbdSLvPNrj+sC6wMlvVg6qFLcAALWGFNlZA7RjP0/aoa8gA+RejSlLaukC2NiiQ6XKir fMkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=cjohu6TAlmU+sTz6uKGa1YpUWk5EN4khFj5+kP1VER4=; b=SlfRCYsikS/yaQtewTIP7g4ArrNEeYixYQrS0UzKSQkhO0PffnQaDhCrnrMZ/U+yej Zu393/mQRFbYm610P9FvJR1XMwtaKyPvDTdZnRODSYr/xsoAgh832dyGnY9sPeRHrXix 9bBVoZ+Iv9yLpme/L4BaJtYVS7gFL5xM+7RSUmgUHQgdra/JqU43EoEC6C0GArzzMZWS JvjrKcKuVA4yP8KxbyCeT8fpOwt2IlH8y/CmjupjqdrXeD7k0ln60q4caGduLf+MVVP9 qPXpvGRAo3yJLbWl1KAgRHb0zCCA8+9M0/XqXVjxHLKlVTUR+oHOr+EjElyaAEVkwRwK lOUg== X-Gm-Message-State: AGi0PuZ4pxxK0EcMI6Vt/p2t/3JaT91AhIPf+XvZoyE+K23qy5RmFXih yaxJ1VV2m4wXcMdT8V6U8E90ITTXoFs= X-Google-Smtp-Source: APiQypLLu2XUN/Ey7L9FIRyCMlO0CVSq/1VzmQnSlqtp4BzJGdSaWEiqqukbkXlhf4xsjgUOFXByeQ== X-Received: by 2002:a17:902:bd42:: with SMTP id b2mr1313782plx.219.1588212195960; Wed, 29 Apr 2020 19:03:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 9/9] target/arm: Implement SVE2 crypto constructive binary operations Date: Wed, 29 Apr 2020 19:03:03 -0700 Message-Id: <20200430020303.20264-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200430020303.20264-1-richard.henderson@linaro.org> References: <20200430020303.20264-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1030; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1030.google.com X-detected-operating-system: by eggs.gnu.org: Error: [-] PROGRAM ABORT : Malformed IPv6 address (bad octet value). Location : parse_addr6(), p0f-client.c:67 X-Received-From: 2607:f8b0:4864:20::1030 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: steplong@quicinc.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson --- target/arm/cpu.h | 5 +++++ target/arm/sve.decode | 4 ++++ target/arm/translate-sve.c | 20 ++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 4f09dd42ba..0a7c68843b 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3870,6 +3870,11 @@ static inline bool isar_feature_aa64_sve2_bitperm(co= nst ARMISARegisters *id) return FIELD_EX64(id->id_aa64zfr0, ID_AA64ZFR0, BITPERM) !=3D 0; } =20 +static inline bool isar_feature_aa64_sve2_sha3(const ARMISARegisters *id) +{ + return FIELD_EX64(id->id_aa64zfr0, ID_AA64ZFR0, SHA3) !=3D 0; +} + static inline bool isar_feature_aa64_sve2_sm4(const ARMISARegisters *id) { return FIELD_EX64(id->id_aa64zfr0, ID_AA64ZFR0, SM4) !=3D 0; diff --git a/target/arm/sve.decode b/target/arm/sve.decode index 149de7949b..3cf824bac5 100644 --- a/target/arm/sve.decode +++ b/target/arm/sve.decode @@ -1564,3 +1564,7 @@ AESMC 01000101 00 10000011100 decrypt:1 000= 00 rd:5 AESE 01000101 00 10001 0 11100 0 ..... ..... @rdn_rm_e0 AESD 01000101 00 10001 0 11100 1 ..... ..... @rdn_rm_e0 SM4E 01000101 00 10001 1 11100 0 ..... ..... @rdn_rm_e0 + +# SVE2 crypto constructive binary operations +SM4EKEY 01000101 00 1 ..... 11110 0 ..... ..... @rd_rn_rm_e0 +RAX1 01000101 00 1 ..... 11110 1 ..... ..... @rd_rn_rm_e0 diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c index 91e71882d6..a8e57ea5f4 100644 --- a/target/arm/translate-sve.c +++ b/target/arm/translate-sve.c @@ -8233,3 +8233,23 @@ static bool trans_SM4E(DisasContext *s, arg_rrr_esz = *a) { return do_sm4(s, a, gen_helper_crypto_sm4e); } + +static bool trans_SM4EKEY(DisasContext *s, arg_rrr_esz *a) +{ + return do_sm4(s, a, gen_helper_crypto_sm4ekey); +} + +static bool trans_RAX1(DisasContext *s, arg_rrr_esz *a) +{ + if (!dc_isar_feature(aa64_sve2_sha3, s)) { + return false; + } + if (sve_access_check(s)) { + unsigned vsz =3D vec_full_reg_size(s); + tcg_gen_gvec_3(vec_full_reg_offset(s, a->rd), + vec_full_reg_offset(s, a->rn), + vec_full_reg_offset(s, a->rm), + vsz, vsz, &rax1_op); + } + return true; +} --=20 2.20.1