[{"id":3675020,"web_url":"http://patchwork.ozlabs.org/comment/3675020/","msgid":"<CAATN3NpzM+pd9DRV0W9ahVSMOMcPKd=zFHRY67vF=Xcn6R7eBA@mail.gmail.com>","list_archive_url":null,"date":"2026-04-08T23:24:26","subject":"Re: [PATCH v3 07/16] target/hexagon: add v68 HVX IEEE float min/max\n insns","submitter":{"id":86757,"url":"http://patchwork.ozlabs.org/api/people/86757/","name":"Taylor Simpson","email":"ltaylorsimpson@gmail.com"},"content":"On Wed, Apr 8, 2026 at 10:37 AM Matheus Tavares Bernardino <\nmatheus.bernardino@oss.qualcomm.com> wrote:\n\n> Add HVX IEEE floating-point min/max instructions:\n> - vfmin_hf, vfmin_sf: IEEE floating-point minimum\n> - vfmax_hf, vfmax_sf: IEEE floating-point maximum\n> - vmax_hf, vmax_sf: qfloat IEEE maximum\n> - vmin_hf, vmin_sf: qfloat IEEE minimum\n>\n> The Hexagon qfloat variants are similar to the IEEE-754 ones, but they\n> handle NaN slightly differently. See comment on hvx_ieee_fp.h\n>\n> Signed-off-by: Matheus Tavares Bernardino <\n> matheus.bernardino@oss.qualcomm.com>\n> ---\n>  target/hexagon/mmvec/hvx_ieee_fp.h           |  6 +++\n>  target/hexagon/attribs_def.h.inc             |  2 +\n>  target/hexagon/mmvec/hvx_ieee_fp.c           | 49 ++++++++++++++++++++\n>  target/hexagon/hex_common.py                 |  1 +\n>  target/hexagon/imported/mmvec/encode_ext.def | 10 ++++\n>  target/hexagon/imported/mmvec/ext.idef       | 36 +++++++++++++-\n>  6 files changed, 103 insertions(+), 1 deletion(-)\n>\n> diff --git a/target/hexagon/mmvec/hvx_ieee_fp.h\n> b/target/hexagon/mmvec/hvx_ieee_fp.h\n> index 75008deb3b..ed8e4f2da9 100644\n> --- a/target/hexagon/mmvec/hvx_ieee_fp.h\n> +++ b/target/hexagon/mmvec/hvx_ieee_fp.h\n> @@ -15,4 +15,10 @@ float32 fp_mult_sf_hf(float16 a1, float16 a2,\n> float_status *fp_status);\n>  float32 fp_vdmpy(float16 a1, float16 a2, float16 a3, float16 a4,\n>                   float_status *fp_status);\n>\n> +/* Qfloat min/max treat +NaN as greater than +INF and -NaN as smaller\n> than -INF */\n> +uint32_t qf_max_sf(uint32_t a1, uint32_t a2, float_status *fp_status);\n> +uint32_t qf_min_sf(uint32_t a1, uint32_t a2, float_status *fp_status);\n> +uint16_t qf_max_hf(uint16_t a1, uint16_t a2, float_status *fp_status);\n> +uint16_t qf_min_hf(uint16_t a1, uint16_t a2, float_status *fp_status);\n>\n\nUse float32/float16 instead of uint32_t/uint16_t.  That's what the\nimplementations below have.\n\n\n> +\n>  #endif\n> diff --git a/target/hexagon/mmvec/hvx_ieee_fp.c\n> b/target/hexagon/mmvec/hvx_ieee_fp.c\n> index 3367226998..868c0c5b18 100644\n> --- a/target/hexagon/mmvec/hvx_ieee_fp.c\n> +++ b/target/hexagon/mmvec/hvx_ieee_fp.c\n> @@ -19,3 +19,52 @@ float32 fp_vdmpy(float16 a1, float16 a2, float16 a3,\n> float16 a4,\n>      return float32_add(fp_mult_sf_hf(a1, a3, fp_status),\n>                         fp_mult_sf_hf(a2, a4, fp_status), fp_status);\n>  }\n> +\n> +#define float32_is_pos_nan(X) (float32_is_any_nan(X) &&\n> !float32_is_neg(X))\n> +#define float32_is_neg_nan(X) (float32_is_any_nan(X) && float32_is_neg(X))\n> +#define float16_is_pos_nan(X) (float16_is_any_nan(X) &&\n> !float16_is_neg(X))\n> +#define float16_is_neg_nan(X) (float16_is_any_nan(X) && float16_is_neg(X))\n> +\n>\n\nI would go ahead and repeat the comment here\n/* Qfloat min/max treat +NaN as greater than +INF and -NaN as smaller than\n-INF */\n\n\n> +float32 qf_max_sf(float32 a1, float32 a2, float_status *fp_status)\n> +{\n> +    if (float32_is_pos_nan(a1) || float32_is_neg_nan(a2)) {\n> +        return a1;\n> +    }\n> +    if (float32_is_pos_nan(a2) || float32_is_neg_nan(a1)) {\n> +        return a2;\n> +    }\n> +    return float32_max(a1, a2, fp_status);\n> +}\n>\n\nOtherwise\nReviewed-by: Taylor Simpson <ltaylorsimpson@gmail.com>","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=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=hsFVFYa6;\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=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"],"Received":["from lists.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 4frfLy1YdWz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 09 Apr 2026 09:25:44 +1000 (AEST)","from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wAcGS-0003Wx-TI; Wed, 08 Apr 2026 19:24:52 -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 <ltaylorsimpson@gmail.com>)\n id 1wAcGI-0003WE-Gc\n for qemu-devel@nongnu.org; Wed, 08 Apr 2026 19:24:45 -0400","from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <ltaylorsimpson@gmail.com>)\n id 1wAcGG-0007Rq-JE\n for qemu-devel@nongnu.org; Wed, 08 Apr 2026 19:24:42 -0400","by mail-pj1-x102f.google.com with SMTP id\n 98e67ed59e1d1-35d9f68d011so225891a91.2\n for <qemu-devel@nongnu.org>; Wed, 08 Apr 2026 16:24:40 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; t=1775690678; cv=none;\n d=google.com; s=arc-20240605;\n b=Opuj0d35F1i8W9HYxTsoI1c5EtF9QpRS//xBIh454j4FxGOzt91NcwriXBe4lKPhmK\n Dlj48r0oI2GwnNbj/1ulYXQmBuy9/MVcjjfDavB0sdNFYxfGfklVT7eonHp+AcTO7aGL\n V9Wkl0qDQ7ijcFWjaVaRXKGzAPZ8qyBCMscu53Ia0aPZqyMONgUARD9agMVjn340Fgko\n wluDC+qBkfH5xxqi9iifW7zjj1/aKMivd5uvg/uzo2IjtG9WV8QDUb+MX1aXEPfsr4rQ\n 4yQwN++uS6FcF1EyRQXh9KT2OSlq9gkZPD0+4rbZuu2ce8H0cAjl30bKAyPqkQcXNA29\n gLZQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n s=arc-20240605;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:dkim-signature;\n bh=Lwts0fTOcfq70fpki1O/21ompUjW4ySjfMTqwilPc1k=;\n fh=seHpsuERei6GoCJPMtZiXpXOw/2EVnvuQ7nSTREwIqg=;\n b=SzvV0OdUBucAvJ2ccZboFUXvJZbXDnVuFbHyV3fsjPQ7bcZRNnE9sOeGJr1uofo9y/\n AT79yPr0Y1Dy/x7EtY5zBxgvLqgZC4idAGe6mkpvk/uV+b+5Y642xBRwVLAtJNmS/LhQ\n 8ec4DQS/P63+Ik7N2sEL5D9ZfVNAWYR1WADLCPGyI56hKXR/rUl30jaScR839dPmgFPD\n Cn14h5DORDLKFt7q11IV1A/S/T2Qg8pj9ChSGBWJ1ieO6TDNcgKBajqydHJaY8rlbH+s\n gSoOHjVn29ovII3F/u3HnznJ8bVRGCYDLDpwUzCoIc9aOLh18GtdOc/XEfB0pqcTRNAW\n qvZw==; darn=nongnu.org","ARC-Authentication-Results":"i=1; mx.google.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1775690678; x=1776295478; darn=nongnu.org;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:from:to:cc:subject:date:message-id:reply-to;\n bh=Lwts0fTOcfq70fpki1O/21ompUjW4ySjfMTqwilPc1k=;\n b=hsFVFYa62b2Ep0UcH6KnJfLPMEIVNW2ENpGWGFSx7Eou4lVfh4xUQzdhwqyf3t5M91\n zYBi0EPzh+A9TiflMXQQn9L2t3yypzWcsAocQ7gz1UDFJPrIBepLpo9uCiCpXfYo+laX\n n85pkUYzf3OcgkdbDWVVhrtsLwmu3rFJjQjMR1n8Qk7VcRAtAXt2e1VGiS2z67PGea6t\n /D21H/qGF3hI5TKLJD65HcK7UkpyAmL0FsEH9DP9HUUPGynYMC+oQNk+zqnko3lVjkzw\n ju5YjlhA6f9nFZsVT4jhNxUubNzuHN7mmY5xrRH9D5uAtxcClKB/tREXf8lqoZ/8w/Vj\n A/TQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775690678; x=1776295478;\n h=cc:to:subject:message-id:date:from:in-reply-to:references\n :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=Lwts0fTOcfq70fpki1O/21ompUjW4ySjfMTqwilPc1k=;\n b=p1mZ2QR4U9EzPbyFQkGtweap51LuZd73LUQTM7EossNsabkYxit8AZGtn9cDjDLHxG\n 5Nb4xLIpuEF9Z6Lw2VrYbCMwe4KLL3R+3KGxLZWwbEkxk8RaWC8ViXYlxybbqxCTp1h0\n XJdIuzMT9ujSJ/m5nms7AL0e+RV66zGmCyhePa66ILaXc0LLgMkHiq8YX6NEgvMw2F/I\n G/1Usr7TUDotH5VVw34tfpb5coIDS10asO+PFcPJyAOZCACwFwL5LlONQSQRD0g0JhgU\n +AE3qt0vshvNw0v/0YVImTt7xnBDsC+EcNWr/aCOke7mRKMUZT/wbubFd200kdMBp4B4\n 50BQ==","X-Gm-Message-State":"AOJu0YxC/2r11GXjmDCYWsOqxeu0Dj48W0AfcwK2xGWZyQZUuhDDELgp\n 6KiOUCrIzEgJp0xLrvkcvI1X0zyvZ9RYpXJzn2JbK4fA8M7hMLoLfqmGHmf+Fud3RhI23EmkSMB\n fqS7bVsnS/nfCHKKpHut4C+56Oskpxuw=","X-Gm-Gg":"AeBDietWF+9+05cm3pUHHPBcMEe9z9LRgRYL2nAy5OBaS5dlOuKjJj5aGPMnVgxNphW\n LzIwASG2vXLRO5dsRoW8ssLVzSHNJt4z7zu01CVwMnvDm4YLgAYVlBR/4RRu4MtSlBsnJ5acgmw\n XEQhHxjnLn2mpHhFa4ICYTMI2sPqv6KnEaLMt3GYpac8ga3OKdNRFds0IhK+LSix06lcy15qufl\n 9XT4rM/2KCFysbVlajuIQIryaFsdRNXnYo/x0vBH5ITApfcI4pQzb6MGbofCSS5yKA9zmjdFDq+\n Ie0FqB1f1hyCs7qgT5pbg/85I7bKz0/0dh7vheg=","X-Received":"by 2002:a17:90b:384b:b0:35b:a760:1a54 with SMTP id\n 98e67ed59e1d1-35e358437bamr1187482a91.18.1775690678093; Wed, 08 Apr 2026\n 16:24:38 -0700 (PDT)","MIME-Version":"1.0","References":"<cover.1775665981.git.matheus.bernardino@oss.qualcomm.com>\n <01040724683b0329a732666a2b839afade5d72e1.1775665981.git.matheus.bernardino@oss.qualcomm.com>","In-Reply-To":"\n <01040724683b0329a732666a2b839afade5d72e1.1775665981.git.matheus.bernardino@oss.qualcomm.com>","From":"Taylor Simpson <ltaylorsimpson@gmail.com>","Date":"Wed, 8 Apr 2026 17:24:26 -0600","X-Gm-Features":"AQROBzCKCUkt25yr9hX9YYVxE0I_a5L4nLys0seOPuPeX8QWNhr1h-HGtl0Op_I","Message-ID":"\n <CAATN3NpzM+pd9DRV0W9ahVSMOMcPKd=zFHRY67vF=Xcn6R7eBA@mail.gmail.com>","Subject":"Re: [PATCH v3 07/16] target/hexagon: add v68 HVX IEEE float min/max\n insns","To":"Matheus Tavares Bernardino <matheus.bernardino@oss.qualcomm.com>","Cc":"qemu-devel@nongnu.org, richard.henderson@linaro.org, ale@rev.ng,\n anjo@rev.ng, brian.cain@oss.qualcomm.com, marco.liebel@oss.qualcomm.com,\n philmd@linaro.org, quic_mburton@quicinc.com, sid.manning@oss.qualcomm.com","Content-Type":"multipart/alternative; boundary=\"000000000000194ade064efb3466\"","Received-SPF":"pass client-ip=2607:f8b0:4864:20::102f;\n envelope-from=ltaylorsimpson@gmail.com; helo=mail-pj1-x102f.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, FREEMAIL_FROM=0.001,\n HTML_MESSAGE=0.001, 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"}}]