From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680533851; cv=pass; d=zohomail.com; s=zohoarc; b=btHJ+yCXEjKWJH3HD7zdP7mx1SpS3rIeHq16RBpYoo1yjfxPkxSeYFC3l+9fvv8vdOY96LqqOeJw2GlSCL2xj8v/MNPhX/1zinGmsUbymZF4Gq+jNlUuCWAJBPCjytaFUYaJ46NpFvsnqJKG1hMX0pATCknhSUzv+/sXk7MoDDw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680533851; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=FCrSDs0f16ekqy4Eik8NqBW3LlGngJ7nD0dM0P0nsr8=; b=gaPQ6TK+wJ9uyKvNV0dDqrCMj3Lg63fHDKb/kFsl5koZEIk86jIBBIr6mBPoiclqEa7SU6Vm8OOGCc1h3siLOhKprq46NrgLL2T48WhEJA7XW2ji2o3pQvE4QPF2gPLM9QBjQSADmUNuhMFlkgMxkrqjOoUR8SZTs+iAPkd6Y8M= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680533851936509.1200996626559; Mon, 3 Apr 2023 07:57:31 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517481.802849 (Exim 4.92) (envelope-from ) id 1pjLcO-00066n-QV; Mon, 03 Apr 2023 14:57:12 +0000 Received: by outflank-mailman (output) from mailman id 517481.802849; Mon, 03 Apr 2023 14:57:12 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLcO-00066g-N9; Mon, 03 Apr 2023 14:57:12 +0000 Received: by outflank-mailman (input) for mailman id 517481; Mon, 03 Apr 2023 14:57:10 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLcM-00066R-HX for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:57:10 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20607.outbound.protection.outlook.com [2a01:111:f400:7e1a::607]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id cea60352-d22f-11ed-85db-49a42c6b2330; Mon, 03 Apr 2023 16:57:09 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:57:06 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:57:06 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: cea60352-d22f-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=acCpsPXMXDMlfJg+cL1cmT0lBWOGMvb0w6OND+xqasBt6i3ccE5k5hoFWdaDYgubxzEUjC6htBqA0VrC0BKbAwXj8qQO2Mem2RSueRbovXVGshtRa+PCcbRTQikw+ive3cjWXwT4ZsYJXRWnrFFpUdCT2W1jtlZ6gkucsObn8ajfn2tYGtLZekQeFsuUixRicjiC83nFY3Lt3YcuuGyHVBQrCbNMmCZyCdH7Huqc148L/3QkkFvcqxZRhVu2s6SYhOxi+OaojF6208TtD55Pyon7nVBDpQ3Ms198ZamRAEgp2k8+/ixQIWmzO0zrYCdMhQQSkuGzofFKGd28EXnMlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=FCrSDs0f16ekqy4Eik8NqBW3LlGngJ7nD0dM0P0nsr8=; b=LghBN9P3jwxWVOMeSwJ43Kb5OL1TweMekV/42QexP0f6FAbrIO2GgsEjwTqLinPWtmuOVKR6F36XlcIWsP/Td36Id92iO72bz2m5FAh/I5wNm3PHCMt7fdw6g076upvL0t7iFtarPrDPh2ap13H4j2f2bYey3AGDTyByIQl06X78qhRSFg/0zwGQ956n10KWTcJ31tEOAk/F+HmzYx8L0X5T+g6QK64xJL4g8fbqL8mY2vnkU1xahqZs4OzQKBGuOrQCViqvM2pSrCHvwQJNPcSHq48bSTQ8JR9XM0daDwagi/hRe6FP+JhKY1IVCodzuhri+wg79aFScQCLtnMhAg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FCrSDs0f16ekqy4Eik8NqBW3LlGngJ7nD0dM0P0nsr8=; b=ihTbTw4ZFCEFdExKJRV/bfiTEuRtUrMpXtcJfFUlF8yCM7qIur9ff6Pnekrm5r83cuRDsQl7NzwSDBvuLxjvxIX9LCBr20elx8GjPIOg04aSCiicHwhkCA0hQEm56DKx+WCE6mP4qIvBoVfE/XS5sb7FLH3CEwqRkDb9Zp0gC8T3WP7XU1dHg0m0lGocC98sokQ/6GSaK6ETzhAcTzA+GyYk8xcIdwrlfGPpx7vwsvofQCAHPJn2AZU1u/7boyUYMcbSzjXwa2tiOmvkYz/LLSCKpTEFRbQa2NeFztkxSpxZFM2qU8AF8hJtCggJcMlb7NmXL+Ec3o2FnFQ7YPf57g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <6ce78724-a826-f53d-4ff2-701cc279289a@suse.com> Date: Mon, 3 Apr 2023 16:57:04 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 01/10] x86emul: handle AVX512-FP16 insns encoded in 0f3a opcode map Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR2P281CA0120.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9d::13) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: 1398e316-7ab8-459b-e2ad-08db3453b0f3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gJH7sTdD+B931sUMQkYGMHQsEDVsbeEpddamUdu+F+M6nvK6PnhD8fcr8WISj97w7tqHKDzoGixjYoCKxWW5lvW+Z+3ZEOIwP5okgSVmp6zEHe7Av6buw4W1M0ozOd3rW7GXRT5LhD9eAqiscbOK6gg2OMqWHiYKKxoWoYSd+7XSuKV4TiSbe9Cb+Pd7/uixcbFNk7lN38DkJcKfDdpG0KQq6Hp7K5pQBOccFTRl8ZhWgGDNMFv0YrSzRXyEURIuxCMCwF5SjYF7Lv/QNdTXjc8/Cbvf61P8fHe/mKQOmHha5/lmtmf5m0cSdNBmYJleWcjEG5Lx/AJ1pExzkImbWv/ADsDkDXM3zmRk78sO0fg5XF7xlBUlEy0fDGgh53LmiS3hl2PjSsUv1wGI8sE3dA9C67exTB2KWDMMj/OmczR2i1on2O628pKUZn1BeuyyrhCjFDAG4ITfJRUJr8yvFbGy3TSwM7Xtw4PEk3+kzTNVmZt8C563ZJIuSaFhQpHuyGiyIOh3IGgTBXNNDMUpA88IkmyBN9Z63OwK45DVaXijO6mja6lPyJyBFUBD0326kP7ZMJ92KyAypJufisLbMHen/v+Wzs6cnboUo3QGqHfLILMLYtyHwzggt7X+0v/SLpgc2B9nWaAoT8nbQ6Qm3Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(30864003)(41300700001)(38100700002)(5660300002)(186003)(83380400001)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SXhpS2M0SUpZVVZvRkhLS1pqM0VDa0dINEVyZ1IwOXJJRmZlb3B2M28zQ25G?= =?utf-8?B?M3MvbDllK3FPQUUxZ3JxRjVrT2diMkpDYlJ2NzJzcklKRG9zdHRJSlVMWEZt?= =?utf-8?B?S0kwZlZwSi9xOUUrNllNYWNFNlBjNVBNUmVMQUNoeG9XRUZHTEUrVkxWMU81?= =?utf-8?B?b0ZRbEFZdFpJZXd0bE1JeS96ZVROYzdEYWJzY2NSRXVFY0pkTjFLRU52WUdv?= =?utf-8?B?VjdqUmlOcll4MExTSEErYXZaSS9CVjQzSXFnV0MyUUNTZjkreHRHV05sSnFq?= =?utf-8?B?S2s2ZnFPbHdxUUhGM3dEUkRiOXpQZ1ZEU0FFYzZDY2Fnb1lNcFVpNW1ueWxZ?= =?utf-8?B?L3k4WXlPODdxdFh0ckR1b2o0Y0g3Nk5JbGxDdEVPay9sMkVjVStFQURFSHlO?= =?utf-8?B?MkFZTysyTWtRbExLaGZiMEczQWtHeEZGUng2b3BsSmZMeU83WTlBVGtvMWt1?= =?utf-8?B?a0gxTWpTWnZMZlNFZG9ZTWJiM3pJbEFLRStiWTV2cm9nWUZmUXN5eVp0OUZ2?= =?utf-8?B?UFozWUFjbkprOXdBTE9odDhuTnZSQ2EzamJNMUdaTFFSUE1HZUFNVkJWU2Fi?= =?utf-8?B?YUl1TEVscEh5MFZGeVNkVGlZaE0yZU9nVFgyK2NFVUV0OE1VY1pRMG5rL2NJ?= =?utf-8?B?VnVHSS9NbGRydEhTQ1lnMC9TeG9PeHJQWHNRVjlBQThYV1dKVmNaZXl2SThv?= =?utf-8?B?L1ZKeFp4Y2hZUlg2UXZWL2VQbnh5TTFqb1VsSnh3dG91U3VUczdKU1ovWXBY?= =?utf-8?B?SkMwam9xZ1dYSWlrTVhGZmJMeHQzcWNvM3Z6aVNaQ0VEK0l0QzdCMjdlTDRi?= =?utf-8?B?OFVsSDczMEVzUzdZZVFnTzBRYVlFVzdYSnpLclBYMGxXNkhiVnRLMHFMWWNl?= =?utf-8?B?WmhSK0phTlAwZ3N2SGxiWHo2T0VlSmU3SnF5dnJ3U2xtaml5aEpBNjNzL0l4?= =?utf-8?B?aXJXRmpUM0EwVG0wYUJpRTNYVzIyTlc5WlNlZHFyOXJWaThhbXcwb1Q4SU9V?= =?utf-8?B?c3EyN3hrb3BvL252SSs0eTdHYXAzUXd3c3EyN1dVL0ExaUVxZ0ZOT1VrK3E3?= =?utf-8?B?Q3BiUXdtcWo4dDN1dXVvSUVhWmVKQnk5VUV5OTRPY0pVZjdKTmY2TmJrQXpD?= =?utf-8?B?d1pLWmNEdHYyZjJFOWQ0WDVYQXVwdzZReTRxSUFndVFBZHRSNEpEY0FHcU1y?= =?utf-8?B?OWtMZjQ4QmxRUDJiSmsrMlg5QjJQVHo1RVdEYTdlbUwzT2dVTTFldVFTTnps?= =?utf-8?B?N2JNYmdFNzlXcHpLaEU4elRkMDZFM01CYlNpSXY5TzI3MVVTOTBnQzdhMHV6?= =?utf-8?B?U1ZCZlNycHdpdSswM3I4QTZ0Y3R5cGplYytydWNVeGt3MVRidFlVYlJvRS9J?= =?utf-8?B?aHNGSXBuSHJ5bHg0bUE2QkQrNUpqRnJ1dkU5aXpQblhHeWw5VVEwaUYwaVRE?= =?utf-8?B?aFZwU3A3VjNMNk9EVVNqa3JzYXFpL0RjZTM1RTA2OEZQVjV1eXdRLy9RL3NQ?= =?utf-8?B?WVJ3U0YvQU1XTU1KY211QlE1SVlmSFFiR3RFVFhHcmVmNzhscmU2UjFuV1la?= =?utf-8?B?dEtMVnZjejh0WEkrbzBvT0tqSDNKdjQ2SzZZaVNlWjArVHl4R2l3QnRVb2cy?= =?utf-8?B?a3BPRUZtcldiSXorR2pqYWoremRMeFNmN2EyUkhwb2tUeTU4YUgwZk9GdWdv?= =?utf-8?B?T3VTeDJZY3E5VHd2YVBZcC91d2toMzlOVmhuOGgvMVRBWkxrRG1ZeEVISjhp?= =?utf-8?B?TG0zeXB6Tmt2NEFCR2FDbGdDM1J1WTZJY0d0UllRTWZMT2hiMXUySWtITG4r?= =?utf-8?B?YlpDQ3VSdDc1d2xGTUFHeFFUQUlXN0pad1c0ajdxV1ZERWI2eFpNWnd6TmRm?= =?utf-8?B?TnVSWVlWZHRJNUdSd3k0cGtHbkQ3SWd4cnErQlY3c1RSSFNtOTFQK3JhRUsr?= =?utf-8?B?dHJLUEhnSEdHbDV5R0R5YW5tZjVQMjlrbU5QNHgrYTM1REhoM0VRZFFyMlJD?= =?utf-8?B?RmhGSjVSMG0rUXZpUTFsK1NvbVQ1aFFaN3BzUkw5aXRaRytKN0FlS1ppQXRG?= =?utf-8?B?Mnd0U2w0V2MrSE5PLzRNNkhyYit1cVVxek0zdDlCcmN0WFgzWkw0clBUWExY?= =?utf-8?Q?G/+/tpkKpWtC+iRDrclxzYaNN?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1398e316-7ab8-459b-e2ad-08db3453b0f3 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:57:06.0431 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: faOVin8bABF1uGPHQt/CB5svc+hwVdgJ9qE3Q3n21/t+VwxkmC3XvN5/SOwOKZ4W0K6pA5AaKHx0p0NDCsLHCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680533853756100001 Content-Type: text/plain; charset="utf-8" In order to re-use (also in subsequent patches) existing code and tables as much as possible, simply introduce a new boolean field in emulator state indicating whether an insn is one with a half-precision source. Everything else then follows "naturally". Signed-off-by: Jan Beulich --- SDE: -spr or -future --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -76,6 +76,7 @@ enum esz { ESZ_b, ESZ_w, ESZ_bw, + ESZ_fp16, }; =20 #ifndef __i386__ @@ -601,6 +602,19 @@ static const struct test avx512_vpopcntd INSN(popcnt, 66, 0f38, 55, vl, dq, vl) }; =20 +static const struct test avx512_fp16_all[] =3D { + INSN(cmpph, , 0f3a, c2, vl, fp16, vl), + INSN(cmpsh, f3, 0f3a, c2, el, fp16, el), + INSN(fpclassph, , 0f3a, 66, vl, fp16, vl), + INSN(fpclasssh, , 0f3a, 67, el, fp16, el), + INSN(getmantph, , 0f3a, 26, vl, fp16, vl), + INSN(getmantsh, , 0f3a, 27, el, fp16, el), + INSN(reduceph, , 0f3a, 56, vl, fp16, vl), + INSN(reducesh, , 0f3a, 57, el, fp16, el), + INSN(rndscaleph, , 0f3a, 08, vl, fp16, vl), + INSN(rndscalesh, , 0f3a, 0a, el, fp16, el), +}; + static const struct test gfni_all[] =3D { INSN(gf2p8affineinvqb, 66, 0f3a, cf, vl, q, vl), INSN(gf2p8affineqb, 66, 0f3a, ce, vl, q, vl), @@ -728,8 +742,10 @@ static void test_one(const struct test * break; =20 case ESZ_w: - esz =3D 2; evex.w =3D 1; + /* fall through */ + case ESZ_fp16: + esz =3D 2; break; =20 #ifdef __i386__ @@ -845,7 +861,7 @@ static void test_one(const struct test * case ESZ_b: case ESZ_w: case ESZ_bw: return; =20 - case ESZ_d: case ESZ_q: + case ESZ_d: case ESZ_q: case ESZ_fp16: break; =20 default: @@ -1002,6 +1018,7 @@ void evex_disp8_test(void *instr, struct RUN(avx512_vnni, all); RUN(avx512_vp2intersect, all); RUN(avx512_vpopcntdq, all); + RUN(avx512_fp16, all); =20 if ( cpu_has_avx512f ) { --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -1972,8 +1972,10 @@ static const struct evex { { { 0x03 }, 3, T, R, pfx_66, Wn, Ln }, /* valign{d,q} */ { { 0x04 }, 3, T, R, pfx_66, W0, Ln }, /* vpermilps */ { { 0x05 }, 3, T, R, pfx_66, W1, Ln }, /* vpermilpd */ + { { 0x08 }, 3, T, R, pfx_no, W0, Ln }, /* vrndscaleph */ { { 0x08 }, 3, T, R, pfx_66, W0, Ln }, /* vrndscaleps */ { { 0x09 }, 3, T, R, pfx_66, W1, Ln }, /* vrndscalepd */ + { { 0x0a }, 3, T, R, pfx_no, W0, LIG }, /* vrndscalesh */ { { 0x0a }, 3, T, R, pfx_66, W0, LIG }, /* vrndscaless */ { { 0x0b }, 3, T, R, pfx_66, W1, LIG }, /* vrndscalesd */ { { 0x0f }, 3, T, R, pfx_66, WIG, Ln }, /* vpalignr */ @@ -1993,7 +1995,9 @@ static const struct evex { { { 0x22 }, 3, T, R, pfx_66, Wn, L0 }, /* vpinsr{d,q} */ { { 0x23 }, 3, T, R, pfx_66, Wn, L1|L2 }, /* vshuff{32x4,64x2} */ { { 0x25 }, 3, T, R, pfx_66, Wn, Ln }, /* vpternlog{d,q} */ + { { 0x26 }, 3, T, R, pfx_no, W0, Ln }, /* vgetmantph */ { { 0x26 }, 3, T, R, pfx_66, Wn, Ln }, /* vgetmantp{s,d} */ + { { 0x27 }, 3, T, R, pfx_no, W0, LIG }, /* vgetmantsh */ { { 0x27 }, 3, T, R, pfx_66, Wn, LIG }, /* vgetmants{s,d} */ { { 0x38 }, 3, T, R, pfx_66, Wn, L1|L2 }, /* vinserti{32x4,64x2} */ { { 0x39 }, 3, T, W, pfx_66, Wn, L1|L2 }, /* vextracti{32x4,64x2} */ @@ -2008,14 +2012,20 @@ static const struct evex { { { 0x51 }, 3, T, R, pfx_66, Wn, LIG }, /* vranges{s,d} */ { { 0x54 }, 3, T, R, pfx_66, Wn, Ln }, /* vfixupimmp{s,d} */ { { 0x55 }, 3, T, R, pfx_66, Wn, LIG }, /* vfixumpimms{s,d} */ + { { 0x56 }, 3, T, R, pfx_no, W0, Ln }, /* vreduceph */ { { 0x56 }, 3, T, R, pfx_66, Wn, Ln }, /* vreducep{s,d} */ + { { 0x57 }, 3, T, R, pfx_no, W0, LIG }, /* vreducesh */ { { 0x57 }, 3, T, R, pfx_66, Wn, LIG }, /* vreduces{s,d} */ + { { 0x66 }, 3, T, R, pfx_no, W0, Ln }, /* vfpclassph */ { { 0x66 }, 3, T, R, pfx_66, Wn, Ln }, /* vfpclassp{s,d} */ + { { 0x67 }, 3, T, R, pfx_no, W0, LIG }, /* vfpclasssh */ { { 0x67 }, 3, T, R, pfx_66, Wn, LIG }, /* vfpclasss{s,d} */ { { 0x70 }, 3, T, R, pfx_66, W1, Ln }, /* vshldw */ { { 0x71 }, 3, T, R, pfx_66, Wn, Ln }, /* vshld{d,q} */ { { 0x72 }, 3, T, R, pfx_66, W1, Ln }, /* vshrdw */ { { 0x73 }, 3, T, R, pfx_66, Wn, Ln }, /* vshrd{d,q} */ + { { 0xc2 }, 3, T, R, pfx_no, W0, Ln }, /* vcmpph */ + { { 0xc2 }, 3, T, R, pfx_f3, W0, LIG }, /* vcmpsh */ { { 0xce }, 3, T, R, pfx_66, W1, Ln }, /* vgf2p8affineqb */ { { 0xcf }, 3, T, R, pfx_66, W1, Ln }, /* vgf2p8affineinvqb */ }; --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -4677,6 +4677,44 @@ int main(int argc, char **argv) else printf("skipped\n"); =20 + printf("%-40s", "Testing vfpclassphz $0x46,128(%ecx),%k3..."); + if ( stack_exec && cpu_has_avx512_fp16 ) + { + decl_insn(vfpclassph); + + asm volatile ( put_insn(vfpclassph, + /* 0x46: check for +/- 0 and neg. */ + /* vfpclassphz $0x46, 128(%0), %%k3 */ + ".byte 0x62, 0xf3, 0x7c, 0x48\n\t" + ".byte 0x66, 0x59, 0x02, 0x46") + :: "c" (NULL) ); + + set_insn(vfpclassph); + for ( i =3D 0; i < 3; ++i ) + { + res[16 + i * 5 + 0] =3D 0x7fff0000; /* +0 / +NaN */ + res[16 + i * 5 + 1] =3D 0xffff8000; /* -0 / -NaN */ + res[16 + i * 5 + 2] =3D 0x80010001; /* +DEN / -DEN */ + res[16 + i * 5 + 3] =3D 0xfc00f800; /* -FIN / -INF */ + res[16 + i * 5 + 4] =3D 0x7c007800; /* +FIN / +INF */ + } + res[31] =3D 0; + regs.ecx =3D (unsigned long)res - 64; + rc =3D x86_emulate(&ctxt, &emulops); + if ( rc !=3D X86EMUL_OKAY || !check_eip(vfpclassph) ) + goto fail; + asm volatile ( "kmovd %%k3, %0" : "=3Dg" (rc) ); + /* + * 0b11(0001100101)*3 + * 0b1100_0110_0101_0001_1001_0100_0110_0101 + */ + if ( rc !=3D 0xc6519465 ) + goto fail; + printf("okay\n"); + } + else + printf("skipped\n"); + /* * The following compress/expand tests are not only making sure the * accessed data is correct, but they also verify (by placing operands --- a/tools/tests/x86_emulator/x86-emulate.h +++ b/tools/tests/x86_emulator/x86-emulate.h @@ -183,6 +183,7 @@ void wrpkru(unsigned int val); #define cpu_has_avx512_4fmaps (cp.feat.avx512_4fmaps && xcr0_mask(0xe6)) #define cpu_has_avx512_vp2intersect (cp.feat.avx512_vp2intersect && xcr0_m= ask(0xe6)) #define cpu_has_serialize cp.feat.serialize +#define cpu_has_avx512_fp16 (cp.feat.avx512_fp16 && xcr0_mask(0xe6)) #define cpu_has_avx_vnni (cp.feat.avx_vnni && xcr0_mask(6)) #define cpu_has_avx512_bf16 (cp.feat.avx512_bf16 && xcr0_mask(0xe6)) =20 --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -518,6 +518,7 @@ static const struct ext0f3a_table { [0x7a ... 0x7b] =3D { .simd_size =3D simd_scalar_opc, .four_op =3D 1 }, [0x7c ... 0x7d] =3D { .simd_size =3D simd_packed_fp, .four_op =3D 1 }, [0x7e ... 0x7f] =3D { .simd_size =3D simd_scalar_opc, .four_op =3D 1 }, + [0xc2] =3D { .simd_size =3D simd_any_fp, .d8s =3D d8s_vl }, [0xcc] =3D { .simd_size =3D simd_other }, [0xce ... 0xcf] =3D { .simd_size =3D simd_packed_int, .d8s =3D d8s_vl = }, [0xdf] =3D { .simd_size =3D simd_packed_int, .two_op =3D 1 }, @@ -579,7 +580,7 @@ static unsigned int decode_disp8scale(en if ( s->evex.brs ) { case d8s_dq: - return 2 + s->evex.w; + return 1 + !s->fp16 + s->evex.w; } break; =20 @@ -596,7 +597,7 @@ static unsigned int decode_disp8scale(en /* fall through */ case simd_scalar_opc: case simd_scalar_vexw: - return 2 + s->evex.w; + return 1 + !s->fp16 + s->evex.w; =20 case simd_128: /* These should have an explicit size specified. */ @@ -1417,7 +1418,29 @@ int x86emul_decode(struct x86_emulate_st */ s->simd_size =3D ext0f3a_table[b].simd_size; if ( evex_encoded() ) + { + switch ( b ) + { + case 0x08: /* vrndscaleph */ + case 0x0a: /* vrndscalesh */ + case 0x26: /* vfpclassph */ + case 0x27: /* vfpclasssh */ + case 0x56: /* vgetmantph */ + case 0x57: /* vgetmantsh */ + case 0x66: /* vreduceph */ + case 0x67: /* vreducesh */ + if ( !s->evex.pfx ) + s->fp16 =3D true; + break; + + case 0xc2: /* vpcmp{p,s}h */ + if ( !(s->evex.pfx & VEX_PREFIX_DOUBLE_MASK) ) + s->fp16 =3D true; + break; + } + disp8scale =3D decode_disp8scale(ext0f3a_table[b].d8s, s); + } break; =20 case ext_8f09: @@ -1712,7 +1735,7 @@ int x86emul_decode(struct x86_emulate_st break; case vex_f3: generate_exception_if(evex_encoded() && s->evex.w, X86_EXC_UD); - s->op_bytes =3D 4; + s->op_bytes =3D 4 >> s->fp16; break; case vex_f2: generate_exception_if(evex_encoded() && !s->evex.w, X86_EXC_UD= ); @@ -1722,11 +1745,11 @@ int x86emul_decode(struct x86_emulate_st break; =20 case simd_scalar_opc: - s->op_bytes =3D 4 << (ctxt->opcode & 1); + s->op_bytes =3D 2 << (!s->fp16 + (ctxt->opcode & 1)); break; =20 case simd_scalar_vexw: - s->op_bytes =3D 4 << s->vex.w; + s->op_bytes =3D 2 << (!s->fp16 + s->vex.w); break; =20 case simd_128: --- a/xen/arch/x86/x86_emulate/private.h +++ b/xen/arch/x86/x86_emulate/private.h @@ -305,6 +305,7 @@ struct x86_emulate_state { bool lock_prefix; bool not_64bit; /* Instruction not available in 64bit. */ bool fpu_ctrl; /* Instruction is an FPU control one. */ + bool fp16; /* Instruction has half-precision FP source operand. */ opcode_desc_t desc; union vex vex; union evex evex; @@ -592,6 +593,7 @@ amd_like(const struct x86_emulate_ctxt * #define vcpu_has_avx512_vp2intersect() (ctxt->cpuid->feat.avx512_vp2inters= ect) #define vcpu_has_serialize() (ctxt->cpuid->feat.serialize) #define vcpu_has_tsxldtrk() (ctxt->cpuid->feat.tsxldtrk) +#define vcpu_has_avx512_fp16() (ctxt->cpuid->feat.avx512_fp16) #define vcpu_has_avx_vnni() (ctxt->cpuid->feat.avx_vnni) #define vcpu_has_avx512_bf16() (ctxt->cpuid->feat.avx512_bf16) =20 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -1300,7 +1300,7 @@ x86_emulate( b =3D ctxt->opcode; d =3D state.desc; #define state (&state) - elem_bytes =3D 4 << evex.w; + elem_bytes =3D 2 << (!state->fp16 + evex.w); =20 generate_exception_if(state->not_64bit && mode_64bit(), EXC_UD); =20 @@ -7145,6 +7145,15 @@ x86_emulate( avx512_vlen_check(b & 2); goto simd_imm8_zmm; =20 + case X86EMUL_OPC_EVEX(0x0f3a, 0x0a): /* vrndscalesh $imm8,xmm/mem,xmm,= xmm{k} */ + generate_exception_if(ea.type !=3D OP_REG && evex.brs, EXC_UD); + /* fall through */ + case X86EMUL_OPC_EVEX(0x0f3a, 0x08): /* vrndscaleph $imm8,[xyz]mm/mem,= [xyz]mm{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + avx512_vlen_check(b & 2); + goto simd_imm8_zmm; + #endif /* X86EMUL_NO_SIMD */ =20 CASE_SIMD_PACKED_INT(0x0f3a, 0x0f): /* palignr $imm8,{,x}mm/mem,{,x}mm= */ @@ -7455,6 +7464,14 @@ x86_emulate( avx512_vlen_check(false); goto simd_imm8_zmm; =20 + case X86EMUL_OPC_EVEX(0x0f3a, 0x26): /* vgetmantph $imm8,[xyz]mm/mem,[= xyz]mm{k} */ + case X86EMUL_OPC_EVEX(0x0f3a, 0x56): /* vreduceph $imm8,[xyz]mm/mem,[x= yz]mm{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + if ( ea.type !=3D OP_REG || !evex.brs ) + avx512_vlen_check(false); + goto simd_imm8_zmm; + case X86EMUL_OPC_EVEX_66(0x0f3a, 0x51): /* vranges{s,d} $imm8,xmm/mem,= xmm,xmm{k} */ case X86EMUL_OPC_EVEX_66(0x0f3a, 0x57): /* vreduces{s,d} $imm8,xmm/mem= ,xmm,xmm{k} */ host_and_vcpu_must_have(avx512dq); @@ -7467,6 +7484,16 @@ x86_emulate( avx512_vlen_check(true); goto simd_imm8_zmm; =20 + case X86EMUL_OPC_EVEX(0x0f3a, 0x27): /* vgetmantsh $imm8,xmm/mem,xmm,x= mm{k} */ + case X86EMUL_OPC_EVEX(0x0f3a, 0x57): /* vreducesh $imm8,xmm/mem,xmm,xm= m{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + if ( !evex.brs ) + avx512_vlen_check(true); + else + generate_exception_if(ea.type !=3D OP_REG, EXC_UD); + goto simd_imm8_zmm; + case X86EMUL_OPC_VEX_66(0x0f3a, 0x30): /* kshiftr{b,w} $imm8,k,k */ case X86EMUL_OPC_VEX_66(0x0f3a, 0x32): /* kshiftl{b,w} $imm8,k,k */ if ( !vex.w ) @@ -7630,6 +7657,16 @@ x86_emulate( avx512_vlen_check(true); goto simd_imm8_zmm; =20 + case X86EMUL_OPC_EVEX(0x0f3a, 0x66): /* vfpclassph $imm8,[xyz]mm/mem,k= {k} */ + case X86EMUL_OPC_EVEX(0x0f3a, 0x67): /* vfpclasssh $imm8,xmm/mem,k{k} = */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w || !evex.r || !evex.R || evex.z, EXC_= UD); + if ( !(b & 1) ) + goto avx512f_imm8_no_sae; + generate_exception_if(evex.brs, EXC_UD); + avx512_vlen_check(true); + goto simd_imm8_zmm; + case X86EMUL_OPC_EVEX_66(0x0f3a, 0x70): /* vpshldw $imm8,[xyz]mm/mem,[= xyz]mm,[xyz]mm{k} */ case X86EMUL_OPC_EVEX_66(0x0f3a, 0x72): /* vpshrdw $imm8,[xyz]mm/mem,[= xyz]mm,[xyz]mm{k} */ generate_exception_if(!evex.w, EXC_UD); @@ -7640,6 +7677,16 @@ x86_emulate( host_and_vcpu_must_have(avx512_vbmi2); goto avx512f_imm8_no_sae; =20 + case X86EMUL_OPC_EVEX_F3(0x0f3a, 0xc2): /* vcmpsh $imm8,xmm/mem,xmm,k{= k} */ + generate_exception_if(ea.type !=3D OP_REG && evex.brs, EXC_UD); + /* fall through */ + case X86EMUL_OPC_EVEX(0x0f3a, 0xc2): /* vcmpph $imm8,[xyz]mm/mem,[xyz]= mm,k{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w || !evex.r || !evex.R || evex.z, EXC_= UD); + if ( ea.type !=3D OP_REG || !evex.brs ) + avx512_vlen_check(evex.pfx & VEX_PREFIX_SCALAR_MASK); + goto simd_imm8_zmm; + case X86EMUL_OPC(0x0f3a, 0xcc): /* sha1rnds4 $imm8,xmm/m128,xmm */ host_and_vcpu_must_have(sha); op_bytes =3D 16; From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680533881; cv=pass; d=zohomail.com; s=zohoarc; b=Yezx6r0wfEeWPbn0VfF3KsuOI/LsvV2+dSEhfI/PB/YfEBXBbNW8qLzFFskkNRbQ06spLQmzJ5GEcY163OdUfu85cmOus0OqXIu54sTvhh+pL1IIkjUVKBG+Xs/xpX38XRdjzu1oDioDnxUFYgQJyfYMDaGZy36M4OlVO5jApZo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680533881; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ssUjHs4HRn1b92pvEP2D8LrncOpBCibcR/DS6rD4XMw=; b=FgbkshZDG2FYKpspMYyIIp0PTBzZYyi9uGi9hp+uWG3kEAUWt9XkeF5vL3/6e3Zfq2WDy6EdzU0VMw8eiT49ywb3LSeFKfg7On5lTwRLfNSCcE+MEl640Ft5rvux2Ph1YS88MAifgi2N9IqqwD6DNw7PTx8xDJoPtI0DwLQT2+o= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680533881073161.1197929709723; Mon, 3 Apr 2023 07:58:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517483.802859 (Exim 4.92) (envelope-from ) id 1pjLci-0006VK-52; Mon, 03 Apr 2023 14:57:32 +0000 Received: by outflank-mailman (output) from mailman id 517483.802859; Mon, 03 Apr 2023 14:57:32 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLci-0006VD-1q; Mon, 03 Apr 2023 14:57:32 +0000 Received: by outflank-mailman (input) for mailman id 517483; Mon, 03 Apr 2023 14:57:31 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLch-00066R-0F for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:57:31 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2060e.outbound.protection.outlook.com [2a01:111:f400:7e1a::60e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id db14c9b8-d22f-11ed-85db-49a42c6b2330; Mon, 03 Apr 2023 16:57:30 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:57:28 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:57:27 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: db14c9b8-d22f-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UMX/oiOvfeZBVNHcbouIPbM3AbxdRxjiOtL9x3JLGk1sZoQ9BtjJpE5Rr9HDWw8HphwMd/jYD22Udb1uZTT9LHQPHCKcDFGkW9GZrrPBEJOye87zWjTSqaMi4ML3mO3WGkkNRDojBNk9klh8o5XBpdipMkqKaBjUoJ3psIxWLfCclwgMBSCWf0m2AJOx3lQQ03busDcU4sysBO3Pm3dXGgIkUWiJzqBGIbWjfqV/ZPGjxIyqveHBe3pWZyeBJ0wr1Y1ETOz5ewAsSxVQXM4aKUmKb3bawOvzlzUa+HMGTiUuV6z1+1K6u1HDY7OKR/sCSD2Umt72z49UNypny8A4Tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ssUjHs4HRn1b92pvEP2D8LrncOpBCibcR/DS6rD4XMw=; b=BrQX8T1/bUH8Xy6WLQ/2NC62yROU8KjcQ9L/LAJtMhbEeqs6NNLPfZbLVVvPpOWAIjv+A5bAtgMblDnQYMhhQoY4FeaE1pgdzAuIUPbxQj6z0h8M4MAsiwvS3ZE+n30xAKBkURPkRbMSjWDmNppuW9zSP7pwAJh6oqK91nH8QqgB33Zp74E21P6dSUPoGTuHbNtAnQBlNwT3C2jiwOC062XtXFb3v0k2iSOlxXHf44sEhwFoS2DWkjcytPmzsakTeZJjANc1Pu+UGFQKDzE2//A2jkWE75WnO67vJjjvsYamHjOQQUTmbL8lTH22hmdi6etigxy4cAWgZZ8V8OAHtA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ssUjHs4HRn1b92pvEP2D8LrncOpBCibcR/DS6rD4XMw=; b=o5RVHHfqLGXbNMPqfLnyNN0oyTzROtsUC8vJyGyf6I1/oqrpgn2UXeQJpzoAc3gdVG6sEcd7+orQ710AJxrlvEykaRppSTtozKRPATsTKplIVw756v+NJj7bbK7vG7XwTdOklFxMTw7dsmYo6SHSyLuR+LjhPLTMD6n4lZ5i7YdLzgq7MLaWGpFGjo+ok84vcCiLTLToJan1tfZEjeridVjxpaXEgftc383cJ1wjTXB82hPvpHrKfeHNj2UA7jSY184MpErTds2U8azJEFnAXbpRloRMKzZTujJxwG5xT6oW2YwiM5VDHnlQrIA9+nYnIn9SFxUlWe+U0tFmE8YfmQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <111f6a32-0c2c-f586-f599-dd0c4451ba4e@suse.com> Date: Mon, 3 Apr 2023 16:57:25 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 02/10] x86emul: handle AVX512-FP16 Map5 arithmetic insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0178.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a0::19) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: 5e6ca9d1-9c36-4c89-1486-08db3453bdaa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: MZl8oLiU2OSkr+EBCj64noQekDKaqy6rI5lW79mgjxOjZiF+vWhovzGbIYH2TXVCsNuG8Wj/pMJAzLvWHmkJLYxH9jx3Jbxz/q9DY7RiL+dIQqT4FQu1KB3kQSDn2pYsuJvmn0QVsRjX75lh432wsNbtBaWTEoV6AwI0olPVrf8sr3LZzACccakHLipARDvttiEW90cfH+HJ2cAx6NqgOJNNGoYZxTxBSGN2Bs/HtCIVIYEkFcke3IQy1Y2jOGvFyIoZsNWS9mNdiIKrVAKASqvUQEoPYfLYO8FgkkdeDL688PihN1Z18SoBJW57zS4K8CBTpUsPMCNVKiZZ+TPKAh6ULzxHoZejm6XKqtp7RhlSrYm5PpGNr5Oafia0FCVLjC54CdQ9FhQvm95tnS13lFK6LY8BrBz3hyM08dECWDvmjz7+IiM7drhkBPyWhgmu2F94bG6H61ZIOUeK6zzCHfSVGYkg0qlCkIEK5uJzGxBFngWarfATIFm/Qq60Cus7AsK4jJOKsW84qzNvPEF7HiiWZ14CWXbHwBUTCbKljGGHQ7T8vgsRbeD5YSk0kmJE6ln1k0iqexzt3nifkzTs9G6DSv84B3MUxv/VZWZGVd9fkM+kuJlt1dwyG7IF652O/jzhI8fw6mFT3+wv5CgRag== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cm5FSlBNZGE2Q0R5MGFaK2ZKZlRMbWZVeGlramNFWnlhNkxhczhyQnMrVFhj?= =?utf-8?B?ME1VMWlXdmRTUEhxRG9NOGNnQ3dnVnpQYnVoVXZTeU85UjVXaitCZGViODBx?= =?utf-8?B?KzdhTjB5bGdWQm85UVlINUpmUjErVXBWRmpsS3NRVGVnblltazVsSEYwYVo2?= =?utf-8?B?MHQ5cm15Q093b0dMRnppelRkMUJXTXU2cmlkNmJ1T3NiWWJTeHkwK1pYTEhq?= =?utf-8?B?UXBjVlVCcUdSQ0Mwb3RlN3lLK3hVY00yOHZrZk51OWluaCt3NWR1S3h1NHBV?= =?utf-8?B?VTdVaHhRM29Vc0o4NlhFS2p5OWRpVUh2Rmk2NHRaRHJvVEFvMlJlamVEOUxJ?= =?utf-8?B?eXZqMitkTnpLMkJ6RVVtRkY0YTlyTlppcCtPdi91VmZRZlYrZDBSa2NXWTZP?= =?utf-8?B?YUlnWlYrUGNpUVJTNTNETUg3VnZDVGVGQlRiRUxYWU9rM0dIb011S2ZiU1NI?= =?utf-8?B?UWFJR2RYNGxLVFRTZy91V3VJQjVWK0p4bjMrcjYrVDVneS82UnVjWnhJbmhH?= =?utf-8?B?UHNzWUhVeWhIUVpGZVpEWTVveGFvUlVFemhUUnFEL0YyeHNUWThyTjZkano5?= =?utf-8?B?WjNLWUxHdGQ2OUNkQjE3V0Z2cTdyU1V6bVVjMitYY25rTmMra2Q0eVpTNzFu?= =?utf-8?B?cHlKeW1jY2gvaVhVbkwyYzcvbFlQVVBORW9yMDRENG1Bc1JsOTVXTjRDVzlw?= =?utf-8?B?alU2K3IrSStVWWVHVlFEU0hkN05YQkdQUStGdWYrNDY2QU0vYUZqMkhRQXNL?= =?utf-8?B?dElnbkVPY3c3b0tNTHlWTEthWis5VFBRMytwMHVTTGI2OUcxUkwwbEdHQzZQ?= =?utf-8?B?Z3BhVlhNdWo1Ung2RWxyeHJJTVh0RUJNSmhhVFpBeWVpN0ZPQzc0S20vbFZm?= =?utf-8?B?Tm5PMGpjaTZrNkxRSGxwSTZDU2NmaTdmZk8wSDhLd0tmVWFWRndUZUZsVXA2?= =?utf-8?B?TlNUZGlEV0RWckVhK1Y4VTNBVWhEVzJZNnRyUndrbWxac1Z3cTRwSWh6OEUr?= =?utf-8?B?dGRBV0hNclpmd3JtbHk0Vy9YbHZ0WDNIQVgwdXNjNlQ2RmpSZDQ1WG9KNnFV?= =?utf-8?B?NHl4NXIxMGExcmFSV1NzaFBNWVBNcXgvaDRPMVRUWjJxYnJLYnlObTFwZksr?= =?utf-8?B?dnRlVmFCMWIxTlRDeUtzOWRHOU5FMnVBYUZ6VmxmNjZ4Qm9LTFVQVDFhUUN0?= =?utf-8?B?QWRDbXlOc0NCcCswQ1VhWlkxSWpIcjJuK0Z3bklETGJabmJnV0NvODF4WVYy?= =?utf-8?B?QXFDVU1lZnFRdUJlcUxGL1c4amI5NFZiOEsrZ1hqNTJBUkNzN2FEMkVhYmpV?= =?utf-8?B?L3lVeng5a2ZsUnZWN1FJNWZVSGVta3FMcXh2VmgzUXpuakE5UFJDNTZXWlVZ?= =?utf-8?B?MEZhNDVSckQ3V1J0bUxaZGZvNkNiMVB6NWg1SGYyWWI5S3ltN1BxSW1YWk4x?= =?utf-8?B?d3Z6S1R0aGF3NWxTdVRUVFR4WG1rRXZlbEZTMko5bnJxVzlNc1ZYUUNQdmEv?= =?utf-8?B?blk3eXRMazE4dkF6YVphWFNxc2RGSmE4QitNd01FMHlVVEE3YzVoaHNJM0h6?= =?utf-8?B?YjhZNzR6SzEreTRkN3NVMFcyNE5BdHZuekhpTkEvcExSSEtSOEQ5Y3h3OFFn?= =?utf-8?B?OUE0R1RJZmJCeWcvS2NGNGJLeFdiaHZVRmlzdEFqeVRLT3Y0anZEOTBFZnhW?= =?utf-8?B?cE1mRWdOeWYzTDNqTmpJRVJMTHJ1NkYray9CSWFPTjYvWTFhYjBuU2FCeTdw?= =?utf-8?B?MjYwQnN2bFFUdXprQU4wcUJ0RHdRU0dwQy8vL3M5dE5VQmc5Q01CdmdRZDhk?= =?utf-8?B?cUtidUVCemhxazJMYWJzckpwbjdaUy9Oai9qTWRtSVI4aGt0cy8waElvbCt1?= =?utf-8?B?NnNuYmcwZzUrK2d0czhOeHFFOWU4UGVUbkZib1NlTGF0clFOcGI2YWxuR3Yw?= =?utf-8?B?Z3p2bCs0SkdVWFZGZlhLNFdGVmhYTjduWkdaUiticTd0V2NYbmlJQnVPazRP?= =?utf-8?B?Z05HNDlJcCtYNk52bmxVR212MUNyQmNZcVpOam1ZNStvaFN3RStNZkJVaGZr?= =?utf-8?B?VnMwbUtjWXJsUVJBQmhINzlVOXdmUm5yODc2dFc2V0V4d0lIWWdLU2U5N1J3?= =?utf-8?Q?3vM0szKgt2TwLvoJNt+Wv3XnP?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5e6ca9d1-9c36-4c89-1486-08db3453bdaa X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:57:27.3441 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: no+s59NY7tbs+KlkGZaWRTTg5bS6SZ+QKvVAYQH7a4jGr2EGzAhKY4kRg1FimUp9XYHgDcCl0kw4pEcFvsR65w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680533881904100001 Content-Type: text/plain; charset="utf-8" This encoding space is a very sparse clone of the "twobyte" one. Re-use that table, as the entries corresponding to invalid opcodes in Map5 are simply benign with simd_size forced to other than simd_none (preventing undue memory reads in SrcMem handling early in x86_emulate()). Signed-off-by: Jan Beulich --- v2: Add comments. --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -6,7 +6,7 @@ struct test { const char *mnemonic; unsigned int opc:8; - unsigned int spc:2; + unsigned int spc:3; unsigned int pfx:2; unsigned int vsz:3; unsigned int esz:4; @@ -19,6 +19,10 @@ enum spc { SPC_0f, SPC_0f38, SPC_0f3a, + SPC_unused4, + SPC_map5, + SPC_map6, + SPC_unused7, }; =20 enum pfx { @@ -603,16 +607,32 @@ static const struct test avx512_vpopcntd }; =20 static const struct test avx512_fp16_all[] =3D { + INSN(addph, , map5, 58, vl, fp16, vl), + INSN(addsh, f3, map5, 58, el, fp16, el), INSN(cmpph, , 0f3a, c2, vl, fp16, vl), INSN(cmpsh, f3, 0f3a, c2, el, fp16, el), + INSN(comish, , map5, 2f, el, fp16, el), + INSN(divph, , map5, 5e, vl, fp16, vl), + INSN(divsh, f3, map5, 5e, el, fp16, el), INSN(fpclassph, , 0f3a, 66, vl, fp16, vl), INSN(fpclasssh, , 0f3a, 67, el, fp16, el), INSN(getmantph, , 0f3a, 26, vl, fp16, vl), INSN(getmantsh, , 0f3a, 27, el, fp16, el), + INSN(maxph, , map5, 5f, vl, fp16, vl), + INSN(maxsh, f3, map5, 5f, el, fp16, el), + INSN(minph, , map5, 5d, vl, fp16, vl), + INSN(minsh, f3, map5, 5d, el, fp16, el), + INSN(mulph, , map5, 59, vl, fp16, vl), + INSN(mulsh, f3, map5, 59, el, fp16, el), INSN(reduceph, , 0f3a, 56, vl, fp16, vl), INSN(reducesh, , 0f3a, 57, el, fp16, el), INSN(rndscaleph, , 0f3a, 08, vl, fp16, vl), INSN(rndscalesh, , 0f3a, 0a, el, fp16, el), + INSN(sqrtph, , map5, 51, vl, fp16, vl), + INSN(sqrtsh, f3, map5, 51, el, fp16, el), + INSN(subph, , map5, 5c, vl, fp16, vl), + INSN(subsh, f3, map5, 5c, el, fp16, el), + INSN(ucomish, , map5, 2e, el, fp16, el), }; =20 static const struct test gfni_all[] =3D { @@ -713,8 +733,8 @@ static void test_one(const struct test * union evex { uint8_t raw[3]; struct { - uint8_t opcx:2; - uint8_t mbz:2; + uint8_t opcx:3; + uint8_t mbz:1; uint8_t R:1; uint8_t b:1; uint8_t x:1; --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2028,6 +2028,23 @@ static const struct evex { { { 0xc2 }, 3, T, R, pfx_f3, W0, LIG }, /* vcmpsh */ { { 0xce }, 3, T, R, pfx_66, W1, Ln }, /* vgf2p8affineqb */ { { 0xcf }, 3, T, R, pfx_66, W1, Ln }, /* vgf2p8affineinvqb */ +}, evex_map5[] =3D { + { { 0x2e }, 2, T, R, pfx_no, W0, LIG }, /* vucomish */ + { { 0x2f }, 2, T, R, pfx_no, W0, LIG }, /* vcomish */ + { { 0x51 }, 2, T, R, pfx_no, W0, Ln }, /* vsqrtph */ + { { 0x51 }, 2, T, R, pfx_f3, W0, LIG }, /* vsqrtsh */ + { { 0x58 }, 2, T, R, pfx_no, W0, Ln }, /* vaddph */ + { { 0x58 }, 2, T, R, pfx_f3, W0, LIG }, /* vaddsh */ + { { 0x59 }, 2, T, R, pfx_no, W0, Ln }, /* vmulph */ + { { 0x59 }, 2, T, R, pfx_f3, W0, LIG }, /* vmulsh */ + { { 0x5c }, 2, T, R, pfx_no, W0, Ln }, /* vsubph */ + { { 0x5c }, 2, T, R, pfx_f3, W0, LIG }, /* vsubsh */ + { { 0x5d }, 2, T, R, pfx_no, W0, Ln }, /* vminph */ + { { 0x5d }, 2, T, R, pfx_f3, W0, LIG }, /* vminsh */ + { { 0x5e }, 2, T, R, pfx_no, W0, Ln }, /* vdivph */ + { { 0x5e }, 2, T, R, pfx_f3, W0, LIG }, /* vdivsh */ + { { 0x5f }, 2, T, R, pfx_no, W0, Ln }, /* vmaxph */ + { { 0x5f }, 2, T, R, pfx_f3, W0, LIG }, /* vmaxsh */ }; =20 static const struct { @@ -2037,6 +2054,8 @@ static const struct { { evex_0f, ARRAY_SIZE(evex_0f) }, { evex_0f38, ARRAY_SIZE(evex_0f38) }, { evex_0f3a, ARRAY_SIZE(evex_0f3a) }, + { NULL, 0 }, + { evex_map5, ARRAY_SIZE(evex_map5) }, }; =20 #undef Wn --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -1219,9 +1219,22 @@ int x86emul_decode(struct x86_emulate_st opcode |=3D MASK_INSR(0x0f3a, X86EMUL_OPC_EXT_MASK= ); d =3D twobyte_table[0x3a].desc; break; + + case evex_map5: + if ( !evex_encoded() ) + { default: - rc =3D X86EMUL_UNRECOGNIZED; - goto done; + rc =3D X86EMUL_UNRECOGNIZED; + goto done; + } + opcode |=3D MASK_INSR(5, X86EMUL_OPC_EXT_MASK); + /* + * Re-use twobyte_table[] here, for the similarity= of + * the entries valid in map 5. + */ + d =3D twobyte_table[b].desc; + s->simd_size =3D twobyte_table[b].size ?: simd_oth= er; + break; } } else if ( s->ext < ext_8f08 + ARRAY_SIZE(xop_table) ) @@ -1443,6 +1456,25 @@ int x86emul_decode(struct x86_emulate_st } break; =20 + case ext_map5: + switch ( b ) + { + default: + if ( !(s->evex.pfx & VEX_PREFIX_DOUBLE_MASK) ) + s->fp16 =3D true; + break; + + case 0x2e: case 0x2f: /* v{,u}comish */ + if ( !s->evex.pfx ) + s->fp16 =3D true; + s->simd_size =3D simd_none; + break; + } + + /* Like above re-use twobyte_table[] here. */ + disp8scale =3D decode_disp8scale(twobyte_table[b].d8s, s); + break; + case ext_8f09: if ( ext8f09_table[b].two_op ) d |=3D TwoOp; @@ -1661,6 +1693,7 @@ int x86emul_decode(struct x86_emulate_st s->simd_size =3D ext8f08_table[b].simd_size; break; =20 + case ext_map5: case ext_8f09: case ext_8f0a: break; --- a/xen/arch/x86/x86_emulate/private.h +++ b/xen/arch/x86/x86_emulate/private.h @@ -195,6 +195,7 @@ enum vex_opcx { vex_0f =3D vex_none + 1, vex_0f38, vex_0f3a, + evex_map5 =3D 5, }; =20 enum vex_pfx { @@ -223,8 +224,8 @@ union vex { union evex { uint8_t raw[3]; struct { /* SDM names */ - uint8_t opcx:2; /* mm */ - uint8_t mbz:2; + uint8_t opcx:3; /* mmm */ + uint8_t mbz:1; uint8_t R:1; /* R' */ uint8_t b:1; /* B */ uint8_t x:1; /* X */ @@ -249,6 +250,7 @@ struct x86_emulate_state { ext_0f =3D vex_0f, ext_0f38 =3D vex_0f38, ext_0f3a =3D vex_0f3a, + ext_map5 =3D evex_map5, /* * For XOP use values such that the respective instruction field * can be used without adjustment. --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -3756,6 +3756,13 @@ x86_emulate( ASSERT(!state->simd_size); break; =20 +#ifndef X86EMUL_NO_SIMD + + case X86EMUL_OPC_EVEX(5, 0x2e): /* vucomish xmm/m16,xmm */ + case X86EMUL_OPC_EVEX(5, 0x2f): /* vcomish xmm/m16,xmm */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + /* fall through */ CASE_SIMD_PACKED_FP(_EVEX, 0x0f, 0x2e): /* vucomis{s,d} xmm/mem,xmm */ CASE_SIMD_PACKED_FP(_EVEX, 0x0f, 0x2f): /* vcomis{s,d} xmm/mem,xmm */ generate_exception_if((evex.reg !=3D 0xf || !evex.RX || evex.opmsk= || @@ -3768,9 +3775,11 @@ x86_emulate( get_fpu(X86EMUL_FPU_zmm); =20 opc =3D init_evex(stub); - op_bytes =3D 4 << evex.w; + op_bytes =3D 2 << (!state->fp16 + evex.w); goto vcomi; =20 +#endif + case X86EMUL_OPC(0x0f, 0x30): /* wrmsr */ generate_exception_if(!mode_ring0(), EXC_GP, 0); fail_if(ops->write_msr =3D=3D NULL); @@ -7736,6 +7745,20 @@ x86_emulate( =20 #ifndef X86EMUL_NO_SIMD =20 + case X86EMUL_OPC_EVEX_F3(5, 0x51): /* vsqrtsh xmm/m16,xmm,xmm{k} */ + d &=3D ~TwoOp; + /* fall through */ + case X86EMUL_OPC_EVEX(5, 0x51): /* vsqrtph [xyz]mm/mem,[xyz]mm{k}= */ + CASE_SIMD_SINGLE_FP(_EVEX, 5, 0x58): /* vadd{p,s}h [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + CASE_SIMD_SINGLE_FP(_EVEX, 5, 0x59): /* vmul{p,s}h [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + CASE_SIMD_SINGLE_FP(_EVEX, 5, 0x5c): /* vsub{p,s}h [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + CASE_SIMD_SINGLE_FP(_EVEX, 5, 0x5d): /* vmin{p,s}h [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + CASE_SIMD_SINGLE_FP(_EVEX, 5, 0x5e): /* vdiv{p,s}h [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + CASE_SIMD_SINGLE_FP(_EVEX, 5, 0x5f): /* vmax{p,s}h [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + goto avx512f_all_fp; + case X86EMUL_OPC_XOP(08, 0x85): /* vpmacssww xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x86): /* vpmacsswd xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x87): /* vpmacssdql xmm,xmm/m128,xmm,xmm */ --- a/xen/arch/x86/x86_emulate/x86_emulate.h +++ b/xen/arch/x86/x86_emulate/x86_emulate.h @@ -619,6 +619,7 @@ struct x86_emulate_ctxt * 0x0fxxxx for 0f-prefixed opcodes (or their VEX/EVEX equivalents) * 0x0f38xxxx for 0f38-prefixed opcodes (or their VEX/EVEX equivalents) * 0x0f3axxxx for 0f3a-prefixed opcodes (or their VEX/EVEX equivalents) + * 0x5xxxx for Map5 opcodes (EVEX only) * 0x8f08xxxx for 8f/8-prefixed XOP opcodes * 0x8f09xxxx for 8f/9-prefixed XOP opcodes * 0x8f0axxxx for 8f/a-prefixed XOP opcodes From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680533895; cv=pass; d=zohomail.com; s=zohoarc; b=UoVoBRz5WnQf2cWGroblsF++ud3vGczMR+LzGi9Y3jF5aWsWsKsnrpM/HJifw+K04V2UFdoT7c6WMXqG7NNMDAcZ9KZgwNpohQ+7H54326mGHrqiwDDa7GhQ4jj17g97+gB+/aORaHPylqAyYgALSniQMLKWnGu5nehtv70kbro= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680533895; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=y99XU3et9c84vJqhU6TL+qqpPQD4yDAwck0bIDW2RGA=; b=SoTvN0LMiE7Xzv6f+cvn38+kTHSb+1Q4fhJ/kzoH3+HcSXVnXCqzuNA/j3R6AIKddlEf/SmeEJ+i9aYcTZhBS2qFMnsgJIodzmv5fP2rtngvI6K1Zz6h+kKr/AAAeP28VSPVQkForM5f+PXZc0bwif7hgNmdKpFiHaLJfo0yARc= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680533895982745.274003947796; Mon, 3 Apr 2023 07:58:15 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517486.802869 (Exim 4.92) (envelope-from ) id 1pjLcz-00074D-DE; Mon, 03 Apr 2023 14:57:49 +0000 Received: by outflank-mailman (output) from mailman id 517486.802869; Mon, 03 Apr 2023 14:57:49 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLcz-000746-9r; Mon, 03 Apr 2023 14:57:49 +0000 Received: by outflank-mailman (input) for mailman id 517486; Mon, 03 Apr 2023 14:57:48 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLcy-00066R-Bz for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:57:48 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20631.outbound.protection.outlook.com [2a01:111:f400:7e1a::631]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id e55c288d-d22f-11ed-85db-49a42c6b2330; Mon, 03 Apr 2023 16:57:47 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:57:46 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:57:46 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: e55c288d-d22f-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e4Fx248CscoJ4WRIKQ0QGNnVid4Fv/K8U6cYb5HD42xPpX7Waq8Reahrvn08N6SOaEJoXjZRwTH3PNVD9EDmeawJCZqCJnTMjSiTJwVZOhYh6W1vmhjhsFwHeImaMdLQ3MdO/6w7BrMbskrgVXf+mV3B3GTAXHTwfLNHC3l1T23+TpcQ3tNexDX6BSI1r5gq+0TfvuYkPnNQAB0223+6IWTseRdEtEFJXalt2umjAgXkMNhGwn7OFXYk252am0KqZRxfU1eRM9HE8o84rZmB16VvyL5BlckRV6QlbnzvMj6POMxPYlTh8Q7k5XyzymH4tt1xoB9MqFjt+X3OxmuwVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=y99XU3et9c84vJqhU6TL+qqpPQD4yDAwck0bIDW2RGA=; b=j9UxJBO6JgFcM8nLZ0AumNAYaP42R1/NsW2IyOWNdVQ6U3vfjzJHgBvEpHV8bTklI8EwAPM1TP0iJ4JD+ESj0bKKdTvBTF8A+2V6QWlN00YdHq2GiV4+yFUYklwgx/TNr31mRe4NZHe/7FgaZbxXr4aV0Z6X2kO1P6ymj8PaC/TgC02KhWvbHwF+MCmB2xjkpPyzZ+Ep+3iFWZrsVcEIpP5tFG3F6CVnhbF4FHbgXf7toIDGHpi2Ko9/AxZ23M3e/nCm3VusqpjtL/hYzgvV8oGiJVvAb7hFpT8R0pgj1C9lBboNafNYiXr2oaq0HnKRzNKoVE/Ba7tGWIcwXRWErg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=y99XU3et9c84vJqhU6TL+qqpPQD4yDAwck0bIDW2RGA=; b=LEISKkaZBCIQmO7WrEQI09DY4XFGlQnoKu5eHyGc24yicxPCfHZ16s9aJdfl26xHuBgxmncTW6eTdJmC6l4eOXKk1y3L04v6TlJfyRQ6v/7ARaR3VaABANkl3X1OrYFD7DtwAbYzFk9XoaAekVuDLIH8GZtudGi0fKvj0CGz1pT48MB2bIuSDUR2YjFCxCMzxAXGmnKkbH5xVO+44mxh7I7+i303kbZFnyc4tK6KsAMn8JCFaACNc7V5U48YIARbKmKHohUenlUnEgqKy6Jh95NPZyGdLJbJID/pQ4+TcBNj4d5MiIyTpaPYoWaqO9NoCWQGXxffOntZT3QbjPcCCg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 3 Apr 2023 16:57:44 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 03/10] x86emul: handle AVX512-FP16 move insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0165.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a2::10) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: 305e6770-76fb-45c5-afaf-08db3453c8bc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: juWwsLcDWMj12svgVwg+Yr3h9M/35BM7crTmON3ZDAaL9D9ys2Y5vCYAhwv/ajeZgsOUpG1bils1M+uO3TLC7bJtaz9giW1bVk948OpMzPINm/zdlZq2MOXVdXnt0TBYIi/w623Q9NvSghcuohq5uqtxjINpnpLDIVoKGCLoKrE1DReuELAoCnwOer/rWp+9E2XYnzw6bAJZaNpVLkjpzlfaR0r8gzvcpZ3J0vIcej/fDynF+U3FoTiMKNy27/mtcBuItKZYJVj0yvfUJPtHq1KotkOF7jiPbyGAKXZ7yC8SiOdaKAIwjsadvYYGyxBjcc3lfr5pLXL1+yMACGevKzCgl9aKNBI7nPZ1GwW78UFlmnMcNECVYzDBdwe+WkKVWT1LjYk+H3BKQI/n1AgP8+3i7Em65oVr2tHmo5EVEtyIfL9lF3db87KnVDOBfd786BUP6cJHiHlkKUkstdWGOF1mdwSdLM+4rAyIDmNoFsrlzZP/vpK3ssDp6l8AU/tXmTU8+8e8QnxSxuQp8Y5Ypvf0NeyC/mVWlPeapBDPXexMrTj5lZkBYa4AjO88qgXJlA+k8sO57RDYUMCFTMIzjSCEvfO0x91Ks26KP1mkrT3jzy7OVANCIy4P4o7gzk+bu72IomcLT9+Db64uk8EcfQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NnFlUTdseDA2bXZDaEhPWnRmZjd5UXppcXRLTzd0SVJydmFybHg0eElOak5Z?= =?utf-8?B?NkMyb1RvU0NWTWlpb0tNR0p0NXhqRXk1U01rdHhnZkJxN0tOVmljS3NhMFll?= =?utf-8?B?R0Q2LzFjVmpBUURaRU9WT3FRaTZBNURIR2RESW1XbXhsRjhLTUcyYzd0eHVK?= =?utf-8?B?UUpwOERHUjgxcnpzMnlmbGZ3VVh5V2E0eHNHTUh6RXVIUTZHMzhvVG1ZSWJN?= =?utf-8?B?UHJGV044T1FLb05IMTdEeE0vNFhydW95cXV1bzNFOEloS2M1V2dhV3ZDL1NH?= =?utf-8?B?Yjl1UW5lQk9ldEVua3VPUlZOQWRzYS9aSTQ3dm40enV5dGtCdGpWS3VwUEVn?= =?utf-8?B?MTBRMFFXUEVFN0ZnZXVVelJiV0tpTHlUTUcxN2pPNm1pd3AvaDJoanJNcjR0?= =?utf-8?B?M0xXSmh5NWlwaHJRSzRzRVRjNkJSN1NwQlV5SHlZb1JwbkRFTFVSVVNVODhV?= =?utf-8?B?bCt3ZE82SWhTc0pPWHBEcmVKdkk5d2RrUGlJM0VuNGZoZ1pUdHRrV05Bbnpi?= =?utf-8?B?dXpzYk9pSmFYM1FmVkVId1FsU0ZEdHM2MGtiSzc4bUlrVHRpbUpIOEJnRnVM?= =?utf-8?B?dS83L1BNVk1sK0o4ZDlPTDV5ZGNVZEJXL3JYT0RLcFpsd2tYdnh6cm1sWmRI?= =?utf-8?B?UFR4aXZVb25NZnJZL0FZWVEvdDJXT0RDeXlIcEdJblYrNVNscG5LKzkwb2pk?= =?utf-8?B?WEEvajdLMTBXNUF0SWlrTjhCdXlwUURubHN2N0s3ZDkxUmQrYkl1UHl3ckc5?= =?utf-8?B?YStqWm1iT1ZyUWl4NHJKbWVwNmFKb2o0NzduRmY3cEtCNS9KbStCa1lKbHNV?= =?utf-8?B?cnNuV2h0MGdzWERZVDFyTXlCeFNtN3Z3WTJmMVBVK1NBcFc4ZU1nTTcxcFVv?= =?utf-8?B?a0hxblJqSnB4OXVnUjdtZ0FaUkpqVnoyZWNqOTRWaC9KV3ZieGdiMGJnN3pv?= =?utf-8?B?RnFhK2R6V1Jnc3hMY0NEdWh6WE90T0FZdVd5RFJjaWVVQUd6M2gwMXBuMzdw?= =?utf-8?B?bGFCVk1WQUhNK3dnRzFTSjI0RkVTeG1rbnQ0ZnQ5ZFNQRktYdVZCMEVtTmdM?= =?utf-8?B?VTFuaGN5aUNkMjlwTTNnbUVRaFlqb3U3clZja2ZiSkZqRnBQcWplMFNiR0l6?= =?utf-8?B?TlFKbFZwYzJBRVA1UDBLaFVRWUFHS0h6Ym5LQ2laTWlYYnhDYjgwMWlXUnM3?= =?utf-8?B?d0w5T09VQVBVeGFqMXBwTEZHMi9FYlBKa3pBL0xycUJqbFpaQUQrL1d4L0tL?= =?utf-8?B?OU5wYUlsTXU5MWo0d0tNSE9tTE5aaUZ4NW5xVVU2ZW0raG93cktkZjhUWXlo?= =?utf-8?B?OE9hWVV4Q2hjNDdlUzdOWXMxeE9RZUlEMG5LZ0FteUdTWjlqS1ZFM3dTSG5C?= =?utf-8?B?VzdoUXJyVUlMZFduVytsVkhKM0tna1VnbllCQytjalM5TWNLV21sTjUranZK?= =?utf-8?B?TTVueUdXbHRwMG91dHcyRHRCbC8yeHVLbzV3RjdISlRwbTFia1hIZ2xiRXZN?= =?utf-8?B?Z0Z4aVJyWXRpQkxqenhuZXpUdmlSQ1cvS0hzY3BiWFJFbmtqL2VWL00vWUV6?= =?utf-8?B?YzJ2TkFWWU1sMUgrVzB1WTVzc2pFOUE0VExPYjNNb2RheUpkNmczMkJ1RjJs?= =?utf-8?B?bGpvUVdKeTlkbXBxdWh5cm5BRUZORTZPQ0Z5MnRlNGJheDJRai9qT2FxTUMw?= =?utf-8?B?eU92bkpsTzZJVk5udFErVmcveXBRckhjOG5lZGxob1RSU0R2UHBIQmJPenA1?= =?utf-8?B?NUN0Rkpuc3FXdzFZUEk2QWdZSExlbTRNbCsvaWx5NjVHSjRHeU42eGhCbGk5?= =?utf-8?B?QzZBdTYwakZxaFAwOFArekcwa0NVOVhuSGNnb1A3YXJjdGd1ZUQ0c3RtTzFV?= =?utf-8?B?OFZ4TEJyeDY3eHJWWUlrb1lIdENEd0p0Mk5nTnNRa2E2N3pBVzJLdThPb0RL?= =?utf-8?B?c0Q4Y3VEbnhnWjg3S2toRjg0Mzh1RDVMNGt5NjRkN3ArVEN0NlU0eTBkSDJm?= =?utf-8?B?OFRnV1ZEWk85VkdQMGJCeGwrelFrL1A5V1A0YUtQQnlUU1o0NlFQSlZsSE1t?= =?utf-8?B?TjF2SzlFL2VnUCtPODJhM3pqK29LNEwwbWtySVBIT2hTcUFZQUxOQXUvdmg1?= =?utf-8?Q?Kw11USetWsaRwNeGwqQwd2i/S?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 305e6770-76fb-45c5-afaf-08db3453c8bc X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:57:45.9815 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kNFNG1nkNpIvNdHSW+8U6RoBeBEl1fwDCoWnMH/Z0IuM81NMWrWFhAnVzIjobBw+I9u0Do0O15xRGXMlAVzqYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680533897804100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jan Beulich --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -622,6 +622,8 @@ static const struct test avx512_fp16_all INSN(maxsh, f3, map5, 5f, el, fp16, el), INSN(minph, , map5, 5d, vl, fp16, vl), INSN(minsh, f3, map5, 5d, el, fp16, el), + INSN(movsh, f3, map5, 10, el, fp16, el), + INSN(movsh, f3, map5, 11, el, fp16, el), INSN(mulph, , map5, 59, vl, fp16, vl), INSN(mulsh, f3, map5, 59, el, fp16, el), INSN(reduceph, , 0f3a, 56, vl, fp16, vl), @@ -635,6 +637,11 @@ static const struct test avx512_fp16_all INSN(ucomish, , map5, 2e, el, fp16, el), }; =20 +static const struct test avx512_fp16_128[] =3D { + INSN(movw, 66, map5, 6e, el, fp16, el), + INSN(movw, 66, map5, 7e, el, fp16, el), +}; + static const struct test gfni_all[] =3D { INSN(gf2p8affineinvqb, 66, 0f3a, cf, vl, q, vl), INSN(gf2p8affineqb, 66, 0f3a, ce, vl, q, vl), @@ -1039,6 +1046,7 @@ void evex_disp8_test(void *instr, struct RUN(avx512_vp2intersect, all); RUN(avx512_vpopcntdq, all); RUN(avx512_fp16, all); + RUN(avx512_fp16, 128); =20 if ( cpu_has_avx512f ) { --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2029,6 +2029,8 @@ static const struct evex { { { 0xce }, 3, T, R, pfx_66, W1, Ln }, /* vgf2p8affineqb */ { { 0xcf }, 3, T, R, pfx_66, W1, Ln }, /* vgf2p8affineinvqb */ }, evex_map5[] =3D { + { { 0x10 }, 2, T, R, pfx_f3, W0, LIG }, /* vmovsh */ + { { 0x11 }, 2, T, W, pfx_f3, W0, LIG }, /* vmovsh */ { { 0x2e }, 2, T, R, pfx_no, W0, LIG }, /* vucomish */ { { 0x2f }, 2, T, R, pfx_no, W0, LIG }, /* vcomish */ { { 0x51 }, 2, T, R, pfx_no, W0, Ln }, /* vsqrtph */ @@ -2045,6 +2047,8 @@ static const struct evex { { { 0x5e }, 2, T, R, pfx_f3, W0, LIG }, /* vdivsh */ { { 0x5f }, 2, T, R, pfx_no, W0, Ln }, /* vmaxph */ { { 0x5f }, 2, T, R, pfx_f3, W0, LIG }, /* vmaxsh */ + { { 0x6e }, 2, T, R, pfx_66, WIG, L0 }, /* vmovw */ + { { 0x7e }, 2, T, W, pfx_66, WIG, L0 }, /* vmovw */ }; =20 static const struct { --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -5140,6 +5140,76 @@ int main(int argc, char **argv) else printf("skipped\n"); =20 + printf("%-40s", "Testing vmovsh 8(%ecx),%xmm5..."); + if ( stack_exec && cpu_has_avx512_fp16 ) + { + decl_insn(vmovsh_from_mem); + decl_insn(vmovw_to_gpr); + + asm volatile ( "vpcmpeqw %%ymm5, %%ymm5, %%ymm5\n\t" + put_insn(vmovsh_from_mem, + /* vmovsh 8(%0), %%xmm5 */ + ".byte 0x62, 0xf5, 0x7e, 0x08\n\t" + ".byte 0x10, 0x69, 0x04") + :: "c" (NULL) ); + + set_insn(vmovsh_from_mem); + res[2] =3D 0x3c00bc00; + regs.ecx =3D (unsigned long)res; + rc =3D x86_emulate(&ctxt, &emulops); + if ( (rc !=3D X86EMUL_OKAY) || !check_eip(vmovsh_from_mem) ) + goto fail; + asm volatile ( "kmovw %2, %%k1\n\t" + "vmovdqu16 %1, %%zmm4%{%%k1%}%{z%}\n\t" + "vpcmpeqw %%zmm4, %%zmm5, %%k0\n\t" + "kmovw %%k0, %0" + : "=3Dg" (rc) + : "m" (res[2]), "r" (1) ); + if ( rc !=3D 0xffff ) + goto fail; + printf("okay\n"); + + printf("%-40s", "Testing vmovsh %xmm4,2(%eax){%k3}..."); + memset(res, ~0, 8); + res[2] =3D 0xbc00ffff; + memset(res + 3, ~0, 8); + regs.eax =3D (unsigned long)res; + regs.ecx =3D ~0; + for ( i =3D 0; i < 2; ++i ) + { + decl_insn(vmovsh_to_mem); + + asm volatile ( "kmovw %1, %%k3\n\t" + put_insn(vmovsh_to_mem, + /* vmovsh %%xmm4, 2(%0)%{%%k3%} */ + ".byte 0x62, 0xf5, 0x7e, 0x0b\n\t" + ".byte 0x11, 0x60, 0x01") + :: "a" (NULL), "r" (i) ); + + set_insn(vmovsh_to_mem); + rc =3D x86_emulate(&ctxt, &emulops); + if ( (rc !=3D X86EMUL_OKAY) || !check_eip(vmovsh_to_mem) || + memcmp(res, res + 3 - i, 8) ) + goto fail; + } + printf("okay\n"); + + printf("%-40s", "Testing vmovw %xmm5,%ecx..."); + asm volatile ( put_insn(vmovw_to_gpr, + /* vmovw %%xmm5, %0 */ + ".byte 0x62, 0xf5, 0x7d, 0x08\n\t" + ".byte 0x7e, 0xe9") + :: "c" (NULL) ); + set_insn(vmovw_to_gpr); + rc =3D x86_emulate(&ctxt, &emulops); + if ( (rc !=3D X86EMUL_OKAY) || !check_eip(vmovw_to_gpr) || + regs.ecx !=3D 0xbc00 ) + goto fail; + printf("okay\n"); + } + else + printf("skipped\n"); + printf("%-40s", "Testing invpcid 16(%ecx),%%edx..."); if ( stack_exec ) { --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -585,7 +585,7 @@ static unsigned int decode_disp8scale(en break; =20 case d8s_dq64: - return 2 + (s->op_bytes =3D=3D 8); + return 1 + !s->fp16 + (s->op_bytes =3D=3D 8); } =20 switch ( s->simd_size ) @@ -1469,6 +1469,15 @@ int x86emul_decode(struct x86_emulate_st s->fp16 =3D true; s->simd_size =3D simd_none; break; + + case 0x6e: /* vmovw r/m16, xmm */ + d =3D (d & ~SrcMask) | SrcMem16; + /* fall through */ + case 0x7e: /* vmovw xmm, r/m16 */ + if ( s->evex.pfx =3D=3D vex_66 ) + s->fp16 =3D true; + s->simd_size =3D simd_none; + break; } =20 /* Like above re-use twobyte_table[] here. */ --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -4390,6 +4390,15 @@ x86_emulate( =20 #ifndef X86EMUL_NO_SIMD =20 + case X86EMUL_OPC_EVEX_66(5, 0x7e): /* vmovw xmm,r/m16 */ + ASSERT(dst.bytes >=3D 4); + if ( dst.type =3D=3D OP_MEM ) + dst.bytes =3D 2; + /* fall through */ + case X86EMUL_OPC_EVEX_66(5, 0x6e): /* vmovw r/m16,xmm */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + /* fall through */ case X86EMUL_OPC_EVEX_66(0x0f, 0x6e): /* vmov{d,q} r/m,xmm */ case X86EMUL_OPC_EVEX_66(0x0f, 0x7e): /* vmov{d,q} xmm,r/m */ generate_exception_if((evex.lr || evex.opmsk || evex.brs || @@ -7745,8 +7754,18 @@ x86_emulate( =20 #ifndef X86EMUL_NO_SIMD =20 + case X86EMUL_OPC_EVEX_F3(5, 0x10): /* vmovsh m16,xmm{k} */ + /* vmovsh xmm,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_F3(5, 0x11): /* vmovsh xmm,m16{k} */ + /* vmovsh xmm,xmm,xmm{k} */ + generate_exception_if(evex.brs, EXC_UD); + if ( ea.type =3D=3D OP_MEM ) + d |=3D TwoOp; + else + { case X86EMUL_OPC_EVEX_F3(5, 0x51): /* vsqrtsh xmm/m16,xmm,xmm{k} */ - d &=3D ~TwoOp; + d &=3D ~TwoOp; + } /* fall through */ case X86EMUL_OPC_EVEX(5, 0x51): /* vsqrtph [xyz]mm/mem,[xyz]mm{k}= */ CASE_SIMD_SINGLE_FP(_EVEX, 5, 0x58): /* vadd{p,s}h [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680533926; cv=pass; d=zohomail.com; s=zohoarc; b=PRbddf1faz/wMiy4K+ORirSD2xYi3Vx937EyFbLQ+56VONWxrMfCLmkmMH/oD88tqpAHh4zDSn+xX5vgoOjiM1kEqIdFq2fIxXhIlsjpQ/AF9MZy92aPyItbpctiEcyf4y2KW/iE/yv5m036JvuXOYYBm+sRid8vrzRfsml9Es8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680533926; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Oydr5RGLPiB/5UlaPCHWJTbrdc3fnjsbwu/jwCLiWIo=; b=KKaHp51NZGXfXMI+PvJeRzKogTCCvMkfLfOI7I3nI8rM20hrnRtm+I3ZGxUSrpuqsniHLQoyTwwjpU4282mB890HKiOg0X1J3yDaIx7eNea5UjDoo6OdYbSr3mtdHw1+hIxipr95Uo9FcIrMZqlwgDf0PQWKqcxjfF4JW8t/Vo0= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680533926985858.8858413855318; Mon, 3 Apr 2023 07:58:46 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517490.802879 (Exim 4.92) (envelope-from ) id 1pjLdS-0007l0-Oj; Mon, 03 Apr 2023 14:58:18 +0000 Received: by outflank-mailman (output) from mailman id 517490.802879; Mon, 03 Apr 2023 14:58:18 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLdS-0007kt-Lk; Mon, 03 Apr 2023 14:58:18 +0000 Received: by outflank-mailman (input) for mailman id 517490; Mon, 03 Apr 2023 14:58:17 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLdQ-00066R-Ob for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:58:16 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2062e.outbound.protection.outlook.com [2a01:111:f400:7e1a::62e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id f6539507-d22f-11ed-85db-49a42c6b2330; Mon, 03 Apr 2023 16:58:16 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:58:14 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:58:14 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: f6539507-d22f-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gqnEFc9p304BbjCR28meVw3Cgt/JGP1KNLoUbKnVLacoWdsNP90bat1sFpAujaGNvQaaCSGYPqp0dMf+GVAz3TyZ6ktSAgM8ZAmqPrDNA7FC10nB7P1CAjR4kIaaPD2Ej0z9sUrm0G0eRWz/cN1MI2u1cDcVBbMZX3NdGQNsjYQDZn6F4yu4RGWX8SyKeiwHoif3JZ1JgQF4B3Etd3BZyn/IaiwoFlUx69uMxIRkZt4/M/9EJFrEwBlyt3QCQFBhChrM2HNon4x//ER/GLvcxlN84XLsaMwqa1l2IVBzi6NClJNxefrTWEtAuLIhfmD/sILk+SfRBpobGNzVyjoYNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Oydr5RGLPiB/5UlaPCHWJTbrdc3fnjsbwu/jwCLiWIo=; b=TE+BkxGv3HX7deLzpjZOcZcPg9YOK3PVZ6EUVyuFgFy0+SnJdyPF0o8QyLYt5cOU2NGFNaRfrGMX4BrBHVpqeJwkZWrMaDqPShld/A9ZzGdKp3T3XZQ7V6rWqr39+7xWRQ3HAHieWoOlSKURUEIJrB5Rq9o7YgzT6tqe6hA2l8BFJTwji4X1vuh6RuVT70Nq1euktvc1xC0IaSgClJaS8OxyyCJAxndc+NzeEfHSn9fQ85FfMPGXgzh6dk3pbLDyikLMp4UBc9m7S5p/e8zO+6cZeI/YUaprycb9DK+QeFOnEm9y7AALs4AORHzD3+7O/0lEYZlDvPRFAgS+9fmFdw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Oydr5RGLPiB/5UlaPCHWJTbrdc3fnjsbwu/jwCLiWIo=; b=oxd/K2NL01WO8G2hQcT1QCfnVwgkyCXY6pVg2MFMtB+tf0CYWpNJhAa8XyZtcLkO6nBrOr5VRNtHx8BRCFxLOP6WRID+jNlLHFtDeUFHFU1OsRSR9Gom/up5TRXGkAhsRu8tTEuWv7SRQpnvKysk2N7SbJxYOfC+4yafMjcYIhKId932BBHXoCD0AaZzFojKgyI9OcwDCKpFC/pz3mYJnaNDrT6gTPJ7YiYTDFx1H1+rhqP+XG5z0QzDnciK6MFs43rBIMEFR+vi47rHuSQxu5is6te7+NNucFENBXKv09bn34WXohRJUPnuLfI9I9enwg8GSdfanpTT90031M20/Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 3 Apr 2023 16:58:13 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 04/10] x86emul: handle AVX512-FP16 fma-like insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0192.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a4::16) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: ab8862c4-b2b5-4ea6-d632-08db3453d9c9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: E1FjQ3QBqYkRdozj0hcc2S4PtbKILBwA/3y5NzFay+CMFtL/sryD9cyPVOp2NFqi33rjzaB0/L/UOY85eKTaabysq4ZmMq0J1XzshAYUpo77jnh12hZp+ysdEWJZK+35BFu660Gr4ywOd18yeHGrT06l2U/QAT3gRpZmGMGuRVmhNaFpICQHjK30/PehqsJLr694fj47KFnlDwLQtfMPqNiXryC8rgUh1Pg1S4HO9e+dcTDI5DG6HCSZYnv9XN5X+PEQZZjGgPJFXLylPj+HzJVtcUYxcEVqu5Eq8lifq02axkh2Ff3NYYztVacqYj36fTSxRXv8SCmVOXORaee/9LSv5VAYHzda5qFFfvWUdCxQ7kUS9/jtkyZrYN0kmC03Bmml1UPqIOICU2AVIoRLeJs+UthTHSpuSuVLaMjuJbouI2+YwX3r2FHbDnU5hdxrbmS3vibjczAI8gIjCTMeTl2IDKQF3h3/ZeX/J849Iv6S/JvhrsSxe81YXx5FcVRrTFzw39i/cCvNLHMIgxl/xdlvVBNycTV64WishB9njWE8jKybpZI+VVK/kUm3cmVb1hbm+To8DX3Bz5mKE80odUoHBzcLsUMg5f2K9kigf7tLPr0Tq0nR3gsgR32Apg8W219LJ1caBuCQTT+APfEsXw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(30864003)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?amQxMTlIMTBPL2RhdXpwTWYxNityd2UvbVRzQWYyK0FOTFRFdFZ3bUM3dmFm?= =?utf-8?B?V1hoeUpJMjhlbkdIdUdwZDdjendYY1lrTE9Ia0g3MHBYU0NlNFZOUkxVTXdt?= =?utf-8?B?aFVSYm1FV0ZEdUFTL0FuMlhtLzR2bkREN01tdXcySldWSW9SZU1tMGhhMWpK?= =?utf-8?B?OUZiS3UyYXVMUTlBU1gyYTJOcGZqdTk2MjR2Zkx3UU0vby9OLzA1em5ISC9W?= =?utf-8?B?TTZYMGlCdC9aRk8ySis4Vzc3My8vNDFUdUtHUHQ5M01RcFRibVhIZCtXUis1?= =?utf-8?B?MXczZTNEWnByK2NmbFR2TGFUVW9PL0VEMDV0WGUxTHNJR0FZc0w1cFZuRE9O?= =?utf-8?B?NnV5cTFKTUVhaGgxaVBKWjB1Wk1lMGtFWStBZXBjcUFOSXFvZ3JaTlRTaUdY?= =?utf-8?B?L1M5TGVhaVBreTRNREgrWlRGaDFFSjhCMjhkM05OS1hlMnpDN2RpN2YwSWFs?= =?utf-8?B?T3BlMnVXUW55Qm5GMC8za3NqSEdFQjRBRlBaZ3FRVzVMRXh0TkxwS3RiN2xF?= =?utf-8?B?cllXQmtQaDliaEJyQ3hTdWd0WHBpRndrRE40cUFWalVtZmYxWjkvSzV6YWxo?= =?utf-8?B?R1lGVmdsaXJ1cnNtL216RFI1dkcwZGI4cXJrWnQ3cGxNR1JkZTg5NXpOMm45?= =?utf-8?B?T3RpVlcwVFM0anIyNnFmeXBOYmFmV1dacmN4UG03WWZPb3RYaXVJeWxaWFhQ?= =?utf-8?B?VHNBQzhVYjJwdWsyaFJreHZmZ0x0ZkN1REtqRG41WTMzN0w5ZDYzWFJOK3pR?= =?utf-8?B?ay9FWUZkRkg2Ni85MXRUa3NJTTZnNlhCMlI4YjMrNDFlV2dVdjNHTnJreUN3?= =?utf-8?B?MEJrN2F0THFUUHljSnNvaUhZZ0xkWlZJbzJMYjBhbHFtWFBReTNEN1Y4NXdX?= =?utf-8?B?TUFSVnlqWCtBYUUydjBWL1g5WkUxTzdFaDJjRFl3eFBqSWZvVHBiZmhwY0pj?= =?utf-8?B?UWxTaFRwSE0yMVRwR053VkZxQzFRVHhhNVJveGpsTXVaTTZDa3pOSC9rU2hX?= =?utf-8?B?czRTdUdZWHlZVGJXVWw5L3NlN2lPQXI4cGdGakEvV2NuSmV6WXJmRUVRUmRk?= =?utf-8?B?WmR4NXpablk5M1FhL1Fpd09PZXlVVVQvVEZBTWxqNGtoS1hJSy9WZFI5eWRX?= =?utf-8?B?QTBZcEsrT1BzMXR0VEtoMUx3UzNYTmhCY3Yya29RcVd5YU9DN1Vxamlpb00r?= =?utf-8?B?NEJZOGpWSDZJYkFRWlQwVFAxNFdqVzkvYlhvVnBKZ1lXeGVJQU9HTklkK3pu?= =?utf-8?B?Rk1Bd3Jnc2pLeVQzK0ZBTGFrQmJac0llNUJFVzJZdFZKN2UxNFB0ZWYrQnA2?= =?utf-8?B?TTdBcDNDM1RXekR2Mi9WY0NxZU56b3R4N2w5dHpvUkhxbVNyOUQxeFlxN0di?= =?utf-8?B?S3I0aDNoM3FTRFBpeTFRd2FlMWZ3bExsc1BjZDRhUXZveG1ib1ZtT3ZNNnZ3?= =?utf-8?B?cHlOMWtJblZiUnZickhvYlR2SXAxbUlYSFpVTytReHJMSTJLK0t0MXZZcHVa?= =?utf-8?B?R0RDWm41aDRuRXpydWVZUGhCckI0UlpmVVpxS1JLaVd6QXdGNjZYSExPZy83?= =?utf-8?B?Z2FpUnJEVGllVGRsZ3d4M3BGeklKa3pQRXF6LzFxcWNoSzV1VmpHanhBbE9R?= =?utf-8?B?QkcvZjBmai9EeExXaUZNSzdiUVYzNmoxRnJoZWsxcjNXaVMyQUhVbzVsczJT?= =?utf-8?B?cmxsWEFmNkFsSEpydGp3UmRDcHlGc1hUNnhsWWhsOXMxajNiUktZSFJZL1BU?= =?utf-8?B?WG5ERllsK0drLytpNk5SMWgwOURHZytYKzNKajVCVlE2V0lqWEkrZnQrWXlm?= =?utf-8?B?clQyUWY1alA2cDNZTHJXZEdIV0FWK1dlMlFxU1JMQ055N0hVdFNzdUN1T1Aw?= =?utf-8?B?bmMyU3Q0OVJDMmRjaWxZVTJTMFJYaUlxdnJqUlVrcm50alNyMGlwYnlrQmRv?= =?utf-8?B?czBmZDQ2ZHlRL3QwdUFaR3I0eGcrQ05NR05UZzVSRjRYYmZYa1NudUF6Y1p3?= =?utf-8?B?anFjbHd6RWJrcHgzQi9NcmZjZVlvb3BtRldFNnNTalBFb2NPNEdzanluM0FJ?= =?utf-8?B?ZWRFUzMyeWlGOW1QS3hOVWIyVklMZkErWWRsTVFlSkhvYmlPYVdDUTR0MjY3?= =?utf-8?Q?0hPKYHiLprcAFzWGZCWDt3XG3?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: ab8862c4-b2b5-4ea6-d632-08db3453d9c9 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:58:14.5414 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 3x+Uzm4zH6donlyxuL75jxyuHt+D/xbAzaajYG4qAd4Qko+8JLXJLQwDQ0J0p40YT+YeB28eETP9++rQ2XEmvA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680533928142100001 Content-Type: text/plain; charset="utf-8" The Map6 encoding space is a very sparse clone of the "0f38" one. Once again re-use that table, as the entries corresponding to invalid opcodes in Map6 are simply benign with simd_size forced to other than simd_none (preventing undue memory reads in SrcMem handling early in x86_emulate()). Signed-off-by: Jan Beulich --- v2: Add comments. --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -614,6 +614,36 @@ static const struct test avx512_fp16_all INSN(comish, , map5, 2f, el, fp16, el), INSN(divph, , map5, 5e, vl, fp16, vl), INSN(divsh, f3, map5, 5e, el, fp16, el), + INSN(fmadd132ph, 66, map6, 98, vl, fp16, vl), + INSN(fmadd132sh, 66, map6, 99, el, fp16, el), + INSN(fmadd213ph, 66, map6, a8, vl, fp16, vl), + INSN(fmadd213sh, 66, map6, a9, el, fp16, el), + INSN(fmadd231ph, 66, map6, b8, vl, fp16, vl), + INSN(fmadd231sh, 66, map6, b9, el, fp16, el), + INSN(fmaddsub132ph, 66, map6, 96, vl, fp16, vl), + INSN(fmaddsub213ph, 66, map6, a6, vl, fp16, vl), + INSN(fmaddsub231ph, 66, map6, b6, vl, fp16, vl), + INSN(fmsub132ph, 66, map6, 9a, vl, fp16, vl), + INSN(fmsub132sh, 66, map6, 9b, el, fp16, el), + INSN(fmsub213ph, 66, map6, aa, vl, fp16, vl), + INSN(fmsub213sh, 66, map6, ab, el, fp16, el), + INSN(fmsub231ph, 66, map6, ba, vl, fp16, vl), + INSN(fmsub231sh, 66, map6, bb, el, fp16, el), + INSN(fmsubadd132ph, 66, map6, 97, vl, fp16, vl), + INSN(fmsubadd213ph, 66, map6, a7, vl, fp16, vl), + INSN(fmsubadd231ph, 66, map6, b7, vl, fp16, vl), + INSN(fnmadd132ph, 66, map6, 9c, vl, fp16, vl), + INSN(fnmadd132sh, 66, map6, 9d, el, fp16, el), + INSN(fnmadd213ph, 66, map6, ac, vl, fp16, vl), + INSN(fnmadd213sh, 66, map6, ad, el, fp16, el), + INSN(fnmadd231ph, 66, map6, bc, vl, fp16, vl), + INSN(fnmadd231sh, 66, map6, bd, el, fp16, el), + INSN(fnmsub132ph, 66, map6, 9e, vl, fp16, vl), + INSN(fnmsub132sh, 66, map6, 9f, el, fp16, el), + INSN(fnmsub213ph, 66, map6, ae, vl, fp16, vl), + INSN(fnmsub213sh, 66, map6, af, el, fp16, el), + INSN(fnmsub231ph, 66, map6, be, vl, fp16, vl), + INSN(fnmsub231sh, 66, map6, bf, el, fp16, el), INSN(fpclassph, , 0f3a, 66, vl, fp16, vl), INSN(fpclasssh, , 0f3a, 67, el, fp16, el), INSN(getmantph, , 0f3a, 26, vl, fp16, vl), --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2049,6 +2049,37 @@ static const struct evex { { { 0x5f }, 2, T, R, pfx_f3, W0, LIG }, /* vmaxsh */ { { 0x6e }, 2, T, R, pfx_66, WIG, L0 }, /* vmovw */ { { 0x7e }, 2, T, W, pfx_66, WIG, L0 }, /* vmovw */ +}, evex_map6[] =3D { + { { 0x96 }, 2, T, R, pfx_66, W0, Ln }, /* vfmaddsub132ph */ + { { 0x97 }, 2, T, R, pfx_66, W0, Ln }, /* vfmsubadd132ph */ + { { 0x98 }, 2, T, R, pfx_66, W0, Ln }, /* vfmadd132ph */ + { { 0x99 }, 2, T, R, pfx_66, W0, LIG }, /* vfmadd132sh */ + { { 0x9a }, 2, T, R, pfx_66, W0, Ln }, /* vfmsub132ph */ + { { 0x9b }, 2, T, R, pfx_66, W0, LIG }, /* vfmsub132sh */ + { { 0x9c }, 2, T, R, pfx_66, W0, Ln }, /* vfnmadd132ph */ + { { 0x9d }, 2, T, R, pfx_66, W0, LIG }, /* vfnmadd132sh */ + { { 0x9e }, 2, T, R, pfx_66, W0, Ln }, /* vfnmsub132ph */ + { { 0x9f }, 2, T, R, pfx_66, W0, LIG }, /* vfnmsub132sh */ + { { 0xa6 }, 2, T, R, pfx_66, W0, Ln }, /* vfmaddsub213ph */ + { { 0xa7 }, 2, T, R, pfx_66, W0, Ln }, /* vfmsubadd213ph */ + { { 0xa8 }, 2, T, R, pfx_66, W0, Ln }, /* vfmadd213ph */ + { { 0xa9 }, 2, T, R, pfx_66, W0, LIG }, /* vfmadd213sh */ + { { 0xaa }, 2, T, R, pfx_66, W0, Ln }, /* vfmsub213ph */ + { { 0xab }, 2, T, R, pfx_66, W0, LIG }, /* vfmsub213sh */ + { { 0xac }, 2, T, R, pfx_66, W0, Ln }, /* vfnmadd213ph */ + { { 0xad }, 2, T, R, pfx_66, W0, LIG }, /* vfnmadd213sh */ + { { 0xae }, 2, T, R, pfx_66, W0, Ln }, /* vfnmsub213ph */ + { { 0xaf }, 2, T, R, pfx_66, W0, LIG }, /* vfnmsub213sh */ + { { 0xb6 }, 2, T, R, pfx_66, W0, Ln }, /* vfmaddsub231ph */ + { { 0xb7 }, 2, T, R, pfx_66, W0, Ln }, /* vfmsubadd231ph */ + { { 0xb8 }, 2, T, R, pfx_66, W0, Ln }, /* vfmadd231ph */ + { { 0xb9 }, 2, T, R, pfx_66, W0, LIG }, /* vfmadd231sh */ + { { 0xba }, 2, T, R, pfx_66, W0, Ln }, /* vfmsub231ph */ + { { 0xbb }, 2, T, R, pfx_66, W0, LIG }, /* vfmsub231sh */ + { { 0xbc }, 2, T, R, pfx_66, W0, Ln }, /* vfnmadd231ph */ + { { 0xbd }, 2, T, R, pfx_66, W0, LIG }, /* vfnmadd231sh */ + { { 0xbe }, 2, T, R, pfx_66, W0, Ln }, /* vfnmsub231ph */ + { { 0xbf }, 2, T, R, pfx_66, W0, LIG }, /* vfnmsub231sh */ }; =20 static const struct { @@ -2060,6 +2091,7 @@ static const struct { { evex_0f3a, ARRAY_SIZE(evex_0f3a) }, { NULL, 0 }, { evex_map5, ARRAY_SIZE(evex_map5) }, + { evex_map6, ARRAY_SIZE(evex_map6) }, }; =20 #undef Wn --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -1235,6 +1235,20 @@ int x86emul_decode(struct x86_emulate_st d =3D twobyte_table[b].desc; s->simd_size =3D twobyte_table[b].size ?: simd_oth= er; break; + + case evex_map6: + if ( !evex_encoded() ) + { + rc =3D X86EMUL_UNRECOGNIZED; + goto done; + } + opcode |=3D MASK_INSR(6, X86EMUL_OPC_EXT_MASK); + /* + * Re-use twobyte_table[]'s 0x38 entry here, for t= he + * similarity of the 0F38 entries with map 6. + */ + d =3D twobyte_table[0x38].desc; + break; } } else if ( s->ext < ext_8f08 + ARRAY_SIZE(xop_table) ) @@ -1484,6 +1498,28 @@ int x86emul_decode(struct x86_emulate_st disp8scale =3D decode_disp8scale(twobyte_table[b].d8s, s); break; =20 + case ext_map6: + /* + * Re-use ext0f38_table[] here, for the similarity of the entr= ies + * valid in map 6. + */ + d =3D ext0f38_table[b].to_mem ? DstMem | SrcReg + : DstReg | SrcMem; + if ( ext0f38_table[b].two_op ) + d |=3D TwoOp; + s->simd_size =3D ext0f38_table[b].simd_size ?: simd_other; + + switch ( b ) + { + default: + if ( s->evex.pfx =3D=3D vex_66 ) + s->fp16 =3D true; + break; + } + + disp8scale =3D decode_disp8scale(ext0f38_table[b].d8s, s); + break; + case ext_8f09: if ( ext8f09_table[b].two_op ) d |=3D TwoOp; @@ -1703,6 +1739,7 @@ int x86emul_decode(struct x86_emulate_st break; =20 case ext_map5: + case ext_map6: case ext_8f09: case ext_8f0a: break; --- a/xen/arch/x86/x86_emulate/private.h +++ b/xen/arch/x86/x86_emulate/private.h @@ -196,6 +196,7 @@ enum vex_opcx { vex_0f38, vex_0f3a, evex_map5 =3D 5, + evex_map6, }; =20 enum vex_pfx { @@ -251,6 +252,7 @@ struct x86_emulate_state { ext_0f38 =3D vex_0f38, ext_0f3a =3D vex_0f3a, ext_map5 =3D evex_map5, + ext_map6 =3D evex_map6, /* * For XOP use values such that the respective instruction field * can be used without adjustment. --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -7778,6 +7778,49 @@ x86_emulate( generate_exception_if(evex.w, EXC_UD); goto avx512f_all_fp; =20 + case X86EMUL_OPC_EVEX_66(6, 0x96): /* vfmaddsub132ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x97): /* vfmsubadd132ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x98): /* vfmadd132ph [xyz]mm/mem,[xyz]mm,= [xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x9a): /* vfmsub132ph [xyz]mm/mem,[xyz]mm,= [xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x9c): /* vfnmadd132ph [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x9e): /* vfnmsub132ph [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xa6): /* vfmaddsub213ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xa7): /* vfmsubadd213ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xa8): /* vfmadd213ph [xyz]mm/mem,[xyz]mm,= [xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xaa): /* vfmsub213ph [xyz]mm/mem,[xyz]mm,= [xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xac): /* vfnmadd213ph [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xae): /* vfnmsub213ph [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xb6): /* vfmaddsub231ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xb7): /* vfmsubadd231ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xb8): /* vfmadd231ph [xyz]mm/mem,[xyz]mm,= [xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xba): /* vfmsub231ph [xyz]mm/mem,[xyz]mm,= [xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xbc): /* vfnmadd231ph [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xbe): /* vfnmsub231ph [xyz]mm/mem,[xyz]mm= ,[xyz]mm{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + if ( ea.type !=3D OP_REG || !evex.brs ) + avx512_vlen_check(false); + goto simd_zmm; + + case X86EMUL_OPC_EVEX_66(6, 0x99): /* vfmadd132sh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x9b): /* vfmsub132sh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x9d): /* vfnmadd132sh xmm/m16,xmm,xmm{k} = */ + case X86EMUL_OPC_EVEX_66(6, 0x9f): /* vfnmsub132sh xmm/m16,xmm,xmm{k} = */ + case X86EMUL_OPC_EVEX_66(6, 0xa9): /* vfmadd213sh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xab): /* vfmsub213sh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xad): /* vfnmadd213sh xmm/m16,xmm,xmm{k} = */ + case X86EMUL_OPC_EVEX_66(6, 0xaf): /* vfnmsub213sh xmm/m16,xmm,xmm{k} = */ + case X86EMUL_OPC_EVEX_66(6, 0xb9): /* vfmadd231sh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xbb): /* vfmsub231sh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0xbd): /* vfnmadd231sh xmm/m16,xmm,xmm{k} = */ + case X86EMUL_OPC_EVEX_66(6, 0xbf): /* vfnmsub231sh xmm/m16,xmm,xmm{k} = */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w || (ea.type !=3D OP_REG && evex.brs), + EXC_UD); + if ( !evex.brs ) + avx512_vlen_check(true); + goto simd_zmm; + case X86EMUL_OPC_XOP(08, 0x85): /* vpmacssww xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x86): /* vpmacsswd xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x87): /* vpmacssdql xmm,xmm/m128,xmm,xmm */ --- a/xen/arch/x86/x86_emulate/x86_emulate.h +++ b/xen/arch/x86/x86_emulate/x86_emulate.h @@ -620,6 +620,7 @@ struct x86_emulate_ctxt * 0x0f38xxxx for 0f38-prefixed opcodes (or their VEX/EVEX equivalents) * 0x0f3axxxx for 0f3a-prefixed opcodes (or their VEX/EVEX equivalents) * 0x5xxxx for Map5 opcodes (EVEX only) + * 0x6xxxx for Map6 opcodes (EVEX only) * 0x8f08xxxx for 8f/8-prefixed XOP opcodes * 0x8f09xxxx for 8f/9-prefixed XOP opcodes * 0x8f0axxxx for 8f/a-prefixed XOP opcodes From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680533945; cv=pass; d=zohomail.com; s=zohoarc; b=mux+YhIRKqoXdjPo6lHpGAtbYKS8WCwIrUPFMXyWuM8hsmJNmLsn4y0trLNPi52D+7YhEx7Bpm9NnKS1I2hhNFfg4JbbxIt+eosdu0zM4aib/LvD3rVE0314v8NW3WM0EhbmTY3gR/vSUtPbUcNbl8tR7m1j7v0Z3AAld4N9GBM= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680533945; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Ur6LIVsIiGjC3p7/RJj3JA9BWiqIOjVGL814s+UqimA=; b=eqAT9mMt7D0w8O74s+6YACD2Z77DY1woFggXcpAW9keVKwjsW7AqxOH70KxMQsTq7+E6+oakycMSs7d8gAOgA5ryQxJjMtxVS7uSSKm/rSplHRfqqoGEMvC2cAqyaD/nEelN0MGW92BSGNX/5yp1hxtT7Y03D1Cy1VyqO9ocPQ4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 168053394588471.2087524400871; Mon, 3 Apr 2023 07:59:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517493.802889 (Exim 4.92) (envelope-from ) id 1pjLdn-0008DY-0t; Mon, 03 Apr 2023 14:58:39 +0000 Received: by outflank-mailman (output) from mailman id 517493.802889; Mon, 03 Apr 2023 14:58:38 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLdm-0008DR-U5; Mon, 03 Apr 2023 14:58:38 +0000 Received: by outflank-mailman (input) for mailman id 517493; Mon, 03 Apr 2023 14:58:37 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLdl-00066R-6c for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:58:37 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on0630.outbound.protection.outlook.com [2a01:111:f400:fe0c::630]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 02a1081e-d230-11ed-85db-49a42c6b2330; Mon, 03 Apr 2023 16:58:36 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:58:35 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:58:35 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 02a1081e-d230-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C+EmADf+8qQGDOO2a63j7D3UXeDO17W/stMUvc3IZ+UhA4blbOiYj63+46myvKLXBRP02wPDZVgOQhVpceSXxPbN8OwJPSY3qnH5qnJo/XIju6/J15bQLgskU8QDDC9B3oIie6i1xjXYeerLReCeeCJsErm8aJQZelkbRQqRUGQXZLeHYfgwHbF46/ymma/9Bdg1FikzP6iyiNmGb6wsxWt+I9ctyU2EPeCA3mpPs78dHURoQEuf7AwkTjyYv/2Rvz+/7+l2LtBacGWhMY1gR+oIxaMNf+0UvxBFyxz5S6gBTrGGiUBoauzDUrEgbnxmU31wRqEdfgyWpUVCna14XA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Ur6LIVsIiGjC3p7/RJj3JA9BWiqIOjVGL814s+UqimA=; b=KMD8RGMvfkIZLn4GC2cUTaf+ESHTasZiPA5BTKcjR7BaRPa/cTC1hvMKzIFBngILXUP1+4lJGlWxgBkhjp4i17Nvv9PvqkUOT4y1pidJ/fJ5FiFOWtb82eOhQmxSd1dyfIYjjJw3DeTrrNNfkUeinIXpRX4maEU1y4absn3UILqX5tCDSYhB8NvDTp3EhsvkZYvwk23CR93+APjS23LFq6TQABaTTpDxO6eGWeMIq4ZR+eAEAag6HHGTh6Ba68qeTm3S0OG8gKqzJRuUaINiSaV5OI1dunOOKKHjPnAUM5QpupB9kKMEUsRimElvrhgladaNDALyVOgbmj4l1rAaNw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Ur6LIVsIiGjC3p7/RJj3JA9BWiqIOjVGL814s+UqimA=; b=G33wVPMKVv7m65GBYqJyXhsLSsnI41uo1yTsRsp6JmvhbZAD/ulN4EY//VWEuvo752DLlEb3IfQt5wQ7T1dgUkDogypy0Xw83RV440jgPW9JwihA02ZyaW08BD/GK6OiRb0gSjIYl+lp/7FHVsjCFL3DZHgjhHIqOJdZBd4drph1eY1VNABMq+JkJYtrZaEicv8VQRI+cUW1WIAl5S9gb2HQppymfMM+e+TrHQkcCyL0unGAkpVSnaHhO0KLg8BT1xVmnVFeDdXE1Nliz+mO1YLuWw2PYq7muDr/AsA2BNSClIjOhmOa7m/bY0D6kjJEQGS2U7Rfuk/FwbCTk+l0bg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <5ae781d5-0c8d-3c7e-31ea-b54e1eee6573@suse.com> Date: Mon, 3 Apr 2023 16:58:34 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 05/10] x86emul: handle AVX512-FP16 Map6 misc insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0016.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::21) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: aa5fd024-27bb-482a-2236-08db3453e617 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qrk9KyUj4cU/pfT5MM0EPK48DtshvMOhIQWZBj30v8IeYswXQvByOSI7E95RnMKSxCQ2n2QBcUc/KparlVb8Z+ddlKk2n5NDR4a5OQN5/I1VaHiQPTEWVa51Ta4PZ5dSvXixFwShLzCU9QTgEOvJfLpTN1A6AnRtTLWm301i0aWRE7T3K2AJV14e1WoHwK9+0vPeGnIJP4FeLX4uw2JxOradHhCaKDWOGdwhi/UxwY0K1h+sLlP3PJqlWJUGx4y4ppriTr0mujAIOjI/3o4+a0Iem8rbbBCB1DEs1qMZVhWRg/7jbZjvozFm6BDC/xKxLTGBeMaOvNop5EkmjZtABvGjlSaqxLhhae9Vt6txn3fT7d2vZN/R+CqYx/yga4LSNEAqfGZRAwEqruL1gibb6Sz4hU1o/eb+O/fnjB5TA1VLRsHqx5jpCw8DZHbIDKnT4PIejQQHgS1XEr+OTdp2+WScCMF5xL7ryRdS+Y77hHmOz7ICOLuWgI/s8wPHlvTpRb8uqwXut5DA4/YEbUCGN45ZUrKPoUU625QCC822rgEY9Zg7w8x+MLO531TgDMhf5hTl1U0X29V6aVxzMxhLWTBORJdybfBdJBFJXPLownAzZXi/wwxKPVDnGv7KINyGzirDx3I8kHP9qAk3vH8coQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aWFHR1ZCcmhyQkN5ZnhPMEI5RkZQZzdlbERkakd0elQyUzVEdW9UOWhqVXRQ?= =?utf-8?B?dVRtMHFxZlg5L3hkQkJlRDRDRGZyZHdYM0daNVRGVnZMeU5DM3VYa3NDaUhC?= =?utf-8?B?RVRDYjBxWWZRQWtEbVl2QklXRUxPOFV4VHArK3ppMEZSMTYvUDdpSmZaR2Zz?= =?utf-8?B?ZzhHcU0vdlA3QmZDc29tb3ZuVDlCYzczTG5WQkhtTjNtQjNIOStMM2FFK2lt?= =?utf-8?B?Q3BVUVk2RWQ1YlAvUVA1ZXVYN0Vzc1pQcUdaVnRxMjltcG1QbkQ4aW9mS0FX?= =?utf-8?B?QzhpSzJ4T1B0WmxmWHpQdWJ5OG9xR0xQZ1haU0RlZy9JOCtrTDMxc1c4aTBx?= =?utf-8?B?YlNMTXdQWG1OZnZBbmtLZXcxUFEyaDZLZ0grOXZPcnJSaXYwSmZqZnBIRnRl?= =?utf-8?B?NDl1bEtIMTNMelNFRHFBN01CQkNhVU1OK0QzeU5YUnA5d25hcnRqWU12ZEpP?= =?utf-8?B?TWVFSlYzbjltUk9KWno4bUEyOVIrS3lFc1dBeng1T2FXT1IvY1BqTWlKd2VZ?= =?utf-8?B?ejlTdlpyWDJxTHQrK0VNSnlpOXdwQmdsWUw2UDFEZG1jY2V6QnNRbnkzRUs5?= =?utf-8?B?cFJEbDRrSWgwNDJpaEhqN2ZpaVFzSllncm9uUmthQVVSaGd1S1F5akszcVhm?= =?utf-8?B?RktCUDJYQnlPZkVrZEQ3czFmaVBxNzIxdUd3K1hDeThVOFVqbCtOc3hPUWln?= =?utf-8?B?TjV3YVVuNFJFWExDK1NSVVp1cEVuT1FqQmJXZDZLUUtYQlBNanhTWXZiTTVs?= =?utf-8?B?bjVFck5udzV4V1JhMTFvWHlBaXk3bDlRVVdoOEwvcDVPVDlvelVwZTlDbnBW?= =?utf-8?B?clNGN1huMWJnREFlWDl2dUtjUTJzQzdHaVdUQTFPTVhLWTZlTE1Qd1pxaEgw?= =?utf-8?B?OE5NKy9Jd1d2ZVFyeHduVG5QSGpHSCtDZ2xCTmMwL05vd0NLZE50NXZ4bGxP?= =?utf-8?B?TStsb09ZU084RmdmWnlMQlFwMjdKc212MXhzZDBxaUo3TVlkcjBkS0szemhn?= =?utf-8?B?V3JXU0ZyRWlaMmdhaURQZDdlUkpWcjNiOWFlbTBRSEQ1eitkNElKU1RGbG5u?= =?utf-8?B?TVloUUdrZkNheHpvWTcrMGxKZ3hqTlNqM2RzYnh6ck1vWnZ5UUtLaVVmejc3?= =?utf-8?B?SE5INWM2UHpRWjhDQ0NZMEhHcmFRL3RVSkFQWFRnUFNIYUhkeEdUZyt3c200?= =?utf-8?B?Nk1saWFTb1BtM1ZmZGh3MDZwaEtQRVFoc29HdzE0K0RlOFRuSExETEhrL1Yz?= =?utf-8?B?L3IzZ0huRmNWRFhFVGg0bVBtajdhOURTRm5VVDFCK3lZVGJjc0tSZjVKRkpx?= =?utf-8?B?eGh1Q014UkxMM2JZRDUzdkVtKzV1VXdFdng0ditLaEZlUGMvV3I1akUxeERa?= =?utf-8?B?L3lOUmpqSVV2ZTVXVnBzSFdBUWNSWmROeWJ6N25pV0VHMGRpRHlNRTVSUFNC?= =?utf-8?B?NGEzRDBaSmRDZ2hJVHBkMEtkWFBSWWhrVkYvdlRFTS93USswMXhKQk4vQXJi?= =?utf-8?B?VHRId3dkalpQSVMzQmRhY0ROalBqZ20yRlBzMVBLejQ4bU5qRE90N1B6QXIr?= =?utf-8?B?M0VuMGJhb0R0dm8vUVB0dFU0bFhPd2lnVzlaYXhzZER4cHFJeE5IWkxCQlZp?= =?utf-8?B?OUN0a3dFS0E3ZWozSEVxQXlPVEJsZ2JwNDkxWWd5OEVuVDZSVTdSZVhqTFJP?= =?utf-8?B?UWh5RUZJYlVubVA3M09yUXFKREwvbGVNZyt2ODhLeWhwb2ovaklPYzRNdjJx?= =?utf-8?B?bFJVdWxqUkxXQ01HOVBLWTVGNi9mYUFRQk9YVmd3QlF2ZVJkdW8wOGlrRjVQ?= =?utf-8?B?UVlJbjhMUFhLbGRYdlBvZUs3TVJYZEJPOGtMd0thckVXMHJNQmlFL1o4WmE5?= =?utf-8?B?M0U0Zk1rdXpXYkhqSHFJWHM0RG0zRjRiMXNQdDFjMGJlTERMZVJ3T09DaHNh?= =?utf-8?B?K3UwYkZadjVzbEdocTk3WXFEazJXVG1leWN0ekRLR0VrUXZFMW5TT1JIdmtr?= =?utf-8?B?NmJvOTVLWFU5SkFPUE1Rc0dLakpQUHI2MSs1TGRuWWJZbVBmT00wSFZ6OUVM?= =?utf-8?B?dnA4ZVI0V01McGsvWjlUYmRuR1laRXlKY3ZGNWZjOGtqWnhRMXRoQWRnWHh2?= =?utf-8?Q?7BdQf2nmxLP95Z94xSINsGY0N?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa5fd024-27bb-482a-2236-08db3453e617 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:58:35.2251 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CQfmDPtMjrBdlQJ3a375nZ7gluGXBUKFVDWw3vZQCNOxI/82FCyTZFWkxcxYHxZdhNE2uheuqBKc1vb9IiQb0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680533946273100001 Content-Type: text/plain; charset="utf-8" While, as before, this leverages that the Map6 encoding space is a very sparse clone of the "0f38" one, switch around the simd_size overriding for opcode 2D. This way fewer separate overrides are needed. Signed-off-by: Jan Beulich Acked-by: Andrew Cooper --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -646,6 +646,8 @@ static const struct test avx512_fp16_all INSN(fnmsub231sh, 66, map6, bf, el, fp16, el), INSN(fpclassph, , 0f3a, 66, vl, fp16, vl), INSN(fpclasssh, , 0f3a, 67, el, fp16, el), + INSN(getexpph, 66, map6, 42, vl, fp16, vl), + INSN(getexpsh, 66, map6, 43, el, fp16, el), INSN(getmantph, , 0f3a, 26, vl, fp16, vl), INSN(getmantsh, , 0f3a, 27, el, fp16, el), INSN(maxph, , map5, 5f, vl, fp16, vl), @@ -656,10 +658,16 @@ static const struct test avx512_fp16_all INSN(movsh, f3, map5, 11, el, fp16, el), INSN(mulph, , map5, 59, vl, fp16, vl), INSN(mulsh, f3, map5, 59, el, fp16, el), + INSN(rcpph, 66, map6, 4c, vl, fp16, vl), + INSN(rcpsh, 66, map6, 4d, el, fp16, el), INSN(reduceph, , 0f3a, 56, vl, fp16, vl), INSN(reducesh, , 0f3a, 57, el, fp16, el), INSN(rndscaleph, , 0f3a, 08, vl, fp16, vl), INSN(rndscalesh, , 0f3a, 0a, el, fp16, el), + INSN(rsqrtph, 66, map6, 4e, vl, fp16, vl), + INSN(rsqrtsh, 66, map6, 4f, el, fp16, el), + INSN(scalefph, 66, map6, 2c, vl, fp16, vl), + INSN(scalefsh, 66, map6, 2d, el, fp16, el), INSN(sqrtph, , map5, 51, vl, fp16, vl), INSN(sqrtsh, f3, map5, 51, el, fp16, el), INSN(subph, , map5, 5c, vl, fp16, vl), --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2050,6 +2050,14 @@ static const struct evex { { { 0x6e }, 2, T, R, pfx_66, WIG, L0 }, /* vmovw */ { { 0x7e }, 2, T, W, pfx_66, WIG, L0 }, /* vmovw */ }, evex_map6[] =3D { + { { 0x2c }, 2, T, R, pfx_66, W0, Ln }, /* vscalefph */ + { { 0x2d }, 2, T, R, pfx_66, W0, LIG }, /* vscalefsh */ + { { 0x42 }, 2, T, R, pfx_66, W0, Ln }, /* vgetexpph */ + { { 0x43 }, 2, T, R, pfx_66, W0, LIG }, /* vgetexpsh */ + { { 0x4c }, 2, T, R, pfx_66, W0, Ln }, /* vrcpph */ + { { 0x4d }, 2, T, R, pfx_66, W0, LIG }, /* vrcpsh */ + { { 0x4e }, 2, T, R, pfx_66, W0, Ln }, /* vrsqrtph */ + { { 0x4f }, 2, T, R, pfx_66, W0, LIG }, /* vrsqrtsh */ { { 0x96 }, 2, T, R, pfx_66, W0, Ln }, /* vfmaddsub132ph */ { { 0x97 }, 2, T, R, pfx_66, W0, Ln }, /* vfmsubadd132ph */ { { 0x98 }, 2, T, R, pfx_66, W0, Ln }, /* vfmadd132ph */ --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -358,7 +358,7 @@ static const struct ext0f38_table { [0x2a] =3D { .simd_size =3D simd_packed_int, .two_op =3D 1, .d8s =3D d= 8s_vl }, [0x2b] =3D { .simd_size =3D simd_packed_int, .d8s =3D d8s_vl }, [0x2c] =3D { .simd_size =3D simd_packed_fp, .d8s =3D d8s_vl }, - [0x2d] =3D { .simd_size =3D simd_packed_fp, .d8s =3D d8s_dq }, + [0x2d] =3D { .simd_size =3D simd_scalar_vexw, .d8s =3D d8s_dq }, [0x2e ... 0x2f] =3D { .simd_size =3D simd_packed_fp, .to_mem =3D 1 }, [0x30] =3D { .simd_size =3D simd_other, .two_op =3D 1, .d8s =3D d8s_vl= _by_2 }, [0x31] =3D { .simd_size =3D simd_other, .two_op =3D 1, .d8s =3D d8s_vl= _by_4 }, @@ -909,8 +909,8 @@ decode_0f38(struct x86_emulate_state *s, ctxt->opcode |=3D MASK_INSR(s->vex.pfx, X86EMUL_OPC_PFX_MASK); break; =20 - case X86EMUL_OPC_EVEX_66(0, 0x2d): /* vscalefs{s,d} */ - s->simd_size =3D simd_scalar_vexw; + case X86EMUL_OPC_VEX_66(0, 0x2d): /* vmaskmovpd */ + s->simd_size =3D simd_packed_fp; break; =20 case X86EMUL_OPC_EVEX_66(0, 0x7a): /* vpbroadcastb */ --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -7778,6 +7778,8 @@ x86_emulate( generate_exception_if(evex.w, EXC_UD); goto avx512f_all_fp; =20 + case X86EMUL_OPC_EVEX_66(6, 0x2c): /* vscalefph [xyz]mm/mem,[xyz]mm,[x= yz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x42): /* vgetexpph [xyz]mm/mem,[xyz]mm{k}= */ case X86EMUL_OPC_EVEX_66(6, 0x96): /* vfmaddsub132ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x97): /* vfmsubadd132ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x98): /* vfmadd132ph [xyz]mm/mem,[xyz]mm,= [xyz]mm{k} */ @@ -7802,6 +7804,8 @@ x86_emulate( avx512_vlen_check(false); goto simd_zmm; =20 + case X86EMUL_OPC_EVEX_66(6, 0x2d): /* vscalefsh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x43): /* vgetexpsh xmm/m16,xmm,xmm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x99): /* vfmadd132sh xmm/m16,xmm,xmm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x9b): /* vfmsub132sh xmm/m16,xmm,xmm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x9d): /* vfnmadd132sh xmm/m16,xmm,xmm{k} = */ @@ -7821,6 +7825,19 @@ x86_emulate( avx512_vlen_check(true); goto simd_zmm; =20 + case X86EMUL_OPC_EVEX_66(6, 0x4c): /* vrcpph [xyz]mm/mem,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x4e): /* vrsqrtph [xyz]mm/mem,[xyz]mm{k} = */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + goto avx512f_no_sae; + + case X86EMUL_OPC_EVEX_66(6, 0x4d): /* vrcpsh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_66(6, 0x4f): /* vrsqrtsh xmm/m16,xmm,xmm{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w || evex.brs, EXC_UD); + avx512_vlen_check(true); + goto simd_zmm; + case X86EMUL_OPC_XOP(08, 0x85): /* vpmacssww xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x86): /* vpmacsswd xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x87): /* vpmacssdql xmm,xmm/m128,xmm,xmm */ From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680533964; cv=pass; d=zohomail.com; s=zohoarc; b=YHyRuxl2BCu7t2+Y0pFJ5oE49KaF72mkFGe+pYi58E+Z6aNyQpT6kDrwdbfW4kC5mp0Uk+RqzOWvF2T/vzCC6u5nEZFjzWQ04aZu9mVeWulqRLQwbkmJ4qaPkKluvpNR1DZGh0S9SiuVSqOFSflrd5gVlDDOpXG08xY5LKswJqI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680533964; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WeVlilJaXvmgNgAfKdgiJwwyvehDZKjSOpUZTR1a6eU=; b=YtgaktkHh9xEpZV0S4JUIJyA00MNnNLQzs3mv2bXuuU6GPbHRK9AX+nQPSRk4fM4gv7kf5yQry1NK1MC13l33vtspGNWv7f2W/qGhQfpEmSP9IUYUvSYhG/NJisLebKd8XO8SJRbUGANtE1ZRXGiNCnl2cEb6qy7zLS/2vijpgU= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 16805339645561021.4832812162258; Mon, 3 Apr 2023 07:59:24 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517496.802899 (Exim 4.92) (envelope-from ) id 1pjLe5-0000ON-CR; Mon, 03 Apr 2023 14:58:57 +0000 Received: by outflank-mailman (output) from mailman id 517496.802899; Mon, 03 Apr 2023 14:58:57 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLe5-0000OE-9a; Mon, 03 Apr 2023 14:58:57 +0000 Received: by outflank-mailman (input) for mailman id 517496; Mon, 03 Apr 2023 14:58:56 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLe3-00066R-9z for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:58:55 +0000 Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04on0630.outbound.protection.outlook.com [2a01:111:f400:fe0c::630]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 0d7765f0-d230-11ed-85db-49a42c6b2330; Mon, 03 Apr 2023 16:58:54 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:58:53 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:58:53 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 0d7765f0-d230-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GZHer3oZBf7lCanQ1VDcdXV3qZySk5bsXWZnVk5TkFgjHacTMdyseqGAoruYKmu0GsS8kQKpgY7tdLkBQhVv1G4JePTjqJjeqa1JkreHgc3fb3R8ua/1shoSzxWEVpQzzXPP39VtnnBHF29Q5b2gGTuGjH195x7HpWYoGJLiOm1eN+bVJlZKPhSburJ0LuW7oLWWiwUIFhvxlraLYs8aFd7e1qDaL3Nce2GqQ8I5MeJ9KHxjBrRCgpJk2YqYdUEcg4ds7+rQndBH0CyqMgF7Ie0O4vE0/sTphLowoJMPESrO28MOTbhXwzRYqWRlkUjn5t0pwIJVV2XQrTBozuL+3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=WeVlilJaXvmgNgAfKdgiJwwyvehDZKjSOpUZTR1a6eU=; b=ZTwIE8L09mh/cA67hF9lWtOfzJVyl/QpZ1F1QGVEjeilZP7aOjw9QHqG3YCWBDE+LjV7ET+jxyaVGZ0qPBXJo84AtoRd7MmhoUVY88PUQhKucv0ufYUWUEutyPhYstPcFALGcbKyoBNbQH6GkqlVNYhbTpDJFkmBrLnZmf/Jf4wjDJT+yjlBOa3GCG7RcKAommwFzsyEcEXcthIt8QSz6VsiI4TAxL3gFVeTl0BAyjgan5UX5xPU0NbMVIpQXJj4nz5gz1Rwjc/eZawbiRaCp5DVS9Ymn7CmzBbt1pzXW3cjnDSZ/MmARaFggy7at35pWMGAjrH2X482TCUpp+DtoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WeVlilJaXvmgNgAfKdgiJwwyvehDZKjSOpUZTR1a6eU=; b=Q2KughHdC/0ucGez9OJMQuI4UlCJ2XlnA9DHsGexkV3AFcIL8du3Va1nI4PIyFMgIaCd9qhnAJCzJaDXAoS43RRt5fRMRgdq/FO1EBX+emyEF5uby6vln/iKlvU+i43IqHcR/uLKZl0I4wHepZw0XB45Th0Cnag3ezUVbrG8b1sCajrT+iQ+sPnok7vOAty/SldzCaeC5G1MurA8Co5pukc2Wrhd1joTHLn2M5sy8X6/MIuGVYa5iPgF8jbJWR4sp+mDUiHyFMEdRrKcLuNnEMMLFa4jqrG1VY9iQVCUf4pdXkPJgJaR1OrVwb4ll/S9ap64nhNhPbKVgm7yAQ38tQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <25c100d7-fae7-5aa7-1d6e-3c06774a33f6@suse.com> Date: Mon, 3 Apr 2023 16:58:51 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 06/10] x86emul: handle AVX512-FP16 complex multiplication insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0055.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4b::18) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: 15772e1f-0528-4b4b-fe97-08db3453f0c7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Lr6vmV/SRI15F3FfKyQrwpp8VAtUxEY0HLN9cNutNLcar1DoyK3X4/oUrYHp8EuOxkuehPjjHV3J9mjimsPsBLuvG8NgaymdeYbta7ZALvFZCf6dc9zQC1958kegfsAiwghG3mwnMfQvOlAax6ojyWZgE1qIDCl0xtedEKgv3SL7bDZ0A5B+5F5iFgYRhF8m2UFcaIaVTfMYAddZFn1ek2XrvHBmIH3pDcAXEuxtVs3VjFo0lkU7fkm/kpl/x7bnhWcbWiDsVjyiz+6RssWUhX0g37MpwLNep0Smng4Ays7+CZJH/P4C2omx8KIEGEwBD+HshZj1Ib1r6GRbql8MjqDrdvtWyJm6lju/0AUKYGWZSxz5LFMbINoEWZe/ogucofslgOx1E3sLab8wnK7rPHNeYy7ZlbWLux3zuRJd7lB4yMgQ881iRGydzc9cFUeCpVJBQo7eO+8BuQkJ8YrTAdCohURTI3MLWXuGAj1PlQcpNA+0hEgQutgv1LoLBpF38vAC0IESX4R96MKLrzpIUEFS6o9gZ+zmiOf8g8OOkD9bqX0dLVbVChAHiU0MxwoBcq0CtzPp6xYrxTspYwST1rN72/4FtBnDfdQd3+zD+HY8Na1CLNR4GyrhxQqF1Yh9Lcxoelol93xfdDbbRHDM/A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WTN3dDNJWGFuZXozd1lkZVlwSEtuRHBVdWxCMGVuakE4Vm1nK3IzbjBiU2lk?= =?utf-8?B?YWcyVmRxUXFQbzBSZ3A5elo1ZzV2NURPTTJTVGo3REt6cENpSExjRGlzb0tW?= =?utf-8?B?UjFHSmtDUXZ4YkM2Uzl1NTFtSS9zTWdrQ2J2UG1aUFNoRFEzRXJ3MHNGWHl4?= =?utf-8?B?S2N2Wm9pOTZsc0NKamw0TkNCQWVtV1gvUGtLTkIvRVhuREkwSW5sVlhZOGYy?= =?utf-8?B?OEd4Tk1qaDRYUHdvSVFwUWFLT3VjR0V3dmYwWGUrRkZzSXh5RUt2YUg3ZGNR?= =?utf-8?B?QzBHcjZaNmIvVnAxeUcxU2JIYmF6akx0WEhNOFJVMnlBYjdEazlqdzhNbXR0?= =?utf-8?B?dnhXU213WFZkeEthL0dNT2dWWGJaMDJPZFdtb1VxNUFkRmhRNGkwSXFSdTdG?= =?utf-8?B?TlhkR1NBQjNSKzBma2tMNFJYRTNkMHd5U2oxYXk0OHpUUXZxQTdINWErdmxS?= =?utf-8?B?bjlVVHo3SStKblk1NlBsY0RxR09nanZpM01BZEI4cTRKcENueVBtaHZhVkhj?= =?utf-8?B?Z1d6VXdYYmRwQWt1N1E4a0VsZkFpaDZHeHkvd0ZISVVPQmVHVlkvTm9pRlcr?= =?utf-8?B?TDVNaVFtZThSbHkyaHZtRnF6cER5K0hpampKamlVejBNNE5EcWZDVFIyUkgz?= =?utf-8?B?Vm9aTTBNTURWUGRBTHIvOEtUcWM3b2pkQ3JIdEUyOFlWMXVpLzVzdWN0SElO?= =?utf-8?B?OFZnOCszbGtaUHlOd3pvSWxoVzJnZm4rTmJTVEVoaEQzaWhzMUVhbndzTnJW?= =?utf-8?B?Q0dWNVlTVWxiY3FPSTZVV1dUL1Ixblpwc0ZySWUvT3ZhRzI2Y2xudy9ZdzZw?= =?utf-8?B?c1lIL2ZpaXFiZmQ2cnJpamduZUNLTmxWejg3VERhL0F0ai9zRkFpZnY0TkFj?= =?utf-8?B?TnhpdVhCQloycHFmOW9FSjZzTDRVYkRyRHJEZDBHTFFjbFZKQWd4Z0JXR2d4?= =?utf-8?B?MEhUYmdCS1JZNDJXcWIzakhma1U1djhZUU4wUGgzZ0lyL20rNHZVV1ZCUWk3?= =?utf-8?B?SmZHT212V29TL2g4NEpsZ3hNejVGLy9rTWF2SHpRZ2twOG1xa2w5aEJBMjFQ?= =?utf-8?B?NDQzN0JTQWNVZ0lkMXJ5RHQxS3MyQS9BWStzWDhsZzlqL0xuZUFzditrSmtW?= =?utf-8?B?M0NHT2FzVVpLaHpCdTZmOGdyREx4d2tyeU10L3B1UkpzbGNscDBOYzFuaExG?= =?utf-8?B?SjZUTGZkemNuZFhDU1JvUWlYR3cvR1VmVUlZV1B2WDljaUtUU3djSENjSFVh?= =?utf-8?B?T280TEZ5SXlpRzQvN1JGZjZxZVJZRlIwTDNUN3R3bXRpaWI0STVHVmR3LzBO?= =?utf-8?B?UXJJVWhXMWYzRjE4RUxOaVFJeXdnS3lQaXR1MVluQUZSN1JsZ21LU21WSmQ2?= =?utf-8?B?N1FZZk5BRzlaL1V0NTI5REtRQkdCWWEyaStxRnZrYm9WdFB3MzVnN0JYUDZq?= =?utf-8?B?U0NRZy95Y0NNYmFuanZRUVFmVElHN2xnZmtPRVJPU1lZUFM0YXQvTjduMjZ5?= =?utf-8?B?OHlIUSsyQkhNTmVWdlNFY2JBYU92bEdISWVkeU4wMEdLZFBxS0VjZ3ByWnp3?= =?utf-8?B?dnZ0Zjg2VmVMZm8yZ3VkZFU1VnhTYWdiMFREbzNFZ2NWZExDUlVXanVaMHZj?= =?utf-8?B?cUtlZnVSVTZMZytVK2RSVEJ5Zy8zeTdOSE9uOW9hNUprZFVZbWlFQ3k0dTJs?= =?utf-8?B?UHRhL0J2MTVoUU1NVEczZ3lWeERFVGpOZEYvR25yZ2J2Y0w4UVZyNGVoS3RL?= =?utf-8?B?b2lCU0RQcGxza2FtbStqL1hob0R3ZFdZS1BQclp5a1ZnUmVVdXkrSll1TzJN?= =?utf-8?B?empBdFI0Q2dIeW9BRU9BaXcxNTNJempQcVVGazZQV3Y3WjhEajZsRjQ0Y2dD?= =?utf-8?B?Q1c0bGRHWW8yckhjb1ZRMitlNzVlbmdrUURPczg2SDdydklOVmRYMmx3NVY0?= =?utf-8?B?TGF0OGdiR0czcXMwL2xtL3djUlJERTQxb29Kb2ZBWEFGT2lPNFdlbmYzNTE1?= =?utf-8?B?MlVBUmsxRU1kajk4YnhzdjVJUzcvWVBzeVVzMTBzSmdKNHRYeS9BZWJrYWF4?= =?utf-8?B?RFpCNThxR1FRdzVWSVVVTnE0ZWhaWnBDSEJPOEprTnl3VHhiZUF1WnB1RnZv?= =?utf-8?Q?D0K7e2lCTDSF6OGOsayxzOjGH?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 15772e1f-0528-4b4b-fe97-08db3453f0c7 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:58:53.1131 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: B6UULQsSi7mTUNiwDQAHEc20BBkBIHgMVVZqT5PX9/wk/EvpkS6aTfve4DFD6/g/psa0BRP3MTaoneKFH1bN2w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680533966204100001 Content-Type: text/plain; charset="utf-8" Aspects to consider are that these have 32-bit element size (pairs of FP16) and that there are restrictions on the registers valid to use. Signed-off-by: Jan Beulich Acked-by: Andrew Cooper --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -614,12 +614,18 @@ static const struct test avx512_fp16_all INSN(comish, , map5, 2f, el, fp16, el), INSN(divph, , map5, 5e, vl, fp16, vl), INSN(divsh, f3, map5, 5e, el, fp16, el), + INSNX(fcmaddcph, f2, map6, 56, 1, vl, d, vl), + INSNX(fcmaddcsh, f2, map6, 57, 1, el, d, el), + INSNX(fcmulcph, f2, map6, d6, 1, vl, d, vl), + INSNX(fcmulcsh, f2, map6, d7, 1, el, d, el), INSN(fmadd132ph, 66, map6, 98, vl, fp16, vl), INSN(fmadd132sh, 66, map6, 99, el, fp16, el), INSN(fmadd213ph, 66, map6, a8, vl, fp16, vl), INSN(fmadd213sh, 66, map6, a9, el, fp16, el), INSN(fmadd231ph, 66, map6, b8, vl, fp16, vl), INSN(fmadd231sh, 66, map6, b9, el, fp16, el), + INSNX(fmaddcph, f3, map6, 56, 1, vl, d, vl), + INSNX(fmaddcsh, f3, map6, 57, 1, el, d, el), INSN(fmaddsub132ph, 66, map6, 96, vl, fp16, vl), INSN(fmaddsub213ph, 66, map6, a6, vl, fp16, vl), INSN(fmaddsub231ph, 66, map6, b6, vl, fp16, vl), @@ -632,6 +638,8 @@ static const struct test avx512_fp16_all INSN(fmsubadd132ph, 66, map6, 97, vl, fp16, vl), INSN(fmsubadd213ph, 66, map6, a7, vl, fp16, vl), INSN(fmsubadd231ph, 66, map6, b7, vl, fp16, vl), + INSNX(fmulcph, f3, map6, d6, 1, vl, d, vl), + INSNX(fmulcsh, f3, map6, d7, 1, el, d, el), INSN(fnmadd132ph, 66, map6, 9c, vl, fp16, vl), INSN(fnmadd132sh, 66, map6, 9d, el, fp16, el), INSN(fnmadd213ph, 66, map6, ac, vl, fp16, vl), --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2058,6 +2058,10 @@ static const struct evex { { { 0x4d }, 2, T, R, pfx_66, W0, LIG }, /* vrcpsh */ { { 0x4e }, 2, T, R, pfx_66, W0, Ln }, /* vrsqrtph */ { { 0x4f }, 2, T, R, pfx_66, W0, LIG }, /* vrsqrtsh */ + { { 0x56 }, 2, T, R, pfx_f3, W0, Ln }, /* vfmaddcph */ + { { 0x56 }, 2, T, R, pfx_f2, W0, Ln }, /* vfcmaddcph */ + { { 0x57 }, 2, T, R, pfx_f3, W0, LIG }, /* vfmaddcsh */ + { { 0x57 }, 2, T, R, pfx_f2, W0, LIG }, /* vfcmaddcsh */ { { 0x96 }, 2, T, R, pfx_66, W0, Ln }, /* vfmaddsub132ph */ { { 0x97 }, 2, T, R, pfx_66, W0, Ln }, /* vfmsubadd132ph */ { { 0x98 }, 2, T, R, pfx_66, W0, Ln }, /* vfmadd132ph */ @@ -2088,6 +2092,10 @@ static const struct evex { { { 0xbd }, 2, T, R, pfx_66, W0, LIG }, /* vfnmadd231sh */ { { 0xbe }, 2, T, R, pfx_66, W0, Ln }, /* vfnmsub231ph */ { { 0xbf }, 2, T, R, pfx_66, W0, LIG }, /* vfnmsub231sh */ + { { 0xd6 }, 2, T, R, pfx_f3, W0, Ln }, /* vfmulcph */ + { { 0xd6 }, 2, T, R, pfx_f2, W0, Ln }, /* vfcmulcph */ + { { 0xd7 }, 2, T, R, pfx_f3, W0, LIG }, /* vfmulcsh */ + { { 0xd7 }, 2, T, R, pfx_f2, W0, LIG }, /* vfcmulcsh */ }; =20 static const struct { --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -379,6 +379,8 @@ static const struct ext0f38_table { [0x4f] =3D { .simd_size =3D simd_scalar_vexw, .d8s =3D d8s_dq }, [0x50 ... 0x53] =3D { .simd_size =3D simd_packed_int, .d8s =3D d8s_vl = }, [0x54 ... 0x55] =3D { .simd_size =3D simd_packed_int, .two_op =3D 1, .= d8s =3D d8s_vl }, + [0x56] =3D { .simd_size =3D simd_other, .d8s =3D d8s_vl }, + [0x57] =3D { .simd_size =3D simd_scalar_vexw, .d8s =3D d8s_dq }, [0x58] =3D { .simd_size =3D simd_other, .two_op =3D 1, .d8s =3D 2 }, [0x59] =3D { .simd_size =3D simd_other, .two_op =3D 1, .d8s =3D 3 }, [0x5a] =3D { .simd_size =3D simd_128, .two_op =3D 1, .d8s =3D 4 }, @@ -441,6 +443,8 @@ static const struct ext0f38_table { [0xcc] =3D { .simd_size =3D simd_packed_fp, .two_op =3D 1, .d8s =3D d8= s_vl }, [0xcd] =3D { .simd_size =3D simd_scalar_vexw, .d8s =3D d8s_dq }, [0xcf] =3D { .simd_size =3D simd_packed_int, .d8s =3D d8s_vl }, + [0xd6] =3D { .simd_size =3D simd_other, .d8s =3D d8s_vl }, + [0xd7] =3D { .simd_size =3D simd_scalar_vexw, .d8s =3D d8s_dq }, [0xdb] =3D { .simd_size =3D simd_packed_int, .two_op =3D 1 }, [0xdc ... 0xdf] =3D { .simd_size =3D simd_packed_int, .d8s =3D d8s_vl = }, [0xf0] =3D { .two_op =3D 1 }, @@ -1515,6 +1519,10 @@ int x86emul_decode(struct x86_emulate_st if ( s->evex.pfx =3D=3D vex_66 ) s->fp16 =3D true; break; + + case 0x56: case 0x57: /* vf{,c}maddc{p,s}h */ + case 0xd6: case 0xd7: /* vf{,c}mulc{p,s}h */ + break; } =20 disp8scale =3D decode_disp8scale(ext0f38_table[b].d8s, s); --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -7838,6 +7838,34 @@ x86_emulate( avx512_vlen_check(true); goto simd_zmm; =20 + case X86EMUL_OPC_EVEX_F3(6, 0x56): /* vfmaddcph [xyz]mm/mem,[xyz]mm,[x= yz]mm{k} */ + case X86EMUL_OPC_EVEX_F2(6, 0x56): /* vfcmaddcph [xyz]mm/mem,[xyz]mm,[= xyz]mm{k} */ + case X86EMUL_OPC_EVEX_F3(6, 0xd6): /* vfmulcph [xyz]mm/mem,[xyz]mm,[xy= z]mm{k} */ + case X86EMUL_OPC_EVEX_F2(6, 0xd6): /* vfcmulcph [xyz]mm/mem,[xyz]mm,[x= yz]mm{k} */ + op_bytes =3D 16 << evex.lr; + /* fall through */ + case X86EMUL_OPC_EVEX_F3(6, 0x57): /* vfmaddcsh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_F2(6, 0x57): /* vfcmaddcsh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_F3(6, 0xd7): /* vfmulcsh xmm/m16,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX_F2(6, 0xd7): /* vfcmulcsh xmm/m16,xmm,xmm{k} */ + { + unsigned int src1 =3D ~evex.reg; + + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w || ((b & 1) && ea.type !=3D OP_REG &&= evex.brs), + EXC_UD); + if ( mode_64bit() ) + src1 =3D (src1 & 0xf) | (!evex.RX << 4); + else + src1 &=3D 7; + generate_exception_if(modrm_reg =3D=3D src1 || + (ea.type !=3D OP_MEM && modrm_reg =3D=3D mod= rm_rm), + EXC_UD); + if ( ea.type !=3D OP_REG || (b & 1) || !evex.brs ) + avx512_vlen_check(!(b & 1)); + goto simd_zmm; + } + case X86EMUL_OPC_XOP(08, 0x85): /* vpmacssww xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x86): /* vpmacsswd xmm,xmm/m128,xmm,xmm */ case X86EMUL_OPC_XOP(08, 0x87): /* vpmacssdql xmm,xmm/m128,xmm,xmm */ From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680533988; cv=pass; d=zohomail.com; s=zohoarc; b=JTdfqs+M2e4cm+tglCO1KsHFeJR9TBZXaDbpcFQWoiGD53o+hHod5saIvinZhW+Le+gO+pcZIjy21PEcF05CwRt9fOQ8lpcPZsvYiZUg7yRlhfZotA0jnPmtnrc76kH9CrgSNX1ZqXwdgBH4YQMCWw4ZbXXlyp4sXby/GW9TLm4= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680533988; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Uhli6p+2g334+AF1uQpNe0kBbZNIku4hPqzRfVDOW8Y=; b=V4Ox1WCueF5hQsXD1l7dMpCrRiJ5pSVGxT7MbZ3zlK/L5YWu7CVTHoSQfZmAhbO6Ri65U+pQ9I37ayI6kHN5nnIS5rqmLO+x04y/PwJAkQwosy/YBSiOJdHOKEyjvaPsbYC0ArZsUX/2biI6K3Fm1sdsPxHUqaKXVDE+pfiCB2Y= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680533988866320.7918745116376; Mon, 3 Apr 2023 07:59:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517499.802909 (Exim 4.92) (envelope-from ) id 1pjLeV-00010B-L9; Mon, 03 Apr 2023 14:59:23 +0000 Received: by outflank-mailman (output) from mailman id 517499.802909; Mon, 03 Apr 2023 14:59:23 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLeV-000104-IE; Mon, 03 Apr 2023 14:59:23 +0000 Received: by outflank-mailman (input) for mailman id 517499; Mon, 03 Apr 2023 14:59:22 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLeU-0000MW-Gk for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:59:22 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20603.outbound.protection.outlook.com [2a01:111:f400:7e1a::603]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 1d122fce-d230-11ed-b464-930f4c7d94ae; Mon, 03 Apr 2023 16:59:20 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:59:19 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:59:19 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 1d122fce-d230-11ed-b464-930f4c7d94ae ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MQINIxyPzlzRx22z2Pl0Fc86R5dbQQ50a7E9cWUggUzeZzI2ys6djhWvPjKO9M5HXPTFQBkjjarXlTuC4runqoil458lWydSAWExIkE2/saDb3mo46oZqmpVF8nW5JNdpevg5rl+NAtW9cZbGOUmqtM5tUg8tmxq7cY5eMqaALEbJDRkcWtF4WB1cYo65KOtCnStzp1pjSDmoHnZ37LpbLwoOphqaEgTVkWQMjH2WVkEWWyvlQr0Z82zBBMEaG9x56LdN0Ec38Uc5Xk2x31jQ3p1sXBUUTbqlJYcE+XzpyT2LPOa/64Eq2M+iNPys8OJX5ME+Zo79ujSpe7Mk8wfwg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Uhli6p+2g334+AF1uQpNe0kBbZNIku4hPqzRfVDOW8Y=; b=K9H0uhiTy5Z4ldCq0xcM6JJRC4JM3Hi5MJbOHGrBXA6/Vr5oXY5YR74BnTPgCPszHDjznhjVCXXQSgqJJxHj7EEfer/T+C6iVgwNggr3idMc1y98UW2el+eJ6uasNPsPT5xOTlwkqfdJvfrk0iKe6MyWkGltPHnh8AA+fOscef1V1wPb5hEsLnQgDlOo5uB1WAKZwbuEBcIFuLzoicDi2C+nOiVzUW5NHhbIuidwOKQCqewIkUqCtt1cIULKmOO/QnsMBc6iBewxEisUexvKt8+BQ4gBMl5Yo22BXRgjOA2iGhWsBXp+kzVrf5RQGEntu2BCe+3DPatTsYpiMWR9Ww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uhli6p+2g334+AF1uQpNe0kBbZNIku4hPqzRfVDOW8Y=; b=rc53KsEygbttSkBO0nl/1EmXf/XzElObcKKwbdmDj3utKhegypm1tLMZjp5BaEO0xSeEhPFsxXEQkF9VZiWRe/g6B//VSuKTMNy3kgjNsluTPoTcK3+n9L9BtEDCWh5tqjNuDSiL7bM2Q/ssbVLaWosGqUC98OcLYI8QHjW+vs3Mi77yP5Lr0Fpfx8ngvq/vCX0uslQEdWeE9Iu70wzi8Xjuf0duooX+n3DoTh9tLnHaZnSrBYz6q7qnuMaUrvu8JRZL+CFolZ8P7AJp4uR+xBYhtaWfv4ff7B9rmG5MpL/BkBXHe6ccuiYyl8quIzE9Nbt+fQEaTxBXEb5Qr6j50Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 3 Apr 2023 16:59:18 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 07/10] x86emul: handle AVX512-FP16 conversion to/from (packed) int16 insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR3P281CA0012.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::15) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: 7526505b-58d4-4772-13a0-08db34540079 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9UQzmsyB2eRBJFk4YiB9IRSjpgMw7qlA9D2Pvx/G8dhdT6lphZKjclhIHz3WJrHhPayAbN/FL4t52xDO8Qx+Ync2bTMwiyeRrf21MZIENDNUlvTN+T9sMUZwGsXXFx1e5xT/MpluUtkEGhqTTcfACQy5maaAmmpbVHfpScmfVFb3JV8GuEdFxasA9N/pKFZUCHQ+srGqYbtiKu1DfWP1xXS72YN8J1vlqyBrdo33+UDrdUhRozV3FHPTLjmJ0x0TRK5Z8oaMKlJ1uB2hDDvaRi7YxId8YvSSTf2clNEMy2CEDW0AGDWN8jp01XKKska1UH8plVcaKUnDhdicz/ghfcyS+cciqeewT+i35TeDI5v19dRDnMyod7Twaw8BUeuWTwYcGhcqPtNJk8qL+5WSMXFkYey2TpaEkx/2zqTDR5kG2yii1kULnLNOuWhuhmj0/XgLIImI2guV/dTph7pNWzLhUyDJCZgYYwqi5BcWZG9giVhHOjfD+SBWEQmBXeM+81rpdHu3vyDvQYGHgOWvB6ytBvD3831ndSvpH0cWDTMaU2btx84nsPkXMAcwBgQamdBpCcXGBbUId9PJ1fOwIkFtmMtkBucyZXTgePYbA/Qm2RWxawkhU+gGft0v4NdeXmIsxpxodcVQO/hZghZXCg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NkdhYkJ4b005R3gvNkNabHMwamthYytYSitMSjcxSktRa0JpYnhxc1d6OGRY?= =?utf-8?B?TUpWZHRnRU9uQVdUVDR5WXFhQ3RJcWhNTGliYWxzN3J0TkZwKzB5cFJjN3Fx?= =?utf-8?B?K29HZEdPN2FwQmV2RjlMV0pvYml3ZVgvNGtrSnJIY09CRlFuODdRYlUrREsy?= =?utf-8?B?VEdEZ3FHaU5xV2ZVZTUwZnM2ZHdVTlVsTlBxNmRpMHd2R2x4NHdqaEt6bVVZ?= =?utf-8?B?WkpOTlc2eis5UjZ6WFZ5by84NXh0RFdrQlpJSjZ6MlUzelkxbEtXZTR1WlA4?= =?utf-8?B?elgycGZuUjViaWZBWlVMajR6R1NZcWo3bEx1RnkrSGlRa1dTeXNoTVFuM1FQ?= =?utf-8?B?VkJQSDk3b21wSWdTT1pQMm1nZFZQTHJkYnNtcTJXS0ZEQ2FJclNIY05naW9j?= =?utf-8?B?TVFmM1hBdmpmaFh0b2pCUWlubCtXZGxFVlNISnVDM0lNRmJXY0V0VS9yNTVG?= =?utf-8?B?cTRMdG1ZTmVkR28xN3FXN3FrWWZVQWM1UU51NWZFU0pBcDRncElBQUFyY09D?= =?utf-8?B?WE53VWpmbVRrNUtlZExGd3NjLzFZTS8vMjY2VlVYNHFhQnNUSkx2bndSRTNv?= =?utf-8?B?L29YNW9FRkI3M2p4d01nZ2xENjh5Wi9mQkhYQTd4WjhiNURTc2txYkhDQmlT?= =?utf-8?B?ejZGNTY1MTRUdUE0Q08zVkpvc2IxY3JVbWJrdktWTEZpY0FXdGJGSjFvMFpX?= =?utf-8?B?WS9LU1BGdzVWK0xPcXhGSy9DdklkYkFGVG5nbllNRVlKTCsvYStCZHdRS2pq?= =?utf-8?B?QStpRmNLYUNiTmZKaXRlamdQbGpobXVOZGIyaE9xcHJrZytUcW5KU2xYUXFP?= =?utf-8?B?S1diRDZUalVQdTlYY0FFQVZhQW9ObEtxRGtqNTcvZkZ0Ky9BOXZodVZwVHhr?= =?utf-8?B?MUIwSTlwQlg3YzVMMlp1VlpWQ1d1V3NEbmx0ZElFT1BWT3NKekVhKzVkUUEz?= =?utf-8?B?UFZTaFdQSkx2WjBJWkpqajVndUtDMC9XZ3FERlpWZFhlTDJsTzJQSWhsMm5h?= =?utf-8?B?SXZiOXBSOWgzUXA4ZSt4WWFNYW92WVFoYkhOMldLcFczd0J6ZFBST1BuT3p2?= =?utf-8?B?SDB6TGZza0dOZjlGclhXZTFNRlEvblhlRUVJbWZTa3J1MGdUUVFJWm43WVV2?= =?utf-8?B?M1NUcDBwQ3NrWHVyVkJ2ZFhSdkF4czhyUG9Kb3Z1SXBYazZnbGZseWR2VHIv?= =?utf-8?B?WVJvdUZmMGhYbnh3WGJlMitFY3RCMTR6VFhtOGtvMEVKU3MrWUE5SVAyQUFO?= =?utf-8?B?clN6QjYwaUd0RmMzS1ZsQXpPT0dIM2hRZW1vb2JxZythbURLNE9iS2NxbXdo?= =?utf-8?B?d0kwK0RvaXJTK1NuTGdqSjhMV21KMnVpek00Q2Y1emJyWndVUjkrMElIZy93?= =?utf-8?B?WklZRy93VlEydlNZSDk2ais0eHJwQkJZM1JjenJYVS9sZTBvazJoa3ZEY1pu?= =?utf-8?B?NWVLbStNMEdUYTZudUFVUW9Ocks2RzRUMXVXejRSajFMdEZhTkoxaHRUKzYz?= =?utf-8?B?UnFnNkpUZmUwYmMyVmxXaE9tRmpTZ3VZOXY4aDA2OUduamx4Y05CQmd6ekl6?= =?utf-8?B?RC9GZ2RNdUMzUXhlRng1Z0huMWR3ZUg0bWVDSUVCa2Y4OVAzNlZPMk8zdzJR?= =?utf-8?B?anZnSEx1dTVzdHJsQ21UWW0vQnMzMGNuTlNSMFVNakhFZFJtMUpSVnpKcUNT?= =?utf-8?B?a2QrZjBDaVE1anZhcHZzV1h6ejVUc2IrM0JhdFlocmVXZmQ1d2xFWDVZWFJw?= =?utf-8?B?Q3VUVzlQSlpDSGM0R2hNU1Bua2FxQ3laRy9XaHdQa2xhUDVpdXBnVHgwY3lO?= =?utf-8?B?TVhxNHRrWnNyY1dTK1VSME1idjBEazRyd0tXbiszZVl6WFQvZVVBT2tJVE5y?= =?utf-8?B?WGk4WHZOZjZReVZMN29DbUNZdXBFL1FUOUNiNjZ6SmQ1YU5EZmp0TVpzU2Jn?= =?utf-8?B?Y3ZEelc3YVVyY0tkVmErVllHZUdwRjhsSDlyN3U1aUtnZjQ2RFA2TUZDUy9R?= =?utf-8?B?UkVKTmtORW5aTzVvQ2k4eDR2VGYrQzZXZVZTa3graDZseXN1Ym9YR0JwbXM1?= =?utf-8?B?MllKaTZXbkh3T2diSUVEQjVCSWd6VE9ZaEpheUttdWRHRFVmWG1wMkFDM1or?= =?utf-8?Q?L3lYaX0A7W8Zi/n234jSay9AY?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7526505b-58d4-4772-13a0-08db34540079 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:59:19.4314 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: b5oOs+rTIZyG1YI43TgoMMafpU/avw2nCtPZtIjLz0K2YbReb8s9CK1QU/rS7MXiSaiXrcnluClW9NzB5eJlUA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680533990428100001 Content-Type: text/plain; charset="utf-8" These are easiest in that they have same-size source and destination vectors, yet they're different from other conversion insns in that they use opcodes which have different meaning in the 0F encoding space ({,V}H{ADD,SUB}P{S,D}), hence requiring a little bit of overriding. Signed-off-by: Jan Beulich --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -612,6 +612,12 @@ static const struct test avx512_fp16_all INSN(cmpph, , 0f3a, c2, vl, fp16, vl), INSN(cmpsh, f3, 0f3a, c2, el, fp16, el), INSN(comish, , map5, 2f, el, fp16, el), + INSN(cvtph2uw, , map5, 7d, vl, fp16, vl), + INSN(cvtph2w, 66, map5, 7d, vl, fp16, vl), + INSN(cvttph2uw, , map5, 7c, vl, fp16, vl), + INSN(cvttph2w, 66, map5, 7c, vl, fp16, vl), + INSN(cvtuw2ph, f2, map5, 7d, vl, fp16, vl), + INSN(cvtw2ph, f3, map5, 7d, vl, fp16, vl), INSN(divph, , map5, 5e, vl, fp16, vl), INSN(divsh, f3, map5, 5e, el, fp16, el), INSNX(fcmaddcph, f2, map6, 56, 1, vl, d, vl), --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2048,6 +2048,12 @@ static const struct evex { { { 0x5f }, 2, T, R, pfx_no, W0, Ln }, /* vmaxph */ { { 0x5f }, 2, T, R, pfx_f3, W0, LIG }, /* vmaxsh */ { { 0x6e }, 2, T, R, pfx_66, WIG, L0 }, /* vmovw */ + { { 0x7c }, 2, T, R, pfx_no, W0, Ln }, /* vcvttph2uw */ + { { 0x7c }, 2, T, R, pfx_66, W0, Ln }, /* vcvttph2w */ + { { 0x7d }, 2, T, R, pfx_no, W0, Ln }, /* vcvtph2uw */ + { { 0x7d }, 2, T, R, pfx_66, W0, Ln }, /* vcvtph2w */ + { { 0x7d }, 2, T, R, pfx_f3, W0, Ln }, /* vcvtw2ph */ + { { 0x7d }, 2, T, R, pfx_f2, W0, Ln }, /* vcvtuwph */ { { 0x7e }, 2, T, W, pfx_66, WIG, L0 }, /* vmovw */ }, evex_map6[] =3D { { { 0x2c }, 2, T, R, pfx_66, W0, Ln }, /* vscalefph */ --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -259,7 +259,7 @@ static const struct twobyte_table { [0x78 ... 0x79] =3D { DstImplicit|SrcMem|ModRM|Mov, simd_other, d8s_vl= }, [0x7a] =3D { DstImplicit|SrcMem|ModRM|Mov, simd_packed_fp, d8s_vl }, [0x7b] =3D { DstImplicit|SrcMem|ModRM|Mov, simd_other, d8s_dq64 }, - [0x7c ... 0x7d] =3D { DstImplicit|SrcMem|ModRM, simd_other }, + [0x7c ... 0x7d] =3D { DstImplicit|SrcMem|ModRM, simd_other, d8s_vl }, [0x7e] =3D { DstMem|SrcImplicit|ModRM|Mov, simd_none, d8s_dq64 }, [0x7f] =3D { DstMem|SrcImplicit|ModRM|Mov, simd_packed_int, d8s_vl }, [0x80 ... 0x8f] =3D { DstImplicit|SrcImm }, @@ -1496,6 +1496,12 @@ int x86emul_decode(struct x86_emulate_st s->fp16 =3D true; s->simd_size =3D simd_none; break; + + case 0x7c: /* vcvttph2{,u}w */ + case 0x7d: /* vcvtph2{,u}w / vcvt{,u}w2ph */ + d =3D DstReg | SrcMem | TwoOp; + s->fp16 =3D true; + break; } =20 /* Like above re-use twobyte_table[] here. */ --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -7778,6 +7778,14 @@ x86_emulate( generate_exception_if(evex.w, EXC_UD); goto avx512f_all_fp; =20 + case X86EMUL_OPC_EVEX (5, 0x7c): /* vcvttph2uw [xyz]mm/mem,[xyz]mm{k= } */ + case X86EMUL_OPC_EVEX_66(5, 0x7c): /* vcvttph2w [xyz]mm/mem,[xyz]mm{k}= */ + case X86EMUL_OPC_EVEX (5, 0x7d): /* vcvtph2uw [xyz]mm/mem,[xyz]mm{k}= */ + case X86EMUL_OPC_EVEX_66(5, 0x7d): /* vcvtph2w [xyz]mm/mem,[xyz]mm{k} = */ + case X86EMUL_OPC_EVEX_F3(5, 0x7d): /* vcvtw2ph [xyz]mm/mem,[xyz]mm{k} = */ + case X86EMUL_OPC_EVEX_F2(5, 0x7d): /* vcvtuw2ph [xyz]mm/mem,[xyz]mm{k}= */ + op_bytes =3D 16 << evex.lr; + /* fall through */ case X86EMUL_OPC_EVEX_66(6, 0x2c): /* vscalefph [xyz]mm/mem,[xyz]mm,[x= yz]mm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x42): /* vgetexpph [xyz]mm/mem,[xyz]mm{k}= */ case X86EMUL_OPC_EVEX_66(6, 0x96): /* vfmaddsub132ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680534005; cv=pass; d=zohomail.com; s=zohoarc; b=d6MfAoJb4mIyNS6Gi4p+L6D5kI0K2ExCl2/vEKISAyOfD3mvQ9OaAhSAnB08YCsCoZ3VUsrhNFZ5zxBOfchSpNM5AmIyAAwB8C/EWKCCOCfInfyKu9rwuDY2HRWVrPr+35SI9oXMXVpf16TnQDvFB5WyGVuptJq/t6sgz53yi9E= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680534005; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=6C2XMdmMlevRHHkAtu6ujlq2vtpyDWTGQwl0t4wyzLM=; b=W5DEV2g4RjV0wQB1xsyLZaJcB2OXFDZC7JXwSL4RPCvvrDYQLwSXwRbXSMzkrTPaRgpTsN/XdFE9iLqA6P1+ZmnSnUbKkmVR47S92YMe/OmJzyb9muwiEyJbIqcnxyvrZy8MYXXsonpIEuHFD6GRceEPSugxew4ODsi1vXm510Y= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680534005585388.9067487672022; Mon, 3 Apr 2023 08:00:05 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517501.802918 (Exim 4.92) (envelope-from ) id 1pjLer-0001Yc-UR; Mon, 03 Apr 2023 14:59:45 +0000 Received: by outflank-mailman (output) from mailman id 517501.802918; Mon, 03 Apr 2023 14:59:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLer-0001YV-RX; Mon, 03 Apr 2023 14:59:45 +0000 Received: by outflank-mailman (input) for mailman id 517501; Mon, 03 Apr 2023 14:59:44 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLeq-0000MW-GH for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 14:59:44 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20621.outbound.protection.outlook.com [2a01:111:f400:7e1a::621]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 28cb0595-d230-11ed-b464-930f4c7d94ae; Mon, 03 Apr 2023 16:59:42 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 14:59:39 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 14:59:39 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 28cb0595-d230-11ed-b464-930f4c7d94ae ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G5mq77nDTjSWCCoxWyRjwHhDlqQhIZ4O7Nys1zxdgGsK1GTEt+Ikse80QvIqBXOxaZ9bAdE3PPHxlGB1Mrs/BE9JvVGKYb3GoIiuzUy7OnPtz2psvVLX5WaHdoo1tGkHcCk6ghRvI3kto9ILk5e3ziDQunac+R2fhbe2iHd1vGqHAsWe8RwswW7u5z6k9+R+JHatzEQQrFpuo9NyosyrJI1oyIUVEhHimIFmW99O+VrarpklDmq/xx+ZdfFHXcjAa6QCe6Kz4Ym1T/0SqumFjzNzgcAtlFMCYezTi3oZRNStms0Bxrg4lHZLvSBPKdcV/QTfoTPJQP6UdnherJsU0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6C2XMdmMlevRHHkAtu6ujlq2vtpyDWTGQwl0t4wyzLM=; b=nANfu9XKPBGcYPRdHibN6R7xgd+IBoUVjXWEmSBzqhKBeSU8LUryeNn0ki/f3IpVgPvTYg7T181Nwjqh06xDGmscVql9xeEDQ4domX0KMONKXwXNVizVR43xiDTc4S2fNmw7Ya2qvr24c29IG/nmR2CzLNueCrcFDE3f//rUZJey0SPy0ABaSUSHdAGNBXqzpWtSzHdkbReN2WMxe8lQFXjshXQmx0VllgxFcxn/SXYNA5p9LVJwShMKdkK82JSUOGYHT/rChzZaPDoRw2qMQs1oIKZ2vkSSZRmZaKzgLxAodKzAqT31scvxr0YpHSVb2XaSPNbaUFABafBAIzZcoQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6C2XMdmMlevRHHkAtu6ujlq2vtpyDWTGQwl0t4wyzLM=; b=QpzVia/dM/iOwWQz6zTHyK6Zrr0lxe7GLSG8WnRUZVI3rY1KyFhdx7PJiMNVpPBMrTdPjfZrxhm/UK48zx2ASboMAtjj9W6bvr4Oc0NxcYE5itUMQrNOEx5LnhavIOBemhed/BFa7E36f3WNcGKcxX+Xt9qFcRFc+8SUZU/vIlcm3ypb9GIg/88xuUV1vQoOchIXzN6RNfPwTsldd8np16/YuxX5ps9bX3PPyteTunKnm20Uma6pTbcETv9DTYPBH1oUDNRY80g9urO16zQDKToKNO8N10SZfGq1aBFql0sbZyHR/4+NjmqlvfM0ieZe3Y7hXiozJkfYk0YJf2ciqQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <607132c8-2693-667d-f6a8-09f362cc7bce@suse.com> Date: Mon, 3 Apr 2023 16:59:37 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 08/10] x86emul: handle AVX512-FP16 floating point conversion insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0053.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:48::17) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: a1093b80-eed6-4d1f-427d-08db34540c24 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Z23T6p0jTls9S1+36WHN2JS1GNM2UFWR1lXUTrmpW9Joyr7NxX2ZUt0vhAAObY+58hlQj/wUVlSuMzCgTy7wcvela4qSGxz6sluyCrZ84KIxr1oFcb6/ReaENHuxKIVq+wXb0uof34Cg/sRPIQAxWt/Ro/6LrL8murMQ2QqHR7AaylmEeW4kYC7w2HSZF6372eu6YNkldRsdBo8asUEmLa4ztGCu5rbeeOT8YnAM9sSud8WJ4Drsx7CLzG3gbTC6NNc70pPDBrVhf/H22B4JjQPA7fjSxpBXpbNfN3Hj+MMp8rmGHEMlCzNVOKXpx/uQhPACqxi3zlu943PiLH401FxDI57KYj52q0RJx15T9fptG4nysdTRJQws3U+kqBX/8Iq/42ul1Gz7yBImuaJ+rpw5fiFnmjC7Vc5p/Mtt0UrA8TXaBJGmGjR7r1HBpKb2di5Moo+VTCgf12szCVLd78kOg6hvfXTDEezrYqkXi6tmHVqbDw4eH++0Btv3tYb1VzBWE8OU3NW82htxcrm63XsVkOehC+92A3prT/FfdU45C4Momo8J+TbplagJgbnWBzQGN6dhtur/Z0HBK+IEGeCXKHPBda7tvYLoXyE9kgSc42fXz3ttwbxHztAqePuVepIbnEshEvqoJrBpB+aoAA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c3VEQzNKREk3dkZJdERWdXlmZUZjUnQrRTBGaWFrYk1Ebm9ka0drWkluRnpU?= =?utf-8?B?Q0lVREczVGlMVzFJa0w5TU9IYUdZTmtCaGNOU2pvckhySUJwb2lUZmpKNFZV?= =?utf-8?B?SkFFYnFBQ1NOZklLSCtnWUtHYkdWQ1ZIUTZTb3VWckFKS3NXSjF3MXZ6eVA1?= =?utf-8?B?Y3R1cjgvMEpIb2VyVUlZREUwNElCODc1M0d5cHhBTnN5SUxFbjJpanVXVHMr?= =?utf-8?B?MXZucmdQZU4zN0FTYkVyaUVYdlBRZmF2cndNMWFDSHMyUTIyKzhSY0xGWnc2?= =?utf-8?B?NTNDak9OTXFXelQvNGlYaHlUaEpBMkJVenpQRk1mSXlCNW9SVTJWbUtkanV4?= =?utf-8?B?NTBNQytFYndZbUFQQ0VFWWJCMnY0Q0ZsS0t6SS9ycDlORUF0NUw0NUlmQ0sy?= =?utf-8?B?QzUzTjM5MUZVK1c5WVNENmFKbHVjRkpuOSttMXZVZ0pVdE1VMk9HOU5qMktZ?= =?utf-8?B?R1M4TTBoeXFrclBrZU40S0JjYTZjM041ZUUzN1JHRFhMZ0l2VVI1NnYzcitv?= =?utf-8?B?ZHp6WnR0SlhVM2c3cGpYUVYzMHdKNjJwNldWZG8xb0pwMUlscWs4TW0xWjFH?= =?utf-8?B?cWVwcER3VEh6TTZ1M0N3UWU4YXJVb2J3V0NodnBFWExaM0dxWmtBaDhJbHoz?= =?utf-8?B?ZHJGdXdzTzFkTVppYnAvVmgwN0hJcmEvQ2Q5MC9icTludExNWkJYaXE2Um9J?= =?utf-8?B?TkpLYTRxRld0bXdaMUFWQnlvaG9WNUtveHkzOEVJVnhVelArYmRPdm9idkNJ?= =?utf-8?B?eTJNcWdQdUorUkY5WXZvZUJKa1FYYUpEWWtTdHhUS1dlcDNoUWVBTXViOTdH?= =?utf-8?B?WHNqc3htL0lSV2h3Mm9Ybzk1dVgwOWhZTWtZbkU3c21VVE5XVkhrVGdpa1g2?= =?utf-8?B?TjRyS0NJZk0xRmtoczJmeVB6ZEp1WEhQWE81L0xmNXJMdFBNYWNmK1VzZ3k5?= =?utf-8?B?UXcwN3ZUV2hWUmVJb1V3RUZ1enNTbGVucWJWTk1MaE5kWDVMMG94UUFVU0dj?= =?utf-8?B?WE5GMDNBUTlqYkVpNC96RHgyYmhmSW9pWERGVms1cUJ5SkwxMFg5ZVNxQmVw?= =?utf-8?B?R3VJaXRmbEUxQ0d4VW9aVjFhV0dVNXhvaXBEM2Faa1EwUko4aGtOYi9SUGlL?= =?utf-8?B?VGx0ck1DdHBaMjVXeHJaMCtTN3JHbTRYWWZEK1FTNUJ1Nlhua1VUWVBCWHlW?= =?utf-8?B?Nm9FNi9neGg3YmZ4Q0VDa0lvOStYZXo1Y2s3SEpjSVJxUVI1dFN0QkM1ZDNJ?= =?utf-8?B?OU5HZWl3YVB1eFhRTnl2bXN2bnFTNUFNUytQcWZ5ZFpmUG5mWmUvQWpKV0g1?= =?utf-8?B?c3d3bmtreWxhc0xlRk44NjFEanVKMU9WUjZQOXJ5UzNmTHkrRTdzNkRCNE9X?= =?utf-8?B?Um5PVFllcnQxL1MyYm9uV2ZHMnFNZEhVOWdvYklKMHVNeXN2cDkyQmZ0VU9u?= =?utf-8?B?MVVZcE92MHhhQjlTYXlkMG9uK0xBcnVJVkhLVmRjNFJrQnQ3Zy83NFp2ZjlV?= =?utf-8?B?MlFnSkljbWsrTnV4SVBGaE8wa0ZpcGNlNlQ2TVVJbUVxQ2RNbGVOYjdNZ2JM?= =?utf-8?B?U3ZLNkgxWnhzRFRIM0xZRWppbnJ3UDJFSVJKRy9NOWMyN1Y3L2txN0x0bU1s?= =?utf-8?B?ZlZ4eElnSlVkWnpDRndqSTBHYWpGNm81L3o4T09DZVNkNnJ4QUFrUXNKRk5J?= =?utf-8?B?cWVXQXFMZjE0VUxLK3V4WFAzbUFqZ2czMnlLeUxBQUs5bUxyc0R3aGJWK2ZI?= =?utf-8?B?NUhjZWZqeDcvNE1nUjhaODVuZ20vNVk5REpnWENBUGg1eEpqbVlUT1pyc1Jk?= =?utf-8?B?MU8vN25uTUpCZGs3WEtzWjBrOUEvamlxaDZsTExLWUh5bVlhQ0VET3N4UHFz?= =?utf-8?B?VUdJSmg5R1BVVEtCYWVsV0xUYmhFR3hDbEFxeHp3cjA4SlFNaDAxRjZHV2hW?= =?utf-8?B?OTJMbllOU0tYeGhRd1prd1J2QjhpMjc5UVNDZXE4Sm95amlxSGZGUVBRdzVF?= =?utf-8?B?ODQrdTNRMGxxcEFGaUJZV29DdkFveld4ZEIrRVhtWnpOMzNLdGo0d3YycTE2?= =?utf-8?B?QUFPMnZVU0N6MVRrai9sQkNlQ2NnYnZnMS81NEVnWmc0Q0R3ZWRkMk5xczdp?= =?utf-8?Q?2t7JwB3yWwSvDmSy4u1XGlbed?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1093b80-eed6-4d1f-427d-08db34540c24 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 14:59:39.0230 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: M/ochzW7QBuQbXIz+OxvSFpoxosAPCwq90fix46mGKLKJTCnQZk7eAIZWVrOHjHrqR3ohI/CSBo9f7VftYvnQQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680534009598100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jan Beulich Acked-by: Andrew Cooper --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -612,8 +612,16 @@ static const struct test avx512_fp16_all INSN(cmpph, , 0f3a, c2, vl, fp16, vl), INSN(cmpsh, f3, 0f3a, c2, el, fp16, el), INSN(comish, , map5, 2f, el, fp16, el), + INSN(cvtpd2ph, 66, map5, 5a, vl, q, vl), + INSN(cvtph2pd, , map5, 5a, vl_4, fp16, vl), + INSN(cvtph2psx, 66, map6, 13, vl_2, fp16, vl), INSN(cvtph2uw, , map5, 7d, vl, fp16, vl), INSN(cvtph2w, 66, map5, 7d, vl, fp16, vl), + INSN(cvtps2phx, 66, map5, 1d, vl, d, vl), + INSN(cvtsd2sh, f2, map5, 5a, el, q, el), + INSN(cvtsh2sd, f3, map5, 5a, el, fp16, el), + INSN(cvtsh2ss, , map6, 13, el, fp16, el), + INSN(cvtss2sh, , map5, 1d, el, d, el), INSN(cvttph2uw, , map5, 7c, vl, fp16, vl), INSN(cvttph2w, 66, map5, 7c, vl, fp16, vl), INSN(cvtuw2ph, f2, map5, 7d, vl, fp16, vl), --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2031,6 +2031,8 @@ static const struct evex { }, evex_map5[] =3D { { { 0x10 }, 2, T, R, pfx_f3, W0, LIG }, /* vmovsh */ { { 0x11 }, 2, T, W, pfx_f3, W0, LIG }, /* vmovsh */ + { { 0x1d }, 2, T, R, pfx_66, W0, Ln }, /* vcvtps2phx */ + { { 0x1d }, 2, T, R, pfx_no, W0, LIG }, /* vcvtss2sh */ { { 0x2e }, 2, T, R, pfx_no, W0, LIG }, /* vucomish */ { { 0x2f }, 2, T, R, pfx_no, W0, LIG }, /* vcomish */ { { 0x51 }, 2, T, R, pfx_no, W0, Ln }, /* vsqrtph */ @@ -2039,6 +2041,10 @@ static const struct evex { { { 0x58 }, 2, T, R, pfx_f3, W0, LIG }, /* vaddsh */ { { 0x59 }, 2, T, R, pfx_no, W0, Ln }, /* vmulph */ { { 0x59 }, 2, T, R, pfx_f3, W0, LIG }, /* vmulsh */ + { { 0x5a }, 2, T, R, pfx_no, W0, Ln }, /* vcvtph2pd */ + { { 0x5a }, 2, T, R, pfx_66, W1, Ln }, /* vcvtpd2ph */ + { { 0x5a }, 2, T, R, pfx_f3, W0, LIG }, /* vcvtsh2sd */ + { { 0x5a }, 2, T, R, pfx_f2, W1, LIG }, /* vcvtsd2sh */ { { 0x5c }, 2, T, R, pfx_no, W0, Ln }, /* vsubph */ { { 0x5c }, 2, T, R, pfx_f3, W0, LIG }, /* vsubsh */ { { 0x5d }, 2, T, R, pfx_no, W0, Ln }, /* vminph */ @@ -2056,6 +2062,8 @@ static const struct evex { { { 0x7d }, 2, T, R, pfx_f2, W0, Ln }, /* vcvtuwph */ { { 0x7e }, 2, T, W, pfx_66, WIG, L0 }, /* vmovw */ }, evex_map6[] =3D { + { { 0x13 }, 2, T, R, pfx_66, W0, Ln }, /* vcvtph2psx */ + { { 0x13 }, 2, T, R, pfx_no, W0, LIG }, /* vcvtsh2ss */ { { 0x2c }, 2, T, R, pfx_66, W0, Ln }, /* vscalefph */ { { 0x2d }, 2, T, R, pfx_66, W0, LIG }, /* vscalefsh */ { { 0x42 }, 2, T, R, pfx_66, W0, Ln }, /* vgetexpph */ --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -224,7 +224,9 @@ static const struct twobyte_table { [0x14 ... 0x15] =3D { DstImplicit|SrcMem|ModRM, simd_packed_fp, d8s_vl= }, [0x16] =3D { DstImplicit|SrcMem|ModRM|Mov, simd_other, 3 }, [0x17] =3D { DstMem|SrcImplicit|ModRM|Mov, simd_other, 3 }, - [0x18 ... 0x1f] =3D { ImplicitOps|ModRM }, + [0x18 ... 0x1c] =3D { ImplicitOps|ModRM }, + [0x1d] =3D { ImplicitOps|ModRM, simd_none, d8s_vl }, + [0x1e ... 0x1f] =3D { ImplicitOps|ModRM }, [0x20 ... 0x21] =3D { DstMem|SrcImplicit|ModRM }, [0x22 ... 0x23] =3D { DstImplicit|SrcMem|ModRM }, [0x28] =3D { DstImplicit|SrcMem|ModRM|Mov, simd_packed_fp, d8s_vl }, @@ -1482,6 +1484,19 @@ int x86emul_decode(struct x86_emulate_st s->fp16 =3D true; break; =20 + case 0x1d: /* vcvtps2phx / vcvtss2sh */ + if ( s->evex.pfx & VEX_PREFIX_SCALAR_MASK ) + break; + d =3D DstReg | SrcMem; + if ( s->evex.pfx & VEX_PREFIX_DOUBLE_MASK ) + { + s->simd_size =3D simd_packed_fp; + d |=3D TwoOp; + } + else + s->simd_size =3D simd_scalar_vexw; + break; + case 0x2e: case 0x2f: /* v{,u}comish */ if ( !s->evex.pfx ) s->fp16 =3D true; @@ -1506,6 +1521,15 @@ int x86emul_decode(struct x86_emulate_st =20 /* Like above re-use twobyte_table[] here. */ disp8scale =3D decode_disp8scale(twobyte_table[b].d8s, s); + + switch ( b ) + { + case 0x5a: /* vcvtph2pd needs special casing */ + if ( !s->evex.pfx && !s->evex.brs ) + disp8scale -=3D 2; + break; + } + break; =20 case ext_map6: @@ -1526,6 +1550,17 @@ int x86emul_decode(struct x86_emulate_st s->fp16 =3D true; break; =20 + case 0x13: /* vcvtph2psx / vcvtsh2ss */ + if ( s->evex.pfx & VEX_PREFIX_SCALAR_MASK ) + break; + s->fp16 =3D true; + if ( !(s->evex.pfx & VEX_PREFIX_DOUBLE_MASK) ) + { + s->simd_size =3D simd_scalar_vexw; + d &=3D ~TwoOp; + } + break; + case 0x56: case 0x57: /* vf{,c}maddc{p,s}h */ case 0xd6: case 0xd7: /* vf{,c}mulc{p,s}h */ break; --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -7778,14 +7778,25 @@ x86_emulate( generate_exception_if(evex.w, EXC_UD); goto avx512f_all_fp; =20 + CASE_SIMD_ALL_FP(_EVEX, 5, 0x5a): /* vcvtp{h,d}2p{h,d} [xyz]mm/mem,[x= yz]mm{k} */ + /* vcvts{h,d}2s{h,d} xmm/mem,xmm,xm= m{k} */ + host_and_vcpu_must_have(avx512_fp16); + if ( vex.pfx & VEX_PREFIX_SCALAR_MASK ) + d &=3D ~TwoOp; + op_bytes =3D 2 << (((evex.pfx & VEX_PREFIX_SCALAR_MASK) ? 0 : 1 + = evex.lr) + + 2 * evex.w); + goto avx512f_all_fp; + case X86EMUL_OPC_EVEX (5, 0x7c): /* vcvttph2uw [xyz]mm/mem,[xyz]mm{k= } */ case X86EMUL_OPC_EVEX_66(5, 0x7c): /* vcvttph2w [xyz]mm/mem,[xyz]mm{k}= */ case X86EMUL_OPC_EVEX (5, 0x7d): /* vcvtph2uw [xyz]mm/mem,[xyz]mm{k}= */ case X86EMUL_OPC_EVEX_66(5, 0x7d): /* vcvtph2w [xyz]mm/mem,[xyz]mm{k} = */ case X86EMUL_OPC_EVEX_F3(5, 0x7d): /* vcvtw2ph [xyz]mm/mem,[xyz]mm{k} = */ case X86EMUL_OPC_EVEX_F2(5, 0x7d): /* vcvtuw2ph [xyz]mm/mem,[xyz]mm{k}= */ - op_bytes =3D 16 << evex.lr; + case X86EMUL_OPC_EVEX_66(6, 0x13): /* vcvtph2psx [xy]mm/mem,[xyz]mm{k}= */ + op_bytes =3D 8 << ((ext =3D=3D ext_map5) + evex.lr); /* fall through */ + case X86EMUL_OPC_EVEX_66(5, 0x1d): /* vcvtps2phx [xyz]mm/mem,[xy]mm{k}= */ case X86EMUL_OPC_EVEX_66(6, 0x2c): /* vscalefph [xyz]mm/mem,[xyz]mm,[x= yz]mm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x42): /* vgetexpph [xyz]mm/mem,[xyz]mm{k}= */ case X86EMUL_OPC_EVEX_66(6, 0x96): /* vfmaddsub132ph [xyz]mm/mem,[xyz]= mm,[xyz]mm{k} */ @@ -7812,6 +7823,8 @@ x86_emulate( avx512_vlen_check(false); goto simd_zmm; =20 + case X86EMUL_OPC_EVEX(5, 0x1d): /* vcvtss2sh xmm/mem,xmm,xmm{k} */ + case X86EMUL_OPC_EVEX(6, 0x13): /* vcvtsh2ss xmm/mem,xmm,xmm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x2d): /* vscalefsh xmm/m16,xmm,xmm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x43): /* vgetexpsh xmm/m16,xmm,xmm{k} */ case X86EMUL_OPC_EVEX_66(6, 0x99): /* vfmadd132sh xmm/m16,xmm,xmm{k} */ From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680534029; cv=pass; d=zohomail.com; s=zohoarc; b=lVg/f4cbA9bf0doNDERdfGWFmuyELBZR9iIkU+qivmBNd7Zo0MACXC5BE3PhHM5rrejmqaoA0Bku3ies3KPZDqLXGuQb59cp7rMmSEoKFXA/yiRVrJIO68Ap44/0BQUSzIz5NH1V98iRZBhVo0eSjfH/bXOfD/mpa+5vIwmJqqo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680534029; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Wxm5CGoq/DJSIHHXyHkrlfKqPlnnC/KYi/RhtFzDoeM=; b=aXFPGJQi/aENRgMBeA8bLKyNykqa0Xhc4K6CEVWDCoFA5GgNK/2JSth2EmXye6qhO2vPCXq8PW38sGn0zTgjloIjJ1f9ji8dVSHrXK9gsG8qrSrbgx5lo9hbx7IifMO86M0ZhBjRvtruRZ4dOQRp3A+Gfrwn57Ez0kiiZFfR460= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 16805340290981014.2115306073349; Mon, 3 Apr 2023 08:00:29 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517506.802929 (Exim 4.92) (envelope-from ) id 1pjLfG-0002y8-Bq; Mon, 03 Apr 2023 15:00:10 +0000 Received: by outflank-mailman (output) from mailman id 517506.802929; Mon, 03 Apr 2023 15:00:10 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLfG-0002y1-8s; Mon, 03 Apr 2023 15:00:10 +0000 Received: by outflank-mailman (input) for mailman id 517506; Mon, 03 Apr 2023 15:00:09 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLfF-00025F-0y for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 15:00:09 +0000 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on20621.outbound.protection.outlook.com [2a01:111:f400:7e1a::621]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 39430082-d230-11ed-85db-49a42c6b2330; Mon, 03 Apr 2023 17:00:08 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by DU2PR04MB8760.eurprd04.prod.outlook.com (2603:10a6:10:2e3::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.33; Mon, 3 Apr 2023 15:00:06 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 15:00:06 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 39430082-d230-11ed-85db-49a42c6b2330 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Zj8uHsbxyqDlnVZmjqL9sx91gNXvLdLQH8LQeUnyL22V4/yrnGVAlxxV7CfVrH0ySwjDPNYErJjUcVvHbbxF9bQyWcZvGXcee/VMYUP6EIOwtDJ5HpaMYDcCmGe6C/u/3bk9NIRChLsS/c1LdMreZEKxMao0lir8rF4zASSb/z11JV/YJX+F+U+Bqhi7QvyXjaAu8LaqKR8wiJ8eEXhNPooSIPz70IS25C2zeEBD+d70/3eZZ3OiTePCYV8wL3A4m2wb0ok6GIwvPvwMvsSc+upVhEBrcwDgno62q/Jj8UvgzHqfB6Wf/sc4Ec9Kvlq4ZhmgVxSm0EiiI/k5HCVWYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Wxm5CGoq/DJSIHHXyHkrlfKqPlnnC/KYi/RhtFzDoeM=; b=gOBkorkFh5NNcVpHL/s73bGIymlZuIs0MTPIzNBXyWngnZz3RLmK35LhUV9GCL2HwXPgwttejZc+WzHjewjIgN0UqqsANn2FdaZqxMdVQxzE/RZgsIz1Irh/4KA10soQSk2rWhMGglyx0HjNNpbKzwmI6n5GpyLcaA1CxdOB8u4dvwkT4ZgqmvjdzzxOuaNRgX2VK3J6mBWL8kH30n6JnuLgznyBh7NqWZaymNtLWTFaMSEm0Wvw1CJEReYY6VDtiSc+9CVgaoZhXrz2iomnat6yXdvndba6Uq8qTHPj6rkqqtlM7rQ25gITJ7QV6tI1mhhp55mVJK78w3APBufxcA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Wxm5CGoq/DJSIHHXyHkrlfKqPlnnC/KYi/RhtFzDoeM=; b=L7VenwbqWTh/tIIqcdEIQoz882tcdZFSjd+z0EBbqO3NfLRk2OtJRpmpuxfoSd5a0nU/ZgD96QVFyJFH+Q41DZXp13cH3tCay8ZpyCrZpY4DqW/Hdp4CkFqYSUi+bS2vF9/1p0WLh1fJZ4mHHmPHXr7ETxXNcV2HgKjQLAsO7vv7d1k4qbmgUwKDoM/D3aE4IkxlUzhJkZHUC41yEChLV+sd1PMbKQT3B3IYT4ernTFAOJ3ERGAUVwT74f7W77GS81zOVuWyDBuvLmdoR02E/2zpUpKcPUTrQ1Ma70X+FUJFxpMJAWk9D7umFJU4FlzKxT0+iT1fMdL8QSjUwT81rA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: <283bef89-b29a-3cd3-56db-a34dc4f786ab@suse.com> Date: Mon, 3 Apr 2023 17:00:05 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 09/10] x86emul: handle AVX512-FP16 conversion to/from (packed) int{32,64} insns Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0242.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:af::12) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|DU2PR04MB8760:EE_ X-MS-Office365-Filtering-Correlation-Id: 86295e5c-9d05-4e11-d2e6-08db34541cb7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JcRK0aNB0Ms6+hy6fVaPmT7H2TV71DRyqJWPTf/9Z0DrjivdCDIHnOUYMoxoQ/OyE54LWrA+a87FBDrD0Y0onokNbgJHhTLBXvnIIeSFryMnTR2agwtyWLTmX5YjGbERsh70xgLaqIEmkaiaXkg8aWh4kAFEPuEzHa9cbL3CpXuTV34h07s5Pa6kFuNLRdIZ8jABOUOQz520KbTS5y9zg0srigjxltyxzgaw5EBUgozvxtqzmFMBIZAxMPFPJrOo5Rwmb4oF6qcaCbq+mfWff1SLkbcwfLttAVMJR9fBZcm8Ocjh2JflD8hRg9ajjks8p4+R/DWEworBmbpmcHL89a/9VXZj9vwNJD7VNuRThRF8IIHnL9J+OW8XVVwdgwKUISngqlAVIRdBuE9+rz59JVHlhvUovjKTyH+bUieNQqHxTZLVfztJc/Vwr0nfxRTvCcPX0xJZkdgtwkGe4Penwd8LsP80Y0eydU9A3uLkzfqPqTmMQhQ2BSFRt56zkoCZ/+yfYkGnD2FqDmjry4GvUEYkK2vweL8pWoo2jg6R82XS/dUlloqMtdKY87QZ5/8sRDcvkHkwdDhZGyYcAZX66xAzfYu0Fxn4OA/UPObfNq/j/JfQ4EU2FFLl41+zRuDjqqQMT1oM7zmP7L/JwD6MHA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(366004)(136003)(346002)(39860400002)(376002)(451199021)(6916009)(8676002)(66476007)(4326008)(66556008)(66946007)(478600001)(316002)(54906003)(8936002)(41300700001)(38100700002)(5660300002)(186003)(2616005)(6486002)(26005)(6506007)(6512007)(86362001)(31696002)(36756003)(2906002)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eVJOTXkxTmRRWWZKcUxwQUw1YlNHM25DRkU2L3lRWmJwVE04aUJJRkhLOFp4?= =?utf-8?B?WERKVzFGWEo3VzJjdW41bmtmTHg1QUR3elhEQkprK2NETXVQbTQ3dG5HTjgz?= =?utf-8?B?YlFtWXBCbWM0bVlNTmRJUGhueGY0QjM0K2FxUWsxdUUzVWN2eWx5ajJ3ZC9o?= =?utf-8?B?N1A0ZlZMQk9tSHY3RzV4aWM1N0NrL3Y5QkFxVTBwNFc4ZzBqTnhXNkE2NlJh?= =?utf-8?B?S0Q2WFZSL1pNYlRUbFFTUEtPN3NIZlFLczd2ZFRyNTEwVk9xWk1rVEd3a0tw?= =?utf-8?B?cFZpN2pnUHJoeFlxdThUMENnU0N0Q0xQbGQzaHpiRENOdlhVTm5qdWZKTnJr?= =?utf-8?B?UVlaOHBlb1BXTUp3WWNlUlV4dDEzenhUaEFqb2Y4MFNUd3lZVm4wL0RpamxZ?= =?utf-8?B?WmhlMmxvTzlZOENrcVV3Sk9nc0prRFJoUmRoTFYxNi8rK2U4MWJlRW1tNWhs?= =?utf-8?B?ZXpzQnlPbEx0dzZlV1lJSzlHSEFFU3BUdW5zRlNDMVVZa3JMU2NWTTFEdVFi?= =?utf-8?B?QVIzaHY0Z1N3MkxjSVM2RXQ1QTRCUVdibHJRYmlRNkJrUnZDQWNkTGhQTG9H?= =?utf-8?B?SUlBNkw1Y3l2clFodmhQMmdMQm55UUNZU3dFU1VRaU82S3FHRGRyNW5aN1Bu?= =?utf-8?B?NTIyUHJ2eDNBTXptR0JqMEUzWUdzQjh5UUNmV0Vtd0plWWZheUduVmo3NmVB?= =?utf-8?B?dU1YZUN2K3FGZEZQK05mUDB0Vjh0dldGTStxYjd6VU4yQWR2OHJYUDlJT1VE?= =?utf-8?B?RHJOSlJsQi9HVFgyeGY3cDh0Nld4TDRLcE1lb3d3dzU3bVhsWk5RT0paZDlP?= =?utf-8?B?R3dOT1p1endMWGpLbzRKb2xRalFEOVpVaVV1ZFBKVlRPTm9Jd0ZlN2hxeTVu?= =?utf-8?B?M2I4MG84UEo4WXdZU0tUbUVHdElJemd4WU5QcFRSS1g5eFNNc2xuelEwQXdD?= =?utf-8?B?MW9TVkphWU1nUG1qTFIyZHRPRU4xWFlrYjJvbUMvaGZqa20yVDdxdXhJNUhS?= =?utf-8?B?T2pJYUg1UWZreW5WczAxNVJjTG5aMWROZ0ZybTJOTWJjenl5Y2xtZ3BnL0NE?= =?utf-8?B?S1FZMy8rd0RMUEl1YXNPWG40VkllaVppMEh0ZU0wOUZyWEUvaGloVVFpbldK?= =?utf-8?B?TWgxekxhelhsbVoxbmdiQnVRWE1LaVBQbVZFTEtBUHFCNVBqeDQxL0NLSEt1?= =?utf-8?B?dG5MNWtneFYxMzVieklwVk1vb0RYZk5jZ0RBK3Jya3J3VzdmZkJJOHc4eFVu?= =?utf-8?B?NldDRkVQRUgrV2R2RjlJMHRUeUwwT0phd1h6ZjR1QXlFVXNkM1FTM1Fjdmxk?= =?utf-8?B?ZFpCTllTNklocHgwTmZGREthTitZV1ZMek8zMnlEdStWVk5wVExMY3J2MDRV?= =?utf-8?B?dVVXY1F4NExyL0RvTW10K0J2RUc1OHRjbURWVzhsT2ptaCtMbS9FRjhnaXVM?= =?utf-8?B?K2YzVDlNOFNMNlRXWWVuYkhEMm50UkcwQ1JnNDFkT2VnVkFMZTdSemlFQ3VJ?= =?utf-8?B?MEkyTUVFQlRBdTJLRi9XSGkvOGc1OVpaTzQ0b0lRdFkrek9SRTVlUk55cTk4?= =?utf-8?B?WTM3NmhGYXNMUk91VThVa01BS05JeWE4Wm5sV0xGdERFZjRPWXZvT2FibDA5?= =?utf-8?B?ODFZZkdydmJhZ2dIak5GeEoyR3FvbUNDbTJLNFV1NUswNVo2d1RzUzNnQUo1?= =?utf-8?B?bU9MYlR2MlIvTGVMS25ucHJ6aEtoM1pUMUxQUWhJVHVqUDRaRUtkRXduMDgw?= =?utf-8?B?VExsc1dwaGNncUFrSUlsU1VIVm02dklBODlqTzhMMk5vSmcvVUR2UG02dldx?= =?utf-8?B?aCttakI1NkhtN3ZBb3crK2o1WUgza1lVRVlvSTZqdENKbUQ1Ty8wNy8yUjdH?= =?utf-8?B?NHFldThkNUM3ZndmRTJUdFg5OC9pcnVEZ2Vad1U5bkZ5RzFKTUVhNGE4U1V4?= =?utf-8?B?VUVQa3lBb0l4bnZxbkViclJsNGJDNmh0eXdVUzZ2ZmpKZkwyYURTMWJybGN3?= =?utf-8?B?OS9aYitCcGVLNitvMVA5WTRoMHYxN0F5ZmlsL1ZBLzFvRnp6QW1xQXRtZmFj?= =?utf-8?B?R1R4Qmd4Z0ROdXRpRGpDWk9YSDlrMHFtbDlHQ3RDTnNGMDI4WmtGTzFHSWRh?= =?utf-8?Q?IJfNdk0THtwJQDklc2INbjo4j?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 86295e5c-9d05-4e11-d2e6-08db34541cb7 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 15:00:06.8062 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iqNOpu3XvHJjWnAGvsYlCgKKbuFjNmm+BVpulfyJ2cixIFA7b4GEb9W3VBNqJhkbr93z+xKum8DNv95lhr4xOg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU2PR04MB8760 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680534031482100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Jan Beulich --- a/tools/tests/x86_emulator/evex-disp8.c +++ b/tools/tests/x86_emulator/evex-disp8.c @@ -612,18 +612,36 @@ static const struct test avx512_fp16_all INSN(cmpph, , 0f3a, c2, vl, fp16, vl), INSN(cmpsh, f3, 0f3a, c2, el, fp16, el), INSN(comish, , map5, 2f, el, fp16, el), + INSN(cvtdq2ph, , map5, 5b, vl, d, vl), INSN(cvtpd2ph, 66, map5, 5a, vl, q, vl), + INSN(cvtph2dq, 66, map5, 5b, vl_2, fp16, vl), INSN(cvtph2pd, , map5, 5a, vl_4, fp16, vl), INSN(cvtph2psx, 66, map6, 13, vl_2, fp16, vl), + INSN(cvtph2qq, 66, map5, 7b, vl_4, fp16, vl), + INSN(cvtph2udq, , map5, 79, vl_2, fp16, vl), + INSN(cvtph2uqq, 66, map5, 79, vl_4, fp16, vl), INSN(cvtph2uw, , map5, 7d, vl, fp16, vl), INSN(cvtph2w, 66, map5, 7d, vl, fp16, vl), INSN(cvtps2phx, 66, map5, 1d, vl, d, vl), + INSN(cvtqq2ph, , map5, 5b, vl, q, vl), INSN(cvtsd2sh, f2, map5, 5a, el, q, el), INSN(cvtsh2sd, f3, map5, 5a, el, fp16, el), + INSN(cvtsh2si, f3, map5, 2d, el, fp16, el), INSN(cvtsh2ss, , map6, 13, el, fp16, el), + INSN(cvtsh2usi, f3, map5, 79, el, fp16, el), + INSN(cvtsi2sh, f3, map5, 2a, el, dq64, el), INSN(cvtss2sh, , map5, 1d, el, d, el), + INSN(cvttph2dq, f3, map5, 5b, vl_2, fp16, vl), + INSN(cvttph2qq, 66, map5, 7a, vl_4, fp16, vl), + INSN(cvttph2udq, , map5, 78, vl_2, fp16, vl), + INSN(cvttph2uqq, 66, map5, 78, vl_4, fp16, vl), INSN(cvttph2uw, , map5, 7c, vl, fp16, vl), INSN(cvttph2w, 66, map5, 7c, vl, fp16, vl), + INSN(cvttsh2si, f3, map5, 2c, el, fp16, el), + INSN(cvttsh2usi, f3, map5, 78, el, fp16, el), + INSN(cvtudq2ph, f2, map5, 7a, vl, d, vl), + INSN(cvtuqq2ph, f2, map5, 7a, vl, q, vl), + INSN(cvtusi2sh, f3, map5, 7b, el, dq64, el), INSN(cvtuw2ph, f2, map5, 7d, vl, fp16, vl), INSN(cvtw2ph, f3, map5, 7d, vl, fp16, vl), INSN(divph, , map5, 5e, vl, fp16, vl), --- a/tools/tests/x86_emulator/predicates.c +++ b/tools/tests/x86_emulator/predicates.c @@ -2033,6 +2033,9 @@ static const struct evex { { { 0x11 }, 2, T, W, pfx_f3, W0, LIG }, /* vmovsh */ { { 0x1d }, 2, T, R, pfx_66, W0, Ln }, /* vcvtps2phx */ { { 0x1d }, 2, T, R, pfx_no, W0, LIG }, /* vcvtss2sh */ + { { 0x2a }, 2, T, R, pfx_f3, Wn, LIG }, /* vcvtsi2sh */ + { { 0x2c }, 2, T, R, pfx_f3, Wn, LIG }, /* vcvttsh2si */ + { { 0x2d }, 2, T, R, pfx_f3, Wn, LIG }, /* vcvtsh2si */ { { 0x2e }, 2, T, R, pfx_no, W0, LIG }, /* vucomish */ { { 0x2f }, 2, T, R, pfx_no, W0, LIG }, /* vcomish */ { { 0x51 }, 2, T, R, pfx_no, W0, Ln }, /* vsqrtph */ @@ -2045,6 +2048,10 @@ static const struct evex { { { 0x5a }, 2, T, R, pfx_66, W1, Ln }, /* vcvtpd2ph */ { { 0x5a }, 2, T, R, pfx_f3, W0, LIG }, /* vcvtsh2sd */ { { 0x5a }, 2, T, R, pfx_f2, W1, LIG }, /* vcvtsd2sh */ + { { 0x5b }, 2, T, R, pfx_no, W0, Ln }, /* vcvtdq2ph */ + { { 0x5b }, 2, T, R, pfx_no, W1, Ln }, /* vcvtqq2ph */ + { { 0x5b }, 2, T, R, pfx_66, W0, Ln }, /* vcvtph2dq */ + { { 0x5b }, 2, T, R, pfx_f3, W0, Ln }, /* vcvttph2dq */ { { 0x5c }, 2, T, R, pfx_no, W0, Ln }, /* vsubph */ { { 0x5c }, 2, T, R, pfx_f3, W0, LIG }, /* vsubsh */ { { 0x5d }, 2, T, R, pfx_no, W0, Ln }, /* vminph */ @@ -2054,6 +2061,17 @@ static const struct evex { { { 0x5f }, 2, T, R, pfx_no, W0, Ln }, /* vmaxph */ { { 0x5f }, 2, T, R, pfx_f3, W0, LIG }, /* vmaxsh */ { { 0x6e }, 2, T, R, pfx_66, WIG, L0 }, /* vmovw */ + { { 0x78 }, 2, T, R, pfx_no, W0, Ln }, /* vcvttph2udq */ + { { 0x78 }, 2, T, R, pfx_66, W0, Ln }, /* vcvttph2uqq */ + { { 0x78 }, 2, T, R, pfx_f3, Wn, LIG }, /* vcvttsh2usi */ + { { 0x79 }, 2, T, R, pfx_no, W0, Ln }, /* vcvtph2udq */ + { { 0x79 }, 2, T, R, pfx_66, W0, Ln }, /* vcvtph2uqq */ + { { 0x79 }, 2, T, R, pfx_f3, Wn, LIG }, /* vcvtsh2usi */ + { { 0x7a }, 2, T, R, pfx_66, W0, Ln }, /* vcvttph2qq */ + { { 0x7a }, 2, T, R, pfx_f2, W0, Ln }, /* vcvtudq2ph */ + { { 0x7a }, 2, T, R, pfx_f2, W1, Ln }, /* vcvtuqq2ph */ + { { 0x7b }, 2, T, R, pfx_66, W0, Ln }, /* vcvtph2qq */ + { { 0x7b }, 2, T, R, pfx_f3, Wn, LIG }, /* vcvtusi2sh */ { { 0x7c }, 2, T, R, pfx_no, W0, Ln }, /* vcvttph2uw */ { { 0x7c }, 2, T, R, pfx_66, W0, Ln }, /* vcvttph2w */ { { 0x7d }, 2, T, R, pfx_no, W0, Ln }, /* vcvtph2uw */ --- a/xen/arch/x86/x86_emulate/decode.c +++ b/xen/arch/x86/x86_emulate/decode.c @@ -1497,12 +1497,25 @@ int x86emul_decode(struct x86_emulate_st s->simd_size =3D simd_scalar_vexw; break; =20 + case 0x2a: /* vcvtsi2sh */ + break; + + case 0x2c: case 0x2d: /* vcvt{,t}sh2si */ + if ( s->evex.pfx =3D=3D vex_f3 ) + s->fp16 =3D true; + break; + case 0x2e: case 0x2f: /* v{,u}comish */ if ( !s->evex.pfx ) s->fp16 =3D true; s->simd_size =3D simd_none; break; =20 + case 0x5b: /* vcvt{d,q}q2ph, vcvt{,t}ph2dq */ + if ( s->evex.pfx && s->evex.pfx !=3D vex_f2 ) + s->fp16 =3D true; + break; + case 0x6e: /* vmovw r/m16, xmm */ d =3D (d & ~SrcMask) | SrcMem16; /* fall through */ @@ -1512,6 +1525,17 @@ int x86emul_decode(struct x86_emulate_st s->simd_size =3D simd_none; break; =20 + case 0x78: case 0x79: /* vcvt{,t}ph2u{d,q}q, vcvt{,t}sh2usi */ + if ( s->evex.pfx !=3D vex_f2 ) + s->fp16 =3D true; + break; + + case 0x7a: /* vcvttph2qq, vcvtu{d,q}q2ph */ + case 0x7b: /* vcvtph2qq, vcvtusi2sh */ + if ( s->evex.pfx =3D=3D vex_66 ) + s->fp16 =3D true; + break; + case 0x7c: /* vcvttph2{,u}w */ case 0x7d: /* vcvtph2{,u}w / vcvt{,u}w2ph */ d =3D DstReg | SrcMem | TwoOp; @@ -1524,10 +1548,34 @@ int x86emul_decode(struct x86_emulate_st =20 switch ( b ) { + case 0x78: + case 0x79: + /* vcvt{,t}ph2u{d,q}q need special casing */ + if ( s->evex.pfx <=3D vex_66 ) + { + if ( !s->evex.brs ) + disp8scale -=3D 1 + (s->evex.pfx =3D=3D vex_66); + break; + } + /* vcvt{,t}sh2usi needs special casing: fall through */ + case 0x2c: case 0x2d: /* vcvt{,t}sh2si need special casing */ + disp8scale =3D 1; + break; + case 0x5a: /* vcvtph2pd needs special casing */ if ( !s->evex.pfx && !s->evex.brs ) disp8scale -=3D 2; break; + + case 0x5b: /* vcvt{,t}ph2dq need special casing */ + if ( s->evex.pfx && !s->evex.brs ) + --disp8scale; + break; + + case 0x7a: case 0x7b: /* vcvt{,t}ph2qq need special casing */ + if ( s->evex.pfx =3D=3D vex_66 && !s->evex.brs ) + disp8scale =3D s->evex.brs ? 1 : 2 + s->evex.lr; + break; } =20 break; --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -3577,6 +3577,12 @@ x86_emulate( state->simd_size =3D simd_none; goto simd_0f_rm; =20 +#ifndef X86EMUL_NO_SIMD + + case X86EMUL_OPC_EVEX_F3(5, 0x2a): /* vcvtsi2sh r/m,xmm,xmm */ + case X86EMUL_OPC_EVEX_F3(5, 0x7b): /* vcvtusi2sh r/m,xmm,xmm */ + host_and_vcpu_must_have(avx512_fp16); + /* fall through */ CASE_SIMD_SCALAR_FP(_EVEX, 0x0f, 0x2a): /* vcvtsi2s{s,d} r/m,xmm,xmm */ CASE_SIMD_SCALAR_FP(_EVEX, 0x0f, 0x7b): /* vcvtusi2s{s,d} r/m,xmm,xmm = */ generate_exception_if(evex.opmsk || (ea.type !=3D OP_REG && evex.b= rs), @@ -3655,7 +3661,9 @@ x86_emulate( opc[1] =3D 0x01; =20 rc =3D ops->read(ea.mem.seg, ea.mem.off, mmvalp, - vex.pfx & VEX_PREFIX_DOUBLE_MASK ? 8 : 4, ctxt); + vex.pfx & VEX_PREFIX_DOUBLE_MASK + ? 8 : 2 << !state->fp16, + ctxt); if ( rc !=3D X86EMUL_OKAY ) goto done; } @@ -3685,6 +3693,12 @@ x86_emulate( state->simd_size =3D simd_none; break; =20 + case X86EMUL_OPC_EVEX_F3(5, 0x2c): /* vcvttsh2si xmm/mem,reg */ + case X86EMUL_OPC_EVEX_F3(5, 0x2d): /* vcvtsh2si xmm/mem,reg */ + case X86EMUL_OPC_EVEX_F3(5, 0x78): /* vcvttsh2usi xmm/mem,reg */ + case X86EMUL_OPC_EVEX_F3(5, 0x79): /* vcvtsh2usi xmm/mem,reg */ + host_and_vcpu_must_have(avx512_fp16); + /* fall through */ CASE_SIMD_SCALAR_FP(_EVEX, 0x0f, 0x2c): /* vcvtts{s,d}2si xmm/mem,reg = */ CASE_SIMD_SCALAR_FP(_EVEX, 0x0f, 0x2d): /* vcvts{s,d}2si xmm/mem,reg */ CASE_SIMD_SCALAR_FP(_EVEX, 0x0f, 0x78): /* vcvtts{s,d}2usi xmm/mem,reg= */ @@ -3756,8 +3770,6 @@ x86_emulate( ASSERT(!state->simd_size); break; =20 -#ifndef X86EMUL_NO_SIMD - case X86EMUL_OPC_EVEX(5, 0x2e): /* vucomish xmm/m16,xmm */ case X86EMUL_OPC_EVEX(5, 0x2f): /* vcomish xmm/m16,xmm */ host_and_vcpu_must_have(avx512_fp16); @@ -7787,6 +7799,38 @@ x86_emulate( 2 * evex.w); goto avx512f_all_fp; =20 + case X86EMUL_OPC_EVEX (5, 0x5b): /* vcvtdq2ph [xyz]mm/mem,[xy]mm{k} = */ + /* vcvtqq2ph [xyz]mm/mem,xmm{k} */ + case X86EMUL_OPC_EVEX_F2(5, 0x7a): /* vcvtudq2ph [xyz]mm/mem,[xy]mm{k}= */ + /* vcvtuqq2ph [xyz]mm/mem,xmm{k} */ + host_and_vcpu_must_have(avx512_fp16); + if ( ea.type !=3D OP_REG || !evex.brs ) + avx512_vlen_check(false); + op_bytes =3D 16 << evex.lr; + goto simd_zmm; + + case X86EMUL_OPC_EVEX_66(5, 0x5b): /* vcvtph2dq [xy]mm/mem,[xyz]mm{k} = */ + case X86EMUL_OPC_EVEX_F3(5, 0x5b): /* vcvttph2dq [xy]mm/mem,[xyz]mm{k}= */ + case X86EMUL_OPC_EVEX (5, 0x78): /* vcvttph2udq [xy]mm/mem,[xyz]mm{k= } */ + case X86EMUL_OPC_EVEX (5, 0x79): /* vcvtph2udq [xy]mm/mem,[xyz]mm{k}= */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + if ( ea.type !=3D OP_REG || !evex.brs ) + avx512_vlen_check(false); + op_bytes =3D 8 << evex.lr; + goto simd_zmm; + + case X86EMUL_OPC_EVEX_66(5, 0x78): /* vcvttph2uqq xmm/mem,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(5, 0x79): /* vcvtph2uqq xmm/mem,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(5, 0x7a): /* vcvttph2qq xmm/mem,[xyz]mm{k} */ + case X86EMUL_OPC_EVEX_66(5, 0x7b): /* vcvtph2qq xmm/mem,[xyz]mm{k} */ + host_and_vcpu_must_have(avx512_fp16); + generate_exception_if(evex.w, EXC_UD); + if ( ea.type !=3D OP_REG || !evex.brs ) + avx512_vlen_check(false); + op_bytes =3D 4 << (evex.w + evex.lr); + goto simd_zmm; + case X86EMUL_OPC_EVEX (5, 0x7c): /* vcvttph2uw [xyz]mm/mem,[xyz]mm{k= } */ case X86EMUL_OPC_EVEX_66(5, 0x7c): /* vcvttph2w [xyz]mm/mem,[xyz]mm{k}= */ case X86EMUL_OPC_EVEX (5, 0x7d): /* vcvtph2uw [xyz]mm/mem,[xyz]mm{k}= */ From nobody Thu May 16 00:37:34 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass(p=quarantine dis=none) header.from=suse.com ARC-Seal: i=2; a=rsa-sha256; t=1680534079; cv=pass; d=zohomail.com; s=zohoarc; b=dkIj/l58NOK6uPqJfJjqZiAcSJ/pYSXARQVjL7It177VHBOnwHWYP47wr8YK/8gKaIAs1+LGJMRj4dzipjwh1Ud9Y3/W7/8/G35rQfzGEHSoY1h7cYeol0dKy7Xt87OpqHXB6mFFeQb+lCiIyNz8B7c2TOA+hYQ/7T3Oa20CMMQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680534079; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CgoSFervzIjjTk4kgA6M9gpJ9SnSpxmSSPmQCBqoFvA=; b=Jcj+yTDTWIQsrUswQlSPKvtq1TGh99/oIHk9ekkrVr29qXBtRzUhv89lwahKG4ytxYe5vEyxymCaL/5qZo3PX9SWGnqHhCYi3ogI01/KOakCmfhyEEkXG2vasGXpX6nOpph5JE6OUp+W1CpL4pQBV/aap7JXfdRZvjB6k3t5n0w= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; arc=pass (i=1 dmarc=pass fromdomain=suse.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680534079195853.6401010562937; Mon, 3 Apr 2023 08:01:19 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.517509.802938 (Exim 4.92) (envelope-from ) id 1pjLfr-0003ea-LR; Mon, 03 Apr 2023 15:00:47 +0000 Received: by outflank-mailman (output) from mailman id 517509.802938; Mon, 03 Apr 2023 15:00:47 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLfr-0003eT-Ib; Mon, 03 Apr 2023 15:00:47 +0000 Received: by outflank-mailman (input) for mailman id 517509; Mon, 03 Apr 2023 15:00:46 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1pjLfq-0003d2-Jv for xen-devel@lists.xenproject.org; Mon, 03 Apr 2023 15:00:46 +0000 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20622.outbound.protection.outlook.com [2a01:111:f400:7d00::622]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 4e2cef8b-d230-11ed-b464-930f4c7d94ae; Mon, 03 Apr 2023 17:00:43 +0200 (CEST) Received: from VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) by AS5PR04MB10044.eurprd04.prod.outlook.com (2603:10a6:20b:682::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6254.30; Mon, 3 Apr 2023 15:00:41 +0000 Received: from VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b]) by VE1PR04MB6560.eurprd04.prod.outlook.com ([fe80::154e:166d:ec25:531b%6]) with mapi id 15.20.6254.033; Mon, 3 Apr 2023 15:00:41 +0000 X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4e2cef8b-d230-11ed-b464-930f4c7d94ae ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RnPvN30IJwsMdCvvKw77CHul+ofAp0MqjFkvQ4SIWooEZ9JnR25NquYi7FPRT23gyMmOgT6EojEiq+M+Szuo5+a30A/Oc8GfcdoHSmT6Mtbnw/7jxRbtjNJzbl9NyYxygR3M5/M9+ekNbJWxIP/wCms+lYfuPT3JIdrayVRb2oM/KEkeNF+MPm1XttcysBxkg64hQKaVsTPEBrj7ahmDnVkCeMP+Qzcatp7aQGz7/4p+D3TyNBbLuuVZe2szvyFMqwqxAYRS1xm0wrHBR0BmCqCLXairuqPnUP8y2TqBFyXUE69UDCzLL5MzE0xkmW8MV8W4zrR1GhwFt6pibDX1EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=CgoSFervzIjjTk4kgA6M9gpJ9SnSpxmSSPmQCBqoFvA=; b=kcz35wr+aH3U5KG99mOoNcJm9qjpZXECZdO1DVRpjT96ZP4Lju7OSJiHKBue/W3gRykxV2LOHISgLt4BZT/1f8pA0O+HRGS68lhpekUSXkjveJT5kDrKIUwoNOai3KQ1BUshGuZ+5Ln0ymEnQe68Ij+7bSlDrNhQmg+dICbyrgWqK3bkFZmay45QCbGQNVQjpvL4NarT2jnAsbow6vHaHFB7OPHb3qwrORtTlRAxcBzomBntcYtPE7pjje5WpSykX7mLVqve8r58YP0YROrcZ8kYkM2fWPFBbeMN0KUCUhKxn2k+dnyrXu4+r7wXUHPb9VMIjslbdda0eh2UjY9D7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=CgoSFervzIjjTk4kgA6M9gpJ9SnSpxmSSPmQCBqoFvA=; b=VUuIGZ3Kc1qTpyENUmczt3n1Mjft9CDOklqzlQt1a7SVwPmURgjNqvfcFR1iUrfeUvaqTvDRzAJ2Kl5HZA8lHtOYQS/g37T8w2AUw86pY00aOMG6PIUlX/p0Z9fmmoTJZXWJ7HQdeEzOv0kqcHwBdqlDnU7hn6WfQzeaZXWTvlqXIp6Kjhjjh3r/iEGUtpz2JYMCFmJrD49sQvhbgS2h7MD4rL2IY7obOTdpgDR+KWhxydlhNt92B+4cvpfdAa776czHXgJKOvneiuwvhk5YvykkbgKULWTBCmMoJNNZLSzFURnbQaRgnGC7NlbCdGSzx24QmvAuloKFyDXH1g3LnA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com; Message-ID: Date: Mon, 3 Apr 2023 17:00:39 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: [PATCH v2 10/10] x86emul: AVX512-FP16 testing Content-Language: en-US From: Jan Beulich To: "xen-devel@lists.xenproject.org" Cc: Andrew Cooper , Wei Liu , =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= References: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> In-Reply-To: <8cbbab55-d670-5632-30ee-3e8ca352f048@suse.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: FR0P281CA0088.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1e::8) To VE1PR04MB6560.eurprd04.prod.outlook.com (2603:10a6:803:122::25) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VE1PR04MB6560:EE_|AS5PR04MB10044:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a215608-475f-4f7a-ae96-08db34543140 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ++fwElJb+x3GM0AJnO9BUVl1HXTKb/TFQd7fXUOoaXHjhFZ7RDQDnsxf8E2oWngIemMux6l167LldBpXIrTZy6EK225BNQnC8vDjOr376O1+ggvWK9a9waFzmffzrbrrWM6rtNBDWDNXPgtk2N1999VI3xG9YO3EBN+m2TSPFOdrwSH8TJXTYOTonre1vkX3VqyXoJCbvUeUF0Cu4kln01xZ44yDCkcD2h1WJOVmh16+n0vZymBS8owSTfJa+0nMnnhPDAWvArgDK33utiDxKKDkJjng9yMwLnAdMLBNl8PhQc0vCSP6xYxD7ykkUSQiegl64UuV2eZbJanmNwL5WUmI6YH2akCvwnJoYTBxRe50pJoPEEo751lwbH7w/nC2sEZ3ToEsU6N/GzViiPfLNkH5jMCrFZkqcEX50pTQtstNIc7tZSKKEpHbI7IVkRfkFfGf9He+pC2aBiKPrOqLTcwN/qroYpet1sWB1t4VeSc6b1bVHWvdIRm/elP8187UO1XpEo0xmAvwbyxAOvFUK+iRFU37FGHi9IHc4ODSAN4hnRLT1dtYRmraO6HP+E5RiXR+kUzDIjCRS8gBL3D5LLyhd27voLA6hY7JB/xEZLPeWaG42tPSd1h+K6JYrzYMO47/AIg2k7d1AcxFj9W1Pg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VE1PR04MB6560.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(396003)(39860400002)(366004)(376002)(346002)(136003)(451199021)(186003)(54906003)(2616005)(478600001)(6486002)(6512007)(6506007)(26005)(2906002)(4001150100001)(36756003)(66946007)(66556008)(8936002)(66476007)(41300700001)(38100700002)(4326008)(31686004)(8676002)(6916009)(30864003)(83380400001)(316002)(86362001)(31696002)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TGtqWVIzM040N2JnbXkyellLYlArQWVZdzhDWHhvZDVNUGJ6S1E3RGwzczMw?= =?utf-8?B?ODEvS2JHL2FXN2FVMm0rOTdUWllybHZuVlVEc0pScmhsVzVDVjZIejV2Mm4v?= =?utf-8?B?M1lGcXNvWmdsZUhGYXFxZjFsYUpLQlFkN2FSQjdMN3FFd2ZDUGdLMEw1SzNq?= =?utf-8?B?Y015ZlpkcG15cGUyc2p1TWppdU5rZk5VNkgzRllHa1B3aEUreVlGd1hmTEx3?= =?utf-8?B?MWtnVE1UdGdqMS9VUDZrbDNSM3A5LzFPMThpUXRQdHN1YlZCRVVHd1ludkx2?= =?utf-8?B?TTZrbldTNkVMV3o3a1V4ekEyUVZOb1Njc0N1UTdWWWdJSVZMUkNvdEd3ZXo3?= =?utf-8?B?ci9EVXI1Z1U1QVllaC8welBuNEZ3RUYxK3JqU3VhUGUvU01MYXo3YWRsdmc3?= =?utf-8?B?djRDNEZzVHRZNkhzY1ZGRUFzQ29taUc3NXljRnU5bWpDZ0dCWXlaYkRNOERt?= =?utf-8?B?Z0h6WmJQSEhtbG1jRFN0TGpVV25IaWVjY0hkWTR6MGJ4YU5oTHk0ZGFWNS9z?= =?utf-8?B?QTRrekJ6RTd6ZXVVMVI4clo3RndMeW56bGV0Z0FPeDBpdkVvMlJNMEVUdGl2?= =?utf-8?B?Vzc4UjQ1OE9pMGRTUXgrdjlUR24yN0hveEVIMGljeW1raTNaa3YyVWx6R1pI?= =?utf-8?B?eENMdnJ0SHFQOGVzYjZENmRpVk90aVAycWlMS0xPbHo0MUFaZUJLTnVXNHNz?= =?utf-8?B?d3BTVFFuRXZ6S3J0dGZLenEwN2dWY0NoK2YwS0RnckxtdzdOenF6ckFKZHha?= =?utf-8?B?ZTJwaVBBa0hOYjlGeHhCUHFEeGQ3MzJ0dTNzM3o2Qm5Ua2UrdUZ2bVVGOC95?= =?utf-8?B?ZnNKKy9BdE9GTTkwVmtrazFyK09vSk41Z3BmRXZlRWZVY0EvV0w4bG9oemR5?= =?utf-8?B?eE1ORVRad29mNGJwMENsNU13TDlWWk5teUJnaDkvQk9aRUp4TFozQzBMbDcy?= =?utf-8?B?eUVRcFhuNmt4RWRrbTdGSUV5VWxiK1E3UGt4NkVkMkpMczBzTmxWd2FEdXRY?= =?utf-8?B?L3JIU21aWmVTdk5aT1QrK3U3Mi9KMnpNVmdIOWNuRUlhemxaSmZ4Ui9lS2tF?= =?utf-8?B?YnkrTHVEelBPaGdhL1htR3VBU1lyeU15M1c4K2tQdUJvNmh2em0wN3hSNS8v?= =?utf-8?B?WnhtNlhhQkQyRWhLRmpIVWV3b2xzb2J0dkYrYkZqR1Z4dnYvYm52d0hBdFVj?= =?utf-8?B?OVd6OVAwQVdYYjFlOWloZzkvTzhiajF4UkY5ZWlmWDc2aDZHRE5LZ2xvdzRW?= =?utf-8?B?c1I0dzlkTHV4Z3pDaEtRbHBVbVZrcWhmODZLQW9vbmZuZU9XNUx4KzMwcDFs?= =?utf-8?B?Q3FLQ1gxZ2lOd25ERk5Tdm1FTUVpaGwzNW1Zc2o2dEhJN25NL1hCbElJTlZ3?= =?utf-8?B?Q1JQTHcwcURBQmtjYXMzanp6ZEJtbm1kSXBONHNrQnR1cWJ2OG9STjE3Q2xI?= =?utf-8?B?aElEZmQrT3BUNmFDVmd4d1VRNW5iUHBCbCt2M096QnhvWlpWSnE2cEQ1cXZB?= =?utf-8?B?aWFvUE5KZ3BvelhRYjVjNkpWMlBuZU5VcmcwT0JFd05tSUhuZW83S3VEcXlx?= =?utf-8?B?OGFmeHFmV3NZSTJQaUNHaEV4Z0RRR0haYndEcU9MN1VzU0c3ZEZPZzVxYXVv?= =?utf-8?B?anJVTTJMRGkveUVoajZaQjNSVzZ0UDd5L0dKV1ltK1B1dU01RGRPamlzeFY4?= =?utf-8?B?NU5VQzY2K1pyVWNxclNRdUdKSzNoRFdUMnorQnJUSW5wUVNldmdXMm9xUUUw?= =?utf-8?B?SGtzSmF2ZzRFYmtwSDZJQjZrRFNhSUgxSHNLTkpuc1dOQlhwM1YyMTUxLytD?= =?utf-8?B?aGVpWm9QWFEwMDJXUHhTYVlVRlZ0QWw5bDYreVRKK3BnL1BoKy8rdFMwQU1k?= =?utf-8?B?c3NROUhhNjB5ekMwcW9nMmZCeU1GOTlxd0JUOVJDTTh4NjNmeEh3b05zNmlG?= =?utf-8?B?VFpsZG9HYUpCQk92VGUvRy9hcW91VXZNSEx3M3YwZkhnTWYzRHF5NUpjKzhQ?= =?utf-8?B?dlp2YWJNaHROdUJ3bVRKaVo4NnFOdlpxMTJCVmlXZDd0S2JaSGJKQWZWTUFl?= =?utf-8?B?dVJ6b0RNNE5Yc0U5OTFtM3psOXRXWkZmazRrbFZ2cGd0SXdKVnFlVjB2ZjJL?= =?utf-8?Q?VTJfJtjj3jeH9AApOmOdHQ4IQ?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5a215608-475f-4f7a-ae96-08db34543140 X-MS-Exchange-CrossTenant-AuthSource: VE1PR04MB6560.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Apr 2023 15:00:41.2832 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yfFTHl4vAAfPD3HNgiQV/C5iny/iE1CwxemGnCc6KO4pMCA2DyUUsZOMtE0r8/e2G6aH1Mh74UdlKWRxa0aFGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS5PR04MB10044 X-ZohoMail-DKIM: pass (identity @suse.com) X-ZM-MESSAGEID: 1680534081297100001 Naming of some of the builtins isn't fully consistent with that of pre- existing ones, so there's a need for a new BR2() wrapper macro. With the tests providing some proof of proper functioning of the emulator code also enable use of the feature by guests, as there's no other infrastructure involved in enabling this ISA extension. Signed-off-by: Jan Beulich Acked-by: Henry Wang # CHANGELOG --- v2: Add CHANGELOG.md entry. --- This is Acked-by: Andrew Cooper under the condition that public/arch-x86/cpufeatureset.h use 'a', not 'A'. But I was putting this under question, so far without further response. --- SDE: -spr or -future --- In the course of putting together the FMA part of the test I had noticed that we no longer tested scalar FMA insns (FMA, FMA4, AVX512F), due to gcc (then) no longer recognizing the pattern in version 9 or later. See gcc bug 105965, which apparently has already gained a fix for version 13. (Using intrinsics for scalar operations is prohibitive, as they have full-vector parameters.) I'm taking this as one of several reasons why here I'm not even trying to make the compiler spot the complex FMA patterns, using a mixture of intrinsics and inline assembly instead. --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ The format is based on [Keep a Changelog - Bus-lock detection, used by Xen to mitigate (by rate-limiting) the sy= stem wide impact of a guest misusing atomic instructions. - xl/libxl can customize SMBIOS strings for HVM guests. + - x86 AVX512-FP16 =20 ## [4.17.0](https://xenbits.xen.org/gitweb/?p=3Dxen.git;a=3Dshortlog;h=3DR= ELEASE-4.17.0) - 2022-12-12 =20 --- a/tools/tests/x86_emulator/Makefile +++ b/tools/tests/x86_emulator/Makefile @@ -16,7 +16,7 @@ vpath %.c $(XEN_ROOT)/xen/lib/x86 =20 CFLAGS +=3D $(CFLAGS_xeninclude) =20 -SIMD :=3D 3dnow sse sse2 sse4 avx avx2 xop avx512f avx512bw avx512dq avx51= 2er avx512vbmi +SIMD :=3D 3dnow sse sse2 sse4 avx avx2 xop avx512f avx512bw avx512dq avx51= 2er avx512vbmi avx512fp16 FMA :=3D fma4 fma SG :=3D avx2-sg avx512f-sg avx512vl-sg AES :=3D ssse3-aes avx-aes avx2-vaes avx512bw-vaes @@ -91,6 +91,9 @@ avx512vbmi-vecs :=3D $(avx512bw-vecs) avx512vbmi-ints :=3D $(avx512bw-ints) avx512vbmi-flts :=3D $(avx512bw-flts) avx512vbmi2-vecs :=3D $(avx512bw-vecs) +avx512fp16-vecs :=3D $(avx512bw-vecs) +avx512fp16-ints :=3D +avx512fp16-flts :=3D 2 =20 avx512f-opmask-vecs :=3D 2 avx512dq-opmask-vecs :=3D 1 2 @@ -246,7 +249,7 @@ $(addsuffix .c,$(GF)): =20 $(addsuffix .h,$(SIMD) $(FMA) $(SG) $(AES) $(CLMUL) $(SHA) $(GF)): simd.h =20 -xop.h avx512f.h: simd-fma.c +xop.h avx512f.h avx512fp16.h: simd-fma.c =20 endif # 32-bit override =20 --- a/tools/tests/x86_emulator/simd.c +++ b/tools/tests/x86_emulator/simd.c @@ -20,6 +20,14 @@ ENTRY(simd_test); asm ( "vcmpsd $0, %1, %2, %0" : "=3Dk" (r_) : "m" (x_), "v" (y_) ); \ r_ =3D=3D 1; \ }) +# elif VEC_SIZE =3D=3D 2 +# define eq(x, y) ({ \ + _Float16 x_ =3D (x)[0]; \ + _Float16 __attribute__((vector_size(16))) y_ =3D { (y)[0] }; \ + unsigned int r_; \ + asm ( "vcmpsh $0, %1, %2, %0" : "=3Dk" (r_) : "m" (x_), "v" (y_) ); \ + r_ =3D=3D 1; \ +}) # elif FLOAT_SIZE =3D=3D 4 /* * gcc's (up to at least 8.2) __builtin_ia32_cmpps256_mask() has an anomal= y in @@ -31,6 +39,8 @@ ENTRY(simd_test); # define eq(x, y) ((BR(cmpps, _mask, x, y, 0, -1) & ALL_TRUE) =3D=3D ALL_= TRUE) # elif FLOAT_SIZE =3D=3D 8 # define eq(x, y) (BR(cmppd, _mask, x, y, 0, -1) =3D=3D ALL_TRUE) +# elif FLOAT_SIZE =3D=3D 2 +# define eq(x, y) (B(cmpph, _mask, x, y, 0, -1) =3D=3D ALL_TRUE) # elif (INT_SIZE =3D=3D 1 || UINT_SIZE =3D=3D 1) && defined(__AVX512BW__) # define eq(x, y) (B(pcmpeqb, _mask, (vqi_t)(x), (vqi_t)(y), -1) =3D=3D A= LL_TRUE) # elif (INT_SIZE =3D=3D 2 || UINT_SIZE =3D=3D 2) && defined(__AVX512BW__) @@ -116,6 +126,14 @@ static inline bool _to_bool(byte_vec_t b asm ( "vcvtusi2sd%z1 %1, %0, %0" : "=3Dv" (t_) : "m" (u_) ); \ (vec_t){ t_[0] }; \ }) +# elif FLOAT_SIZE =3D=3D 2 +# define to_u_int(type, x) ({ \ + unsigned type u_; \ + _Float16 __attribute__((vector_size(16))) t_; \ + asm ( "vcvtsh2usi %1, %0" : "=3Dr" (u_) : "m" ((x)[0]) ); \ + asm ( "vcvtusi2sh%z1 %1, %0, %0" : "=3Dv" (t_) : "m" (u_) ); \ + (vec_t){ t_[0] }; \ +}) # endif # define to_uint(x) to_u_int(int, x) # ifdef __x86_64__ @@ -153,6 +171,43 @@ static inline bool _to_bool(byte_vec_t b # define to_wint(x) BR(cvtqq2pd, _mask, BR(cvtpd2qq, _mask, x, (vdi_t)un= def(), ~0), undef(), ~0) # define to_uwint(x) BR(cvtuqq2pd, _mask, BR(cvtpd2uqq, _mask, x, (vdi_t= )undef(), ~0), undef(), ~0) # endif +# elif FLOAT_SIZE =3D=3D 2 +# define to_int(x) BR2(vcvtw2ph, _mask, BR2(vcvtph2w, _mask, x, (vhi_t)un= def(), ~0), undef(), ~0) +# define to_uint(x) BR2(vcvtuw2ph, _mask, BR2(vcvtph2uw, _mask, x, (vhi_t= )undef(), ~0), undef(), ~0) +# if VEC_SIZE =3D=3D 16 +# define low_half(x) (x) +# define high_half(x) ((vec_t)B_(movhlps, , (vsf_t)undef(), (vsf_t)(x))) +# define insert_half(x, y, p) ((vec_t)((p) ? B_(movlhps, , (vsf_t)(x), (= vsf_t)(y)) \ + : B_(shufps, , (vsf_t)(y), (v= sf_t)(x), 0b11100100))) +# elif VEC_SIZE =3D=3D 32 +# define _half(x, lh) ((vhf_half_t)B(extracti32x4_, _mask, (vsi_t)(x), l= h, (vsi_half_t){}, ~0)) +# define low_half(x) _half(x, 0) +# define high_half(x) _half(x, 1) +# define insert_half(x, y, p) \ + ((vec_t)B(inserti32x4_, _mask, (vsi_t)(x), (vsi_half_t)(y), p, (vsi_t)= undef(), ~0)) +# elif VEC_SIZE =3D=3D 64 +# define _half(x, lh) \ + ((vhf_half_t)__builtin_ia32_extracti64x4_mask((vdi_t)(x), lh, (vdi_hal= f_t){}, ~0)) +# define low_half(x) _half(x, 0) +# define high_half(x) _half(x, 1) +# define insert_half(x, y, p) \ + ((vec_t)__builtin_ia32_inserti64x4_mask((vdi_t)(x), (vdi_half_t)(y), p= , (vdi_t)undef(), ~0)) +# endif +# define to_w_int(x, s) ({ \ + vhf_half_t t_ =3D low_half(x); \ + vsi_t lo_, hi_; \ + touch(t_); \ + lo_ =3D BR2(vcvtph2 ## s ## dq, _mask, t_, (vsi_t)undef(), ~0); \ + t_ =3D high_half(x); \ + touch(t_); \ + hi_ =3D BR2(vcvtph2 ## s ## dq, _mask, t_, (vsi_t)undef(), ~0); \ + touch(lo_); touch(hi_); \ + insert_half(insert_half(undef(), \ + BR2(vcvt ## s ## dq2ph, _mask, lo_, (vhf_half_= t){}, ~0), 0), \ + BR2(vcvt ## s ## dq2ph, _mask, hi_, (vhf_half_t){}, ~0), 1= ); \ +}) +# define to_wint(x) to_w_int(x, ) +# define to_uwint(x) to_w_int(x, u) # endif #elif VEC_SIZE =3D=3D 16 && defined(__SSE2__) # if FLOAT_SIZE =3D=3D 4 @@ -240,10 +295,18 @@ static inline vec_t movlhps(vec_t x, vec # define scale(x, y) scalar_2op(x, y, "vscalefsd %[in2], %[in1], %[out]") # define sqrt(x) scalar_1op(x, "vsqrtsd %[in], %[out], %[out]") # define trunc(x) scalar_1op(x, "vrndscalesd $0b1011, %[in], %[out], %[ou= t]") +# elif FLOAT_SIZE =3D=3D 2 +# define getexp(x) scalar_1op(x, "vgetexpsh %[in], %[out], %[out]") +# define getmant(x) scalar_1op(x, "vgetmantsh $0, %[in], %[out], %[out]") +# define recip(x) scalar_1op(x, "vrcpsh %[in], %[out], %[out]") +# define rsqrt(x) scalar_1op(x, "vrsqrtsh %[in], %[out], %[out]") +# define scale(x, y) scalar_2op(x, y, "vscalefsh %[in2], %[in1], %[out]") +# define sqrt(x) scalar_1op(x, "vsqrtsh %[in], %[out], %[out]") +# define trunc(x) scalar_1op(x, "vrndscalesh $0b1011, %[in], %[out], %[ou= t]") # endif #elif defined(FLOAT_SIZE) && defined(__AVX512F__) && \ (VEC_SIZE =3D=3D 64 || defined(__AVX512VL__)) -# if ELEM_COUNT =3D=3D 8 /* vextractf{32,64}x4 */ || \ +# if (ELEM_COUNT =3D=3D 8 && ELEM_SIZE >=3D 4) /* vextractf{32,64}x4 */ ||= \ (ELEM_COUNT =3D=3D 16 && ELEM_SIZE =3D=3D 4 && defined(__AVX512DQ__))= /* vextractf32x8 */ || \ (ELEM_COUNT =3D=3D 4 && ELEM_SIZE =3D=3D 8 && defined(__AVX512DQ__)) = /* vextractf64x2 */ # define _half(x, lh) ({ \ @@ -398,6 +461,21 @@ static inline vec_t movlhps(vec_t x, vec VEC_SIZE =3D=3D 32 ? 0b01 : 0b00011011, undef(), = ~0), \ 0b01010101, undef(), ~0) # endif +# elif FLOAT_SIZE =3D=3D 2 +# define frac(x) BR2(reduceph, _mask, x, 0b00001011, undef(), ~0) +# define getexp(x) BR(getexpph, _mask, x, undef(), ~0) +# define getmant(x) BR(getmantph, _mask, x, 0, undef(), ~0) +# define max(x, y) BR2(maxph, _mask, x, y, undef(), ~0) +# define min(x, y) BR2(minph, _mask, x, y, undef(), ~0) +# define scale(x, y) BR2(scalefph, _mask, x, y, undef(), ~0) +# define recip(x) B(rcpph, _mask, x, undef(), ~0) +# define rsqrt(x) B(rsqrtph, _mask, x, undef(), ~0) +# define shrink1(x) BR2(vcvtps2phx, _mask, (vsf_t)(x), (vhf_half_t){}, ~0) +# define shrink2(x) BR2(vcvtpd2ph, _mask, (vdf_t)(x), (vhf_quarter_t){}, = ~0) +# define sqrt(x) BR2(sqrtph, _mask, x, undef(), ~0) +# define trunc(x) BR2(rndscaleph, _mask, x, 0b1011, undef(), ~0) +# define widen1(x) ((vec_t)BR2(vcvtph2psx, _mask, x, (vsf_t)undef(), ~0)) +# define widen2(x) ((vec_t)BR2(vcvtph2pd, _mask, x, (vdf_t)undef(), ~0)) # endif #elif FLOAT_SIZE =3D=3D 4 && defined(__SSE__) # if VEC_SIZE =3D=3D 32 && defined(__AVX__) @@ -920,6 +998,16 @@ static inline vec_t movlhps(vec_t x, vec # define dup_lo(x) B(movddup, _mask, x, undef(), ~0) # endif #endif +#if FLOAT_SIZE =3D=3D 2 && ELEM_COUNT > 1 +# define dup_hi(x) ((vec_t)B(pshufhw, _mask, \ + B(pshuflw, _mask, (vhi_t)(x), 0b11110101, \ + (vhi_t)undef(), ~0), \ + 0b11110101, (vhi_t)undef(), ~0)) +# define dup_lo(x) ((vec_t)B(pshufhw, _mask, \ + B(pshuflw, _mask, (vhi_t)(x), 0b10100000, \ + (vhi_t)undef(), ~0), \ + 0b10100000, (vhi_t)undef(), ~0)) +#endif #if VEC_SIZE =3D=3D 16 && defined(__SSSE3__) && !defined(__AVX512VL__) # if INT_SIZE =3D=3D 1 # define abs(x) ((vec_t)__builtin_ia32_pabsb128((vqi_t)(x))) --- a/tools/tests/x86_emulator/simd.h +++ b/tools/tests/x86_emulator/simd.h @@ -53,6 +53,9 @@ float # elif FLOAT_SIZE =3D=3D 8 # define MODE DF # define ELEM_SFX "d" +# elif FLOAT_SIZE =3D=3D 2 +# define MODE HF +# define ELEM_SFX "h" # endif #endif #ifndef VEC_SIZE @@ -67,7 +70,10 @@ typedef unsigned int __attribute__((mode /* Various builtins want plain char / int / long long vector types ... */ typedef char __attribute__((vector_size(VEC_SIZE))) vqi_t; typedef short __attribute__((vector_size(VEC_SIZE))) vhi_t; +#if VEC_SIZE >=3D 4 typedef int __attribute__((vector_size(VEC_SIZE))) vsi_t; +typedef float __attribute__((vector_size(VEC_SIZE))) vsf_t; +#endif #if VEC_SIZE >=3D 8 typedef long long __attribute__((vector_size(VEC_SIZE))) vdi_t; typedef double __attribute__((vector_size(VEC_SIZE))) vdf_t; @@ -96,6 +102,9 @@ typedef char __attribute__((vector_size( typedef short __attribute__((vector_size(HALF_SIZE))) vhi_half_t; typedef int __attribute__((vector_size(HALF_SIZE))) vsi_half_t; typedef long long __attribute__((vector_size(HALF_SIZE))) vdi_half_t; +#ifdef __AVX512FP16__ +typedef _Float16 __attribute__((vector_size(HALF_SIZE))) vhf_half_t; +#endif typedef float __attribute__((vector_size(HALF_SIZE))) vsf_half_t; # endif =20 @@ -110,6 +119,9 @@ typedef char __attribute__((vector_size( typedef short __attribute__((vector_size(QUARTER_SIZE))) vhi_quarter_t; typedef int __attribute__((vector_size(QUARTER_SIZE))) vsi_quarter_t; typedef long long __attribute__((vector_size(QUARTER_SIZE))) vdi_quarter_t; +#ifdef __AVX512FP16__ +typedef _Float16 __attribute__((vector_size(QUARTER_SIZE))) vhf_quarter_t; +#endif # endif =20 # if ELEM_COUNT >=3D 8 @@ -163,6 +175,7 @@ DECL_OCTET(half); #elif VEC_SIZE =3D=3D 64 # define B(n, s, a...) __builtin_ia32_ ## n ## 512 ## s(a) # define BR(n, s, a...) __builtin_ia32_ ## n ## 512 ## s(a, 4) +# define BR2(n, s, a...) __builtin_ia32_ ## n ## 512 ## s ## _round(a, 4) #endif #ifndef B_ # define B_ B @@ -171,6 +184,9 @@ DECL_OCTET(half); # define BR B # define BR_ B_ #endif +#ifndef BR2 +# define BR2 BR +#endif #ifndef BR_ # define BR_ BR #endif --- a/tools/tests/x86_emulator/simd-fma.c +++ b/tools/tests/x86_emulator/simd-fma.c @@ -28,6 +28,8 @@ ENTRY(fma_test); # define fmaddsub(x, y, z) BR(vfmaddsubps, _mask, x, y, z, ~0) # elif FLOAT_SIZE =3D=3D 8 # define fmaddsub(x, y, z) BR(vfmaddsubpd, _mask, x, y, z, ~0) +# elif FLOAT_SIZE =3D=3D 2 +# define fmaddsub(x, y, z) BR(vfmaddsubph, _mask, x, y, z, ~0) # endif #elif VEC_SIZE =3D=3D 16 # if FLOAT_SIZE =3D=3D 4 @@ -70,6 +72,75 @@ ENTRY(fma_test); # endif #endif =20 +#ifdef __AVX512FP16__ +# define I (1.if16) +# if VEC_SIZE > FLOAT_SIZE +# define CELEM_COUNT (ELEM_COUNT / 2) +static const unsigned int conj_mask =3D 0x80000000; +# define conj(z) ({ \ + vec_t r_; \ + asm ( "vpxord %2%{1to%c3%}, %1, %0" \ + : "=3Dv" (r_) \ + : "v" (z), "m" (conj_mask), "i" (CELEM_COUNT) ); \ + r_; \ +}) +# define _cmul_vv(a, b, c) BR2(vf##c##mulcph, , a, b) +# define _cmul_vs(a, b, c) ({ \ + vec_t r_; \ + _Complex _Float16 b_ =3D (b); \ + asm ( "vf"#c"mulcph %2%{1to%c3%}, %1, %0" \ + : "=3Dv" (r_) \ + : "v" (a), "m" (b_), "i" (CELEM_COUNT) ); \ + r_; \ +}) +# define cmadd_vv(a, b, c) BR2(vfmaddcph, , a, b, c) +# define cmadd_vs(a, b, c) ({ \ + _Complex _Float16 b_ =3D (b); \ + vec_t r_; \ + asm ( "vfmaddcph %2%{1to%c3%}, %1, %0" \ + : "=3Dv" (r_) \ + : "v" (a), "m" (b_), "i" (CELEM_COUNT), "0" (c) ); \ + r_; \ +}) +# else +# define CELEM_COUNT 1 +typedef _Float16 __attribute__((vector_size(4))) cvec_t; +# define conj(z) ({ \ + cvec_t r_; \ + asm ( "xor $0x80000000, %0" : "=3Drm" (r_) : "0" (z) ); \ + r_; \ +}) +# define _cmul_vv(a, b, c) ({ \ + cvec_t r_; \ + /* "=3D&x" to force destination to be different from both sources */ \ + asm ( "vf"#c"mulcsh %2, %1, %0" : "=3D&x" (r_) : "x" (a), "m" (b) ); \ + r_; \ +}) +# define _cmul_vs(a, b, c) ({ \ + _Complex _Float16 b_ =3D (b); \ + cvec_t r_; \ + /* "=3D&x" to force destination to be different from both sources */ \ + asm ( "vf"#c"mulcsh %2, %1, %0" : "=3D&x" (r_) : "x" (a), "m" (b_) ); \ + r_; \ +}) +# define cmadd_vv(a, b, c) ({ \ + cvec_t r_ =3D (c); \ + asm ( "vfmaddcsh %2, %1, %0" : "+x" (r_) : "x" (a), "m" (b) ); \ + r_; \ +}) +# define cmadd_vs(a, b, c) ({ \ + _Complex _Float16 b_ =3D (b); \ + cvec_t r_ =3D (c); \ + asm ( "vfmaddcsh %2, %1, %0" : "+x" (r_) : "x" (a), "m" (b_) ); \ + r_; \ +}) +# endif +# define cmul_vv(a, b) _cmul_vv(a, b, ) +# define cmulc_vv(a, b) _cmul_vv(a, b, c) +# define cmul_vs(a, b) _cmul_vs(a, b, ) +# define cmulc_vs(a, b) _cmul_vs(a, b, c) +#endif + int fma_test(void) { unsigned int i; @@ -156,5 +227,99 @@ int fma_test(void) touch(inv); #endif =20 +#ifdef CELEM_COUNT + +# if VEC_SIZE > FLOAT_SIZE +# define cvec_t vec_t +# define ceq eq +# else + { + /* Cannot re-use the function-scope variables (for being too small). */ + cvec_t x, y, z, src =3D { 1, 2 }, inv =3D { 2, 1 }, one =3D { 1, 1 }; +# define ceq(x, y) ({ \ + unsigned int r_; \ + asm ( "vcmpph $0, %1, %2, %0" : "=3Dk" (r_) : "x" (x), "x" (y) ); \ + (r_ & 3) =3D=3D 3; \ +}) +# endif + + /* (a * i)=C2=B2 =3D=3D -a=C2=B2 */ + x =3D cmul_vs(src, I); + y =3D cmul_vv(x, x); + x =3D -src; + touch(src); + z =3D cmul_vv(x, src); + if ( !ceq(y, z) ) return __LINE__; + + /* conj(a * b) =3D=3D conj(a) * conj(b) */ + touch(src); + x =3D conj(src); + touch(inv); + y =3D cmulc_vv(x, inv); + touch(src); + touch(inv); + z =3D conj(cmul_vv(src, inv)); + if ( !ceq(y, z) ) return __LINE__; + + /* a * conj(a) =3D=3D |a|=C2=B2 */ + touch(src); + y =3D src; + touch(src); + x =3D cmulc_vv(y, src); + y *=3D y; + for ( i =3D 0; i < ELEM_COUNT; i +=3D 2 ) + { + if ( x[i] !=3D y[i] + y[i + 1] ) return __LINE__; + if ( x[i + 1] ) return __LINE__; + } + + /* a * b =3D=3D b * a + 0 */ + touch(src); + touch(inv); + x =3D cmul_vv(src, inv); + touch(src); + touch(inv); + y =3D cmadd_vv(inv, src, (cvec_t){}); + if ( !ceq(x, y) ) return __LINE__; + + /* a * 1 + b =3D=3D b * 1 + a */ + touch(src); + touch(inv); + x =3D cmadd_vs(src, 1, inv); + for ( i =3D 0; i < ELEM_COUNT; i +=3D 2 ) + { + z[i] =3D 1; + z[i + 1] =3D 0; + } + touch(z); + y =3D cmadd_vv(inv, z, src); + if ( !ceq(x, y) ) return __LINE__; + + /* (a + b) * c =3D=3D a * c + b * c */ + touch(one); + touch(inv); + x =3D cmul_vv(src + one, inv); + touch(inv); + y =3D cmul_vv(one, inv); + touch(inv); + z =3D cmadd_vv(src, inv, y); + if ( !ceq(x, z) ) return __LINE__; + + /* a * i + conj(a) =3D=3D (Re(a) - Im(a)) * (1 + i) */ + x =3D cmadd_vs(src, I, conj(src)); + for ( i =3D 0; i < ELEM_COUNT; i +=3D 2 ) + { + typeof(x[0]) val =3D src[i] - src[i + 1]; + + if ( x[i] !=3D val ) return __LINE__; + if ( x[i + 1] !=3D val ) return __LINE__; + } + +# if VEC_SIZE =3D=3D FLOAT_SIZE + } +# endif + +#endif /* CELEM_COUNT */ + return 0; } --- a/tools/tests/x86_emulator/test_x86_emulator.c +++ b/tools/tests/x86_emulator/test_x86_emulator.c @@ -43,6 +43,7 @@ asm ( ".pushsection .test, \"ax\", @prog #include "avx512er.h" #include "avx512vbmi.h" #include "avx512vbmi2-vpclmulqdq.h" +#include "avx512fp16.h" =20 #define verbose false /* Switch to true for far more logging. */ =20 @@ -249,6 +250,16 @@ static bool simd_check_avx512bw_gf_vl(vo return cpu_has_gfni && cpu_has_avx512vl; } =20 +static bool simd_check_avx512fp16(void) +{ + return cpu_has_avx512_fp16; +} + +static bool simd_check_avx512fp16_vl(void) +{ + return cpu_has_avx512_fp16 && cpu_has_avx512vl; +} + static void simd_set_regs(struct cpu_user_regs *regs) { if ( cpu_has_mmx ) @@ -513,6 +524,10 @@ static const struct { AVX512VL(_VBMI+VL u16x8, avx512vbmi, 16u2), AVX512VL(_VBMI+VL s16x16, avx512vbmi, 32i2), AVX512VL(_VBMI+VL u16x16, avx512vbmi, 32u2), + SIMD(AVX512_FP16 f16 scal,avx512fp16, f2), + SIMD(AVX512_FP16 f16x32, avx512fp16, 64f2), + AVX512VL(_FP16+VL f16x8, avx512fp16, 16f2), + AVX512VL(_FP16+VL f16x16,avx512fp16, 32f2), SIMD(SHA, sse4_sha, 16), SIMD(AVX+SHA, avx_sha, 16), AVX512VL(VL+SHA, avx512f_sha, 16), --- a/xen/include/public/arch-x86/cpufeatureset.h +++ b/xen/include/public/arch-x86/cpufeatureset.h @@ -267,7 +267,7 @@ XEN_CPUFEATURE(TSX_FORCE_ABORT, 9*32+13) XEN_CPUFEATURE(SERIALIZE, 9*32+14) /*A SERIALIZE insn */ XEN_CPUFEATURE(TSXLDTRK, 9*32+16) /*a TSX load tracking suspend/resu= me insns */ XEN_CPUFEATURE(CET_IBT, 9*32+20) /* CET - Indirect Branch Tracking= */ -XEN_CPUFEATURE(AVX512_FP16, 9*32+23) /* AVX512 FP16 instructions */ +XEN_CPUFEATURE(AVX512_FP16, 9*32+23) /*A AVX512 FP16 instructions */ XEN_CPUFEATURE(IBRSB, 9*32+26) /*A IBRS and IBPB support (used by= Intel) */ XEN_CPUFEATURE(STIBP, 9*32+27) /*A STIBP */ XEN_CPUFEATURE(L1D_FLUSH, 9*32+28) /*S MSR_FLUSH_CMD and L1D flush. */