From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id gRr+KjP0kmqhsxAAWB0awg (envelope-from ) for ; Sat, 29 Aug 2026 11:01:07 -0400 Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=l4xZeNX1; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id AAE081E166; Sat, 29 Aug 2026 11:01:07 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id DFEBB1E033 for ; Sat, 29 Aug 2026 11:01:06 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 73E734B9DB67 for ; Sat, 29 Aug 2026 15:01:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 73E734B9DB67 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=l4xZeNX1 Received: from sonic.asd.mail.yahoo.com (sonic-euwe4-0022.asd.mail.yahoo.com [34.2.86.21]) by sourceware.org (Postfix) with ESMTPS id 54E334B9DB49 for ; Sat, 29 Aug 2026 14:59:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 54E334B9DB49 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=yahoo.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=yahoo.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 54E334B9DB49 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=34.2.86.21 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; cv=none; b=TK6pdXNGKQP2EB8RXYQUfRLYIgAq6BaaFqxD+xY/WYbhTlTe6VqN7j35GnbtzhV1ZkvBCkX6DZk0M+EV8tfekQnxEIChzpy5zLwe+LU7pfBkyjy8Bx2j2KrZ65Fg3KMGZHJKtgEXlXASVIKWWs2J8IuhIkcL8cBUDgA7GA+JNs8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788015549; c=relaxed/simple; bh=LtDQxV+m2ZHvQ9pSTlNkivGMVFGNcGVx80upmlgLtJ8=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=j5WEQfiDfQ0dtaQ94WqHtF5ZhT0tTlRju0dH0RtgYAFaIjevGar8s1nId2FLbtaA+rgzvcoL8O4OEFxBdstntoFAkx5LnYSuniRf7g6qB3RgXG4ZiC5kQjj57wmcbRGddld3takGrmFZ6apedXFxAYq75GpbVbmSiMiEK863k3Q= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=yahoo.de header.i=@yahoo.de header.a=rsa-sha256 header.s=s2048 header.b=l4xZeNX1 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 54E334B9DB49 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.de; s=s2048; t=1788015548; bh=aW/bPOLbWBntKY++f2MRUtW4HfA9Pw6+sPshoMDKECw=; h=From:To:Subject:Date:In-Reply-To:References:From:Subject:Reply-To; b=l4xZeNX11dFC4rEwNkIaCBrAP7RSsVns0/oNWOoxLsDJYZEt5nKEWiXbS34O7v2HtI2on8RXgGm4q6UkbjneqUPrQ6kuaFSANxyy5x8ig98nZ7aZnCkGzTGEkZ//OflFeJjN3swua34WGN0foXLLxLxpqXa3oTMCWPCQJESRDIrbEwRbDIh2JTSukz2r6/7FnSJ5HikhBPlFTMp2iJLjfL7sdV8GgMelhOIgx4PPHcS6obI69rr5j4u8t/t02WLpgZFMjQQ3wKnPeqv16Kc4AHkwP1RJjFfypb3TpHBwutnGGGJGUGo0G5A2OfqxquWWnx8dwthFc7ElsmKZ0NUklg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1788015548; bh=amb/SkF3gNEyS2RlEooey02ULWKuSmH1XUHLSFsa0id=; h=X-Sonic-MF:From:To:Subject:Date:From:Subject; b=X5SmCcc/s6pWDGNA8WIkY5lOU63oATQDt7V/FEG6VdqsQt6zDstH5XxLOSuXk5Y63+0NNBFMnF2TryVtIniyWsmm8iQRIsnL2uT0MwrZUokyhVqkSN13E4kiymWMs5l4ESwQwsTmLV4mXtIHCywl6QX52HVBacnU4Rsl8t3adtEmsxxUBGpUWM/VB4M4EZv4ZT1YzSlTUOrCPPFMCy5nJ67BJYhiyYNxB8ulnffQ6wbPe00HFHbo8CZ1vLA0X8CDNiXpO++6a7la/3mmc35S9tCkL4+e+nd/fceBO6LHEsN23A4og/pqJYP4EQuFmBCljxOmzwD2+QNrR9tDGU+K9Q== X-YMail-OSG: 5xlPbk0VM1k_HwuwH6m4lhntDMRlyNlJq8Wa79vOwcLck2muC0imALvrsEC.FtR KbTxeJPimR3o60QbV9zRtvIyMyhrQyJ3RwAmo10f5991F5aSjG_MXYQDhFuoku7yCN2Z68wNvqlN x.j81spdUwjmiZfcUW357xsvm4Ka3Qy1Rq5LDf4ZDiJdFtXibXZ4wKPv4C5W0S629DgKELYpyRX7 mSccWbGb9B89x90ModsIkuy9eFRB3UJKq86mNVSmafa7W1K0a8Hhz2VIN9oOaZ.96yx95kro9ctP Y9bKoiHSC6doDxomGboahQ4Dl.DVBqcRUI0O7vC03S.oIuXRsq1kHgavSy1ggEPTFiEBlHVSO8d1 tbIwHtxbNhagcnV4UXWZgc0cPJXoYmET0i.nHVec.Sqyb2dB.hJUNwwhIa91yOUDvasNjBImA6Fj MIjKmiKp3rGL1LYsqcaMWy7M.mbaZLlpS07qvvXPp38da5ZdZIvi_lhJ1VH15ZGHAYuC0Rnq2o1k EzC6fkG9wgNB56f_ufRKzTi1P2mRkQtLkS1kvWTriuvm7bVkh.l_mw8l4tM707GbDRrg7zwbDO4u 7EDinW5jH5COAPBbtuD6xNBDadPIdMy8mYImdxjsU0bH2a8Qzmc_ljCPR1SQ_3RYW8nJ.dytcQtN teK7F33zzhBfKKpV5cMjKcZhoSrfiRHhwdRQtrSwrHNdE0_sUkqP9UJ.RuHXQoxgOgoIQJkjQUl0 0JHtBrMJBLjhOnoxjxZL0UaAcv_WDKXBAZMBKE4cKueE7gAM1sLCpWpTAbHSHw5B0riiBAqiquTd HPA0P__aUb2TjPsBjz90f3.Ek1mG8oCO0Aln9mThFpKTzbei82gk2HYHNCGCCtAr7fCjd3GXkUsv CnK97crl1G69Zufp_yZ66dzYfQHv.6vsGX4l53OadtjuVn7yksVRNyoIqno4GZlwPb4Md9x_ChqX xg.EjY.fiT9l6htUjJnnjC8xuIvmjeE7rhGm0Fl084n22eqE8zTWpbz7So2U9F.UDeHGCQKxlFs8 kMC1.x4bUoSxciavR4kgIXQIadMQ7eAwCClpXttceGFlzH6.ZSbnZerpWJyZuWtpcUW7HzouyhOk eC2nh4Tsaj0aE1vS7NLXqYr.3eDjtcCuVFov9aZveag3.ZQjf8e6oPqP162Svdmq9cFdRepRJgC4 a4OcgzuyFjvqZhHIiwycN86aNQXZq_k2CsE4EuTqoMo6pjyIoeXd39Q2GN5La0_kC4QG0D0dX7AG XPIXWG3qRPECcpetU2JlJBcGcrx4ETD9J3TyAh8Gk4vOwbZBxHgstyVgfBvWjGqRsKaellEFmEAv 574Z2Y5WU6DFMPA5RE7C2uuZT.pl53yRP3SnrCye2yP5fP13Xwpa82IlJkslX5oAZ2R1Fm5yKyU4 QvtYceou5dFVOXImoh2AnIXa1SZrNL6eVmiIBPJCJIA.MtMFit.aA52aWMtjJh37YoSSModt6DF1 PyGGpuvjrxhIkWeDDuwpFaiUJkyxk1X6T0A44IBz07PkIrqRrG54ELQw4jCBZW4R897a.Ou0.tL3 MW.W_yIqMkQHcmpIlUYuhNiKhYzhmkA1MZEqkuM5Vq2LH5bSVcQwsB0o1zVJzAN4jU0iCJuUFtyQ uYkX9Raj2b.6Xw5YJK4VE3JyARVJTmueWhgTw0Bj6Kc1CCT3A9HUfp_ZtPKiieh6D_AWCoho79gN TKjhaZv7AphWLaRMeAitXiAv5SHxO5sjR4AObZuP8yvAiwk43DJIw2HFj6_HA2Y5tCGmThXH0m5d hiufoxUSI5KyMoiqXvsCwrUvbk7YjY9zfGL06CkSmGmwYIBNlvqcd5uGB4MC6_766NIxhw_SSF_a bJGQDUclZT0RgfAKsU0iOHNvB.nkFefykgIsYJStGG8MQ.K817RgQ4YAdJjBZjtFtPnT4f9ypFb1 GL5AwvYpYd6oWNV82w8E9qPMsH6RPEVIbdOCaF.VLPw3PKoBK.LrZEP9v8rqjAD5VGJRWcxhBm4h XhS6YiaeoIvlYWs5XJBmtf3kQ X-Sonic-MF: X-Sonic-ID: 26030776-2c17-43a8-b1db-b167e2a03ce5 Received: from sonic.gate.mail.ne1.yahoo.com by mail-asdoutdeli-p-cin-euwe4-prod-sonicconsumer-svc-101 with HTTP; Sat, 29 Aug 2026 14:59:08 +0000 Received: from dip114.lsn.ir2.yahoo.com ([87.248.99.123]) by hello (SMTP) with SMTP ID 13fd5a24ca42336c08dbbc03a4401a1b for ; Sat, 29 Aug 2026 14:59:04 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v3 8/8] Windows gdb: Implement AVX-512 register support Date: Sat, 29 Aug 2026 16:49:05 +0200 Message-ID: <20260829145823.1034821-8-ssbssa@yahoo.de> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260829145823.1034821-1-ssbssa@yahoo.de> References: <20260829145823.1034821-1-ssbssa@yahoo.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org This adds support for the Intel AVX-512 registers on Windows. It enables accessing registers $ymm0 - $ymm31, $zmm0 - $zmm31, and $k0 - $k7 where they are available. After this patch gdb.arch/i386-avx512.exp passes on windows. --- v3: - merged gdb+gdbserver parts, and split again AVX/AVX-512 parts --- gdb/NEWS | 2 ++ gdb/nat/windows-nat.c | 2 +- gdb/x86-windows-nat.c | 35 +++++++++++++++++++++++++++ gdbserver/win32-i386-low.cc | 48 ++++++++++++++++++++++++++++++++++++- 4 files changed, 85 insertions(+), 2 deletions(-) diff --git a/gdb/NEWS b/gdb/NEWS index f7effc822e9..d3db6dd167e 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -120,6 +120,8 @@ * Support for Intel AVX registers on Windows. Support displaying and modifying Intel AVX registers $ymm0 - $ymm31. + Support displaying and modifying Intel AVX-512 registers $zmm0 - $zmm31 + and $k0 - $k7. * Configure changes diff --git a/gdb/nat/windows-nat.c b/gdb/nat/windows-nat.c index c9a21d7c41f..30d49c07332 100644 --- a/gdb/nat/windows-nat.c +++ b/gdb/nat/windows-nat.c @@ -1339,7 +1339,7 @@ initialize_loadable () { /* Available XState features masked with implemented features. */ xstate_features = (GetEnabledXStateFeatures () - & X86_XSTATE_AVX_MASK); + & X86_XSTATE_AVX_AVX512_MASK); /* The extended XState functions are only needed if the available features exceed SSE. */ if ((xstate_features & ~X86_XSTATE_SSE_MASK) == 0) diff --git a/gdb/x86-windows-nat.c b/gdb/x86-windows-nat.c index 1cefe6171be..425e343deca 100644 --- a/gdb/x86-windows-nat.c +++ b/gdb/x86-windows-nat.c @@ -291,6 +291,41 @@ get_context_reg_ptr (Context *context, int r, i386_gdbarch_tdep *tdep) (context, X86_XSTATE_AVX_ID, NULL); context_offset += 16 * (r - I387_YMM0H_REGNUM (tdep)); } + else if (I387_ZMM0H_REGNUM (tdep) > 0 && r >= I387_ZMM0H_REGNUM (tdep) + && r < I387_ZMM16H_REGNUM (tdep) && r < I387_ZMMENDH_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_H_ID, NULL); + context_offset += 32 * (r - I387_ZMM0H_REGNUM (tdep)); + } + else if (I387_ZMM0H_REGNUM (tdep) > 0 && r >= I387_ZMM16H_REGNUM (tdep) + && r < I387_ZMMENDH_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 32 + 64 * (r - I387_ZMM16H_REGNUM (tdep)); + } + else if (I387_K0_REGNUM (tdep) > 0 && r >= I387_K0_REGNUM (tdep) + && r < I387_KEND_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_K_ID, NULL); + context_offset += 8 * (r - I387_K0_REGNUM (tdep)); + } + else if (I387_YMM16H_REGNUM (tdep) > 0 && r >= I387_YMM16H_REGNUM (tdep) + && r < I387_YMMH_AVX512_END_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 16 + 64 * (r - I387_YMM16H_REGNUM (tdep)); + } + else if (I387_XMM16_REGNUM (tdep) > 0 && r >= I387_XMM16_REGNUM (tdep) + && r < I387_XMM_AVX512_END_REGNUM (tdep)) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 64 * (r - I387_XMM16_REGNUM (tdep)); + } else gdb_assert_not_reached ("invalid register number %d", r); diff --git a/gdbserver/win32-i386-low.cc b/gdbserver/win32-i386-low.cc index a7e83c0239c..6911587f977 100644 --- a/gdbserver/win32-i386-low.cc +++ b/gdbserver/win32-i386-low.cc @@ -529,8 +529,11 @@ get_context_reg_ptr (Context *context, int r, const target_desc *tdesc) } bool amd64 = register_size (tdesc, 0) == 8; - int ymm0h_regnum; + int ymm0h_regnum, zmm0h_regnum, k0_regnum; + int xmm16_regnum, ymm16h_regnum, zmm16h_regnum; const int num_xmm_registers = amd64 ? 16 : 8; + const int num_zmm_high_registers = amd64 ? 16 : 0; + const int num_avx512_k_registers = 8; char *context_offset; if (r < mappings_count) @@ -543,6 +546,49 @@ get_context_reg_ptr (Context *context, int r, const target_desc *tdesc) (context, X86_XSTATE_AVX_ID, NULL); context_offset += 16 * (r - ymm0h_regnum); } + else if ((xstate_features & X86_XSTATE_ZMM_H) != 0 + && r >= (zmm0h_regnum = find_regno (tdesc, "zmm0h")) + && r < zmm0h_regnum + num_xmm_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_H_ID, NULL); + context_offset += 32 * (r - zmm0h_regnum); + } + else if ((xstate_features & X86_XSTATE_ZMM) != 0 + && num_zmm_high_registers != 0 + && r >= (zmm16h_regnum = find_regno (tdesc, "zmm16h")) + && r < zmm16h_regnum + num_zmm_high_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 32 + 64 * (r - zmm16h_regnum); + } + else if ((xstate_features & X86_XSTATE_K) != 0 + && r >= (k0_regnum = find_regno (tdesc, "k0")) + && r < k0_regnum + num_avx512_k_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_K_ID, NULL); + context_offset += 8 * (r - k0_regnum); + } + else if ((xstate_features & X86_XSTATE_ZMM) != 0 + && num_zmm_high_registers != 0 + && r >= (ymm16h_regnum = find_regno (tdesc, "ymm16h")) + && r < ymm16h_regnum + num_zmm_high_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 16 + 64 * (r - ymm16h_regnum); + } + else if ((xstate_features & X86_XSTATE_ZMM) != 0 + && num_zmm_high_registers != 0 + && r >= (xmm16_regnum = find_regno (tdesc, "xmm16")) + && r < xmm16_regnum + num_zmm_high_registers) + { + context_offset = (char *) locate_xstate_feature + (context, X86_XSTATE_ZMM_ID, NULL); + context_offset += 64 * (r - xmm16_regnum); + } else gdb_assert_not_reached ("invalid register number %d", r); -- 2.54.0