{"id":2234700,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2234700/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260507234413.643512-57-richard.henderson@linaro.org/","project":{"id":14,"url":"http://patchwork.ozlabs.org/api/1.2/projects/14/?format=json","name":"QEMU Development","link_name":"qemu-devel","list_id":"qemu-devel.nongnu.org","list_email":"qemu-devel@nongnu.org","web_url":"","scm_url":"","webscm_url":"","list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260507234413.643512-57-richard.henderson@linaro.org>","list_archive_url":null,"date":"2026-05-07T23:44:09","name":"[v4,56/60] target/arm: Implement FMMLA (FP8 to FP32) for SVE","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"866547dc866ec40ee2e7381edca959b1b99f4d89","submitter":{"id":72104,"url":"http://patchwork.ozlabs.org/api/1.2/people/72104/?format=json","name":"Richard Henderson","email":"richard.henderson@linaro.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/qemu-devel/patch/20260507234413.643512-57-richard.henderson@linaro.org/mbox/","series":[{"id":503296,"url":"http://patchwork.ozlabs.org/api/1.2/series/503296/?format=json","web_url":"http://patchwork.ozlabs.org/project/qemu-devel/list/?series=503296","date":"2026-05-07T23:43:14","name":"target/arm: Implement FEAT_FP8","version":4,"mbox":"http://patchwork.ozlabs.org/series/503296/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2234700/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2234700/checks/","tags":{},"related":[],"headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=fUWPdmvn;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4gBTYP1vkKz1yKm\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 08 May 2026 09:51:37 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wL8S8-0007wT-RK; Thu, 07 May 2026 19:48:24 -0400","from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1wL8Rz-0007O8-Fn\n for qemu-devel@nongnu.org; Thu, 07 May 2026 19:48:15 -0400","from mail-oa1-x32.google.com ([2001:4860:4864:20::32])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <richard.henderson@linaro.org>)\n id 1wL8Rw-0002Ab-1S\n for qemu-devel@nongnu.org; Thu, 07 May 2026 19:48:14 -0400","by mail-oa1-x32.google.com with SMTP id\n 586e51a60fabf-435428c81a3so502826fac.1\n for <qemu-devel@nongnu.org>; Thu, 07 May 2026 16:48:11 -0700 (PDT)","from stoup.attlocal.net ([2600:381:c938:6375:9641:bbb2:a93a:bb4c])\n by smtp.gmail.com with ESMTPSA id\n 586e51a60fabf-4355736f517sm242730fac.12.2026.05.07.16.48.10\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 07 May 2026 16:48:10 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1778197690; x=1778802490; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=e6OwHShdcvtjgeHyBz/m9h7QN/liBHaPqasCY4NNljY=;\n b=fUWPdmvnR2j2ScBEQGjXUeQUfT5hPYrdMsIH46gmtC4l1+rk1QibdE2oR0riSU+58+\n swM6y4A1fJTW6ES41x+yZpqfozohe48tn1CQkhA4uG2sPnvoywHBV4U8eY0q+i7yzWF6\n wg1lVflxL5aG0xDTDZQpklCRJPjoNGZkLFAGxR7IyGCi4hl+s1+w8KXNMniHwad70gD1\n vi9QC+ykQdUDN0Jm76qZ/kg1yvt2V54xqe1+ny6rjCyVEgAvZkJfmAf2g32BDPFxn7JF\n ntV9wU/7wib0+1Ua4uheprCUL1if6irXelaGi79BrgwaZ68HjmsZ0xe8RYzycYh61GnU\n fznQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1778197690; x=1778802490;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=e6OwHShdcvtjgeHyBz/m9h7QN/liBHaPqasCY4NNljY=;\n b=Nl7wAcX6XFO2VwqOaGZzMHnHhAX6sM6b4KVJiq9hUN6U4iLojggraleVfliKoFOcIV\n xatPYMZsJIjK8Uh99YhkHJhOGEWpuH5UwtKV497XYnuObyDQvfpYpwhNr6HMVmOe7Coa\n Nqp7yPRf7tLNsXd7xwkSuR97b8cnvb0GCEuarYMv538OF17iiRTylk6yqZj4X8TsJhPl\n Xmmkq9D1DvJ0Wsuo2jcmrDoJ6BrSp1UwfKrdX9cJXadb2p/QrlvsoD0RhJje9uHonYqH\n ZWxI6vwJI01Q0xLBRd/olsy0WBttNWAPsCiTNyAx8GL9KAbQv0yJ4OLmhfCD6B2haKE0\n zH1g==","X-Gm-Message-State":"AOJu0YynNMQ7iKI/xZ8gj/xp9P5W9KONfTdv1j1upes5bIlhz3HKrUqY\n M/galCeHxaRlJMIM7U2INJaZD9yferFubwBDrP3VF0GLSt3ZkED1zOpz7hZQxDbSHGciV+Ed2j7\n wPFg/","X-Gm-Gg":"Acq92OEsd6R74M+BZ/y1Id1FPQwUQrTLZpN2P3zjER4nV+wSE/PKNUnNKSfcTR8S/bU\n SMtKRrS5qZ5rkaDjPGw6rL/CgFeut96ZNmXCnuEmd19VrrjjpTMEUiHspflPcmlMw6G4v5mM531\n WqSv8YHskXiKTknZZQRurCXXzh7RKuCNBWfhuXqMhHAzSahoK2pHiuMnqVTMqDzs4eol1Ky2ark\n YEBw0hzKlVkTkDKFaqQDQVRmsuDEnBiGXHJa0u95d17fsSsOS9qWztVymBZQf2gpL5XerADuCst\n 8UHF5C2T+jc0nwGUwiQUSfXIPXfUGhbJ9XvGermLvXGRLE/LVZQD5kD6hK/QpkSd1aePFrMvAhZ\n yhiCFjbdFtp8Rh6PQUcuH9AUjfuB6ggvdvDzmm2SIRkHHpRz9JvOg7ocpyfyJ0CceThGb40q6ek\n eIfHF8Z3JkN8zmbyq00YsQUNWoqEYFUJ3kIUM8gWBPtwq5Jw==","X-Received":"by 2002:a05:6871:eb07:b0:424:2672:445f with SMTP id\n 586e51a60fabf-43556ebb344mr312016fac.18.1778197690585;\n Thu, 07 May 2026 16:48:10 -0700 (PDT)","From":"Richard Henderson <richard.henderson@linaro.org>","To":"qemu-devel@nongnu.org","Cc":"qemu-arm@nongnu.org","Subject":"[PATCH v4 56/60] target/arm: Implement FMMLA (FP8 to FP32) for SVE","Date":"Thu,  7 May 2026 18:44:09 -0500","Message-ID":"<20260507234413.643512-57-richard.henderson@linaro.org>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"<20260507234413.643512-1-richard.henderson@linaro.org>","References":"<20260507234413.643512-1-richard.henderson@linaro.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","Received-SPF":"pass client-ip=2001:4860:4864:20::32;\n envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x32.google.com","X-Spam_score_int":"-20","X-Spam_score":"-2.1","X-Spam_bar":"--","X-Spam_report":"(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no","X-Spam_action":"no action","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"qemu development <qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<https://lists.nongnu.org/archive/html/qemu-devel>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"},"content":"Signed-off-by: Richard Henderson <richard.henderson@linaro.org>\n---\n target/arm/cpu-features.h      |  5 +++++\n target/arm/tcg/translate-sve.c | 16 ++++++++++++++++\n target/arm/tcg/sve.decode      |  2 ++\n 3 files changed, 23 insertions(+)","diff":"diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h\nindex 1f1c090ef5..0aaf08eba9 100644\n--- a/target/arm/cpu-features.h\n+++ b/target/arm/cpu-features.h\n@@ -1687,6 +1687,11 @@ static inline bool isar_feature_aa64_sve_bf16(const ARMISARegisters *id)\n     return isar_feature_aa64_sve(id) && isar_feature_aa64_sme_sve_bf16(id);\n }\n \n+static inline bool isar_feature_aa64_sve2_f8mm8(const ARMISARegisters *id)\n+{\n+    return isar_feature_aa64_sve2(id) && isar_feature_aa64_f8mm8(id);\n+}\n+\n static inline bool\n isar_feature_aa64_sme2_or_sve2_faminmax(const ARMISARegisters *id)\n {\ndiff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c\nindex 8d622f9a1c..5bda5f6c01 100644\n--- a/target/arm/tcg/translate-sve.c\n+++ b/target/arm/tcg/translate-sve.c\n@@ -8442,3 +8442,19 @@ static bool do_f8dp2(DisasContext *s, gen_helper_gvec_3_ptr *fn,\n TRANS(FDOT_hb, do_f8dp2, gen_helper_gvec_fdot_hb, a->rd, a->rn, a->rm, 0)\n TRANS(FDOT_idx_hb, do_f8dp2, gen_helper_gvec_fdot_idx_hb,\n       a->rd, a->rn, a->rm, a->index)\n+\n+static bool do_fmmla_fp8(DisasContext *s, arg_rrrr_esz *a,\n+                         gen_helper_gvec_3_ptr *fn)\n+{\n+    if (fpmr_access_check(s) && sve_access_check(s)) {\n+        unsigned vsz = vec_full_reg_size(s);\n+        tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, a->rd),\n+                           vec_full_reg_offset(s, a->rn),\n+                           vec_full_reg_offset(s, a->rm),\n+                           tcg_env, vsz, vsz, 0, fn);\n+    }\n+    return true;\n+}\n+\n+TRANS_FEAT_NONSTREAMING(FMMLA_sb, aa64_sve2_f8mm8, do_fmmla_fp8, a,\n+                        gen_helper_gvec_fmmla_sb)\ndiff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode\nindex 26b3c7697a..6610432528 100644\n--- a/target/arm/tcg/sve.decode\n+++ b/target/arm/tcg/sve.decode\n@@ -1808,6 +1808,8 @@ BFMMLA          01100100 01 1 ..... 111 001 ..... .....  @rda_rn_rm_ex esz=1\n FMMLA_s         01100100 10 1 ..... 111 001 ..... .....  @rda_rn_rm_ex esz=2\n FMMLA_d         01100100 11 1 ..... 111 001 ..... .....  @rda_rn_rm_ex esz=3\n \n+FMMLA_sb        01100100 00 1 ..... 111 000 ..... .....  @rda_rn_rm_ex esz=2\n+\n ### SVE2 Memory Gather Load Group\n \n # SVE2 64-bit gather non-temporal load (scalar plus 64-bit unscaled offsets)\n","prefixes":["v4","56/60"]}