From nobody Sun May 5 12:08:52 2024 Delivered-To: importer@patchew.org Received-SPF: temperror (zoho.com: Error in retrieving data from DNS) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=temperror (zoho.com: Error in retrieving data from DNS) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1512277490549162.47962191933289; Sat, 2 Dec 2017 21:04:50 -0800 (PST) Received: from localhost ([::1]:37875 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eLMS9-0001Dw-OZ for importer@patchew.org; Sun, 03 Dec 2017 00:04:33 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35169) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eLMRH-0000rb-Ha for qemu-devel@nongnu.org; Sun, 03 Dec 2017 00:03:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eLMRE-0004Sz-Ds for qemu-devel@nongnu.org; Sun, 03 Dec 2017 00:03:39 -0500 Received: from mail-it0-x242.google.com ([2607:f8b0:4001:c0b::242]:43551) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eLMRE-0004Sq-8e for qemu-devel@nongnu.org; Sun, 03 Dec 2017 00:03:36 -0500 Received: by mail-it0-x242.google.com with SMTP id u62so6629124ita.2 for ; Sat, 02 Dec 2017 21:03:36 -0800 (PST) Received: from localhost.localdomain (209-197-184-95.cpe.distributel.net. [209.197.184.95]) by smtp.gmail.com with ESMTPSA id v203sm2300253itf.33.2017.12.02.21.03.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 02 Dec 2017 21:03:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=kQLjG4gkrLztFlIiG/IB/CogdqBUIvBshaJt5Q/ov2Y=; b=vcuuXDG+6DVCCDCXav8Jn6ToXhipNOUzXo2v5S7kDlIMEDFt4C0kLLBoHLy97qeTR2 QrQoR/8Yq+QLWKMg01rhqr80YqXT74qNMhbn6m1vB/6KfAJgoHF8JsepiB+kw4Zw82ge gLZlKj3NdjU9rHSvEefHtY1xKJjWqdRR17Lc9jsTCrxtEOihFDTnRRQOP/M+QPjgGA+R 1deajVmQ1AHbFoB4jv4yTDKqcrsbvG1SeOT3oiqfKJNHgS3Pv1bnQ9AxiqbDTAWsTdsN NffBIS53XRkUbIPT71o44cWhKmQDF3UmXN6nG8MIhOytg8DMAEvAuz5LXcdOa1+LyydT JVow== 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; bh=kQLjG4gkrLztFlIiG/IB/CogdqBUIvBshaJt5Q/ov2Y=; b=iqPGzY7BinTrZD91oxVWfGY43WP6wmJJ5i2jjglNxb9zp8maGvPq5gx+CYe9yjyqiM dozgisff5YjzLGaQazhBhTgj1QkdTs48ILy3xBrSLefIy5VYmMM1ZQlMj7gH91EcLDd2 qo6LvKc12/TegDYCa8pfC+ZceDd7z9qAtlQxO0Lt7XN5POkKUgCV/kjE/oCucYfq81Tp Lqaow9J83Az8WTXHXithFPSQSThUfEV0/OV8Z8McGqzADNkdTbiMQjSc3KX1xWD0zPqN 2LIK94owww2yWLYMt3CBf8G/HCo6i87RExF1PvAw+5AFl4oiq3CBsmRhn+us7LYpRIzA vc1A== X-Gm-Message-State: AJaThX6PqM3ZGI/nbgd52d/Br6IZgNla4L0xz6EfDLPHxcajBf0BpFEd +kS8NIWPRQPJ1xnwFgnr3R6/Tu5F X-Google-Smtp-Source: AGs4zMbkmuA/6TZgS5YsymWIOzyYgRBK96k/AV6Qzo1KCJyDvziw/C6TwW1DQowd1ZyQbCdA0wDgJg== X-Received: by 10.36.86.10 with SMTP id o10mr7956023itb.86.1512277415420; Sat, 02 Dec 2017 21:03:35 -0800 (PST) From: Doug Gale To: qemu-devel@nongnu.org Date: Sun, 3 Dec 2017 00:03:12 -0500 Message-Id: <20171203050312.1527-1-doug16k@gmail.com> X-Mailer: git-send-email 2.14.1 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4001:c0b::242 Subject: [Qemu-devel] [PATCH] Add AVX, AVX-512, MPX support to x86_cpu_dump_state X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Doug Gale , Eduardo Habkost , Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_6 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Doug Gale --- target/i386/helper.c | 94 +++++++++++++++++++++++++++++++++++++++++++++---= ---- 1 file changed, 82 insertions(+), 12 deletions(-) diff --git a/target/i386/helper.c b/target/i386/helper.c index f63eb3d3f4..708fe13f2f 100644 --- a/target/i386/helper.c +++ b/target/i386/helper.c @@ -543,6 +543,7 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f, fprintf_= function cpu_fprintf, } } cpu_fprintf(f, "EFER=3D%016" PRIx64 "\n", env->efer); + cpu_fprintf(f, "XCR0=3D%016" PRIx64 "\n", env->xcr0); if (flags & CPU_DUMP_FPU) { int fptag; fptag =3D 0; @@ -565,21 +566,90 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f, fprint= f_function cpu_fprintf, else cpu_fprintf(f, " "); } - if (env->hflags & HF_CS64_MASK) - nb =3D 16; - else + + if (env->hflags & HF_CS64_MASK) { + if (env->xcr0 & XSTATE_Hi16_ZMM_MASK) { + /* AVX-512 32 registers enabled */ + nb =3D 32; + } else { + /* 64-bit mode, 16 registers */ + nb =3D 16; + } + } else { + /* 32 bit mode, 8 registers */ nb =3D 8; - for(i=3D0;ixmm_regs[i].ZMM_L(3), - env->xmm_regs[i].ZMM_L(2), - env->xmm_regs[i].ZMM_L(1), - env->xmm_regs[i].ZMM_L(0)); - if ((i & 1) =3D=3D 1) + } + + /* sse register width in units of 64 bits */ + int zmm_width; + char zmm_name; + if (env->xcr0 & XSTATE_ZMM_Hi256_MASK) { + /* 512-bit "ZMM" - AVX-512 registers enabled */ + zmm_width =3D 8; + zmm_name =3D 'Z'; + } else if (env->xcr0 & XSTATE_YMM_MASK) { + /* 256-bit "YMM" - AVX enabled */ + zmm_width =3D 4; + zmm_name =3D 'Y'; + } else if (env->cr[4] & CR4_OSFXSR_MASK) { + /* 128-bit "XMM" - SSE enabled */ + zmm_width =3D 2; + zmm_name =3D 'X'; + } else { + /* SSE not enabled */ + zmm_width =3D 0; + zmm_name =3D 0; + } + + + cpu_fprintf(f, " MSB%*sLSB\n", + -(zmm_width * 16 + zmm_width - 7), ""); + + for (i =3D 0; i < nb; i++) { + if (zmm_width =3D=3D 0) { + cpu_fprintf(f, "SSE not enabled\n"); + break; + } + + cpu_fprintf(f, "%cMM%02d=3D", zmm_name, i); + int qw; + for (qw =3D zmm_width; qw > 0; qw -=3D 2) { + /* ':' separator every 64 bits */ + cpu_fprintf(f, "%016" PRIx64 ":%016" PRIx64 "%s", + env->xmm_regs[i].ZMM_Q(qw - 1), + env->xmm_regs[i].ZMM_Q(qw - 2), + qw > 2 ? ":" : ""); + } + + /* two registers per line for 128-bit registers */ + if (zmm_width > 2 || (i & 1)) { cpu_fprintf(f, "\n"); - else + } else { cpu_fprintf(f, " "); + } + } + + if (env->xcr0 & XSTATE_OPMASK_MASK) { + /* AVX-512 opmask registers */ + for (i =3D 0; i < 8; ++i) { + cpu_fprintf(f, "K%d=3D%08" PRIx64 "%s", i, env->opmask_reg= s[i], + (i & 3) =3D=3D 3 ? "\n" : " "); + } + } + + if (env->xcr0 & XSTATE_BNDREGS_MASK) { + /* MPX bound registers */ + for (i =3D 0; i < 4; ++i) { + cpu_fprintf(f, "BND%d=3D%016" PRIx64 ":%016" PRIx64 "%s", + i, env->bnd_regs[i].ub, env->bnd_regs[i].lb, + (i & 1) ? "\n" : " "); + } + } + + if (env->xcr0 & XSTATE_BNDCSR_MASK) { + /* MPX bound status/config registers */ + cpu_fprintf(f, "BNDCFGU=3D%016" PRIx64 " BNDSTATUS=3D%016" PRI= x64 "\n", + env->bndcs_regs.cfgu, env->bndcs_regs.sts); } } if (flags & CPU_DUMP_CODE) { --=20 2.14.1