From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web11.3227.1649831733369383027 for ; Tue, 12 Apr 2022 23:35:33 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=NHr+vFT/; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: jiewen.yao@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1649831733; x=1681367733; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=clktPyprfA6tSI/QyIxh+NHTSPA7H//D1yI+wssmdGY=; b=NHr+vFT/aLv6qB4qwn/Q4l+KgHLFCibWrAXqm/T82/CQov5CPv3sOO5W G9dgiRg50CoR+q4KjzPqcTHQ6UMdH5yiAeEy243VmejYJbrt7OIgUWQqu OWQErxRn9JQaVq29V6gXGICK6G1JQuXj/1vx+mTLaRLjWrO+kw6kVfE9G 4eJm70T+8wvzrfdqi+bwV3NaFqFJ8EJ4mz2mUNGLpJQLgvHGfNLLWLJBY o//jKgPUSSxRnuIIqB8y/9sQOxekYHhUvh87mMVenuaajiKzAKeI5ktEs IO7sjuw1EYcGoEoCx/5kFUCOvHiR1xoUJPxJiFL1Jtgc/SDuBK6E1cnuZ g==; X-IronPort-AV: E=McAfee;i="6400,9594,10315"; a="325495120" X-IronPort-AV: E=Sophos;i="5.90,256,1643702400"; d="scan'208";a="325495120" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Apr 2022 23:35:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,256,1643702400"; d="scan'208";a="552074173" Received: from orsmsx604.amr.corp.intel.com ([10.22.229.17]) by orsmga007.jf.intel.com with ESMTP; 12 Apr 2022 23:35:32 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Tue, 12 Apr 2022 23:35:32 -0700 Received: from orsmsx603.amr.corp.intel.com (10.22.229.16) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Tue, 12 Apr 2022 23:35:32 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Tue, 12 Apr 2022 23:35:32 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.173) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Tue, 12 Apr 2022 23:35:31 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aD5O8JBIrYkREx44E2EknXgy0P5EiqK83I+A0264Oc8vldLEmcpsU5t1PMDvo2jo7OwueLC1Rbqnea4GEj7lc8NAVWIqqAqTkqBIQZHJUCCwJdyP7Xv/ItyGAnNA4KPhdZ3A29IhVDQlR3cwRKF9LHGG4G3vPNfAiEXYiL0hF6CvSFFFOsq0iBFBUMeO5AveGIwKem00Afy5ZIRI7gJZNd0glDrsG/7m946yZWplaSYS5kR3ty0Sttz1kXZyIUW2ghme8Fh/KLlt/Ew/t1jkh2+fO6dGih9ED45RlGBFDrTLgb5515rx8dxCpHsBKs8r7Rr5S9V5MrdYsJX8Smc0EA== 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=EznS5tIwkwQe3MwESSEB2TjVgES2+qVwcf7wBlSuuSI=; b=JAXhHVIbXtmvTOjkUQNqgnMllGm4s1qXlMTwC3D+Y7z2mF8bNh2P4ViQFTU/kUlvoVMzeEVN1MiuqlE7cjLxSWHvjyZgdq9uRKmlLYk4LUPNiBf/lyJei1Hcg+EM8fPvg3hNqKSiTTps8PwTNtjjeiFuU4VqvvTPwNhl4l1iC3sdqERyhaXdUijmqpOMJE67aithYZa8WgrEXVxCeQgsgWxafxSPvMjbaRBXgly3DPL0k2pw0OsJ0kegovdtzcvkdncdsuWosRN1vjSkEP65p9NR5QNZOLRmk02Au/ZqbvS/OeujfJNRZ/cq5yrXKSCqsY4TGcRabeRFE94qdzkfeA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from MW4PR11MB5872.namprd11.prod.outlook.com (2603:10b6:303:169::14) by BL1PR11MB5542.namprd11.prod.outlook.com (2603:10b6:208:31d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.29; Wed, 13 Apr 2022 06:35:24 +0000 Received: from MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::198e:ea23:c83b:b93a]) by MW4PR11MB5872.namprd11.prod.outlook.com ([fe80::198e:ea23:c83b:b93a%4]) with mapi id 15.20.5164.018; Wed, 13 Apr 2022 06:35:24 +0000 From: "Yao, Jiewen" To: "Li, Yi1" , "devel@edk2.groups.io" CC: "Wang, Jian J" Subject: Re: [PATCH 1/3] CryptoPkg: Add instrinsics to support building ECC on IA32 windows Thread-Topic: [PATCH 1/3] CryptoPkg: Add instrinsics to support building ECC on IA32 windows Thread-Index: AQHYTv8sTjdhHBENFEeZl1GZ9+SNtqztY0LA Date: Wed, 13 Apr 2022 06:35:24 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.6.401.20 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 63ce3597-a154-4fa7-b1d5-08da1d17ca86 x-ms-traffictypediagnostic: BL1PR11MB5542:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LIH+UXQow1gMyjA1hxaMINmIZ+81Y0hX+QbjSjWQjOGXVP/1aqeFrqlmruiQ03flLaWl4HFW0Vbjdg0KlKCc/FXgF8Vl2gN9z8YbP4rkVletJvwkavkPILsOvDZ7+eaojIMEMGPhF1NsUjGxjjqxlFzExGT/0Mt4oTlf0gPSYxg91sXYq3iZYxubb5Yt2mTtynFjW+lsaSf27owP2xZV/+HkrYzqb4fNiiAF8EZk9oLc3CcVutELIOJWLseR+CfTjygFlLe/oj9OCkSF39pX9YvZLPCYFoSwfeiq9Dyo/p5P6a87eY57otmHPH05miGll6CP6rfuYT9F/HXT8OMIMsp9okPXFHjPv8cBfW96xhA5pniN9pBK31SoaMEF1sR8XCxAu+7Lwv0AmNq4cq1nGUKQ61aJMQcxjOTAugv0qo+8rGXfsaBTEC9NbohjrWg5uQ5/X/0/57NuA5w9zBqQfyDaQ5HZhh7B2+ccYmvJwBXkkY6S/LQmaejeID2ds42q0TBcfnOHBsHJaaeKNsN7tiDPfVGmDFIrpSJ6yZZAzCv/lm8xuikEEPGJ1jj6JKI7xwjKXr6OFVoa00QitXRzhRc9IJXhMbswv8UGB/i0+dcdwNCkzH49pASUwf4ZbSEkXwRCA+F10EO6gg/tSzKS5B2LC2rBoxRcQU+buNXUgzStj0+fIW6YSmVGs/5p3hckxhVahvxWqqXIIPiIXy8RAV3PzJ5w77NPV2Vi6Ngwb2kplzuzW8Ij5Sp0N7VRtwtyJkVTTScva70CXJWUo/ZJaFsLL0ftv2OW+qqMkJa+tn0= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB5872.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(45080400002)(33656002)(508600001)(8676002)(82960400001)(110136005)(64756008)(66476007)(66556008)(66446008)(19627235002)(4326008)(66946007)(76116006)(122000001)(316002)(38100700002)(2906002)(38070700005)(55016003)(71200400001)(5660300002)(83380400001)(86362001)(107886003)(26005)(52536014)(53546011)(9686003)(7696005)(6506007)(8936002)(186003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?8pY7jW8icWEZff+U4NUnbfsh/C/MjuhmoqAj5Od35H8xrHwGggfd3VohwNe4?= =?us-ascii?Q?nXCYwR1aU5YmSctHBBWtLkxycVdr9A/3/rkJ3/UI3QD973MffChL4emhzBst?= =?us-ascii?Q?zjbr7uLKzM/dSGbbhh+VZHhIRwrRGP7bLe9UxNp+knHh/dhsAMZgkZ63MAWZ?= =?us-ascii?Q?jmfe99zcFCjE3pxy1DRnF19YOKuUVHqLbMhNRAy5pyamPdmbS6FX1Ip1kdWK?= =?us-ascii?Q?dK+2g8p4Fu3VA5Au7PfnGskOIBVqdm0KtzZBq9PB0AL8hGPzCdPpw8fbaRs0?= =?us-ascii?Q?I5Msca1WhjphzMKH+aLgFbALWgpXa7OrYJ3hTlM0v7sG49a10G/zHxGKm6fq?= =?us-ascii?Q?k0npwRBbmyH5QBUByI4Nmsjy8/VprXEEonIEpnruEz7wGH0/fqd01s+8nHFa?= =?us-ascii?Q?okLY7Xw3rrBNR9P9BAzzFnrXan4DGWHJ2YOwx3L7aui2p7JkZyB9frLA34O2?= =?us-ascii?Q?Ue+b5h1oWPyFmXoNbKLnQX5GhINpIVhp9g/bp0u4OaNaFx69fzdgRnP9NSY9?= =?us-ascii?Q?0FagxcmqYQDXihOR2DS7SBxK0ycV4nWEMn1ruXUCC+D93+PDQTKC8KLZ1q+f?= =?us-ascii?Q?ymYSdwLlbKLALl13qmS/1b+9yZKIDIG/nUeIx8e9QeP69wN6HYYEb8QAPMhe?= =?us-ascii?Q?mToMV2UrlJ22uFwgyKYrS+3JXiKJ7+lHkvMLYaFMtwS6VlbcqMtyfpMurJfZ?= =?us-ascii?Q?7zxWTEqw5N6hRp08D9K9ExpDrs1MP+OgB2Tkp7CYqqRoGIVv0QKmyrMmfQJW?= =?us-ascii?Q?TwxRl6jkJSEXSkylYCZS80ezvRvh4NFX12VZhC5DCB1D/eCHHIhSO1R/EByr?= =?us-ascii?Q?dcsd76ddydEBIVDvWWjczK6PxJVfUDs6cgay4+7fsYDaawITLLImJ+ShtrV/?= =?us-ascii?Q?zvGaxQSVLbE+xwP4rt9ngRIW6fh6xEo+XRaYNNAp8amkGAITVCMk7vtxaz9P?= =?us-ascii?Q?mqEk+8tbEnoN4/eVeGdKItCK1HtZKV1djutHlm+HESpqYjST90uRNeqB367l?= =?us-ascii?Q?NxTchgI/SY2mlk0JswYGDScxXdkHc/QHFLluZ09j0qiuiikkOtG7QjGoC4Gd?= =?us-ascii?Q?2oZNHWqlwIjZONo778jxhWdjRh7EUwfzFc8QdhSjYkAIEPU8X9ETHccgfRAf?= =?us-ascii?Q?3KLn6FlnvBfHvVJ6wx5tNAGTeURMv7fCq1DYHHp2AC4tKalqym1Om5qDruLC?= =?us-ascii?Q?iy0Y5f2MGwcUqJ/42oEqUqx3MO3jrBK72azyiq4EzxFx3arP+eIXEkHPY0md?= =?us-ascii?Q?7ibOj1dbQa/1+WXKZVHVy2b2YG9+zSEELqppo8M9xgWZti6WpDido0+SemQk?= =?us-ascii?Q?UlzUr3pJy33VxtUmMhu5KiaSQ2ahfGMLyAGhifYtZ57dYvwoK+Cl2D9SU2nA?= =?us-ascii?Q?VTfLc+XmCjOY+QP15lxC+4qgbTwMeHQtC7+qyp3x8Gq68ugYoaJqxPEMjOcv?= =?us-ascii?Q?a+p6eYcob4/H5EiqGlGDHnm39/BVXhcu1i/EGTRqkrlJEzjbgF9tHAAEAhpP?= =?us-ascii?Q?FRZUCCQEpZoUAkMyl3B41PJtlmUex/g99g/qOjfNnAXfPunKL7MAqQEWHj8y?= =?us-ascii?Q?YqcDAR3hMgdD0h6MZykNM7bxNKdWEz7p5uPJiIUIlIjJKGqFDduqF4FzYxlg?= =?us-ascii?Q?MquiaYY6iuwAvMmNYyI1yCuKJUUAArT4sdvsj+0vmFwWCvM8yjcaMiSlDodq?= =?us-ascii?Q?GCYGXp0V1CIgFi+HnaVaSDUj2sVqKBr9IbiHg9edAxzfaZudaZAYvirF2gvw?= =?us-ascii?Q?ejn2AgCh4g=3D=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB5872.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 63ce3597-a154-4fa7-b1d5-08da1d17ca86 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Apr 2022 06:35:24.4844 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: wDgrLQatGhLywIIvBIlH6uyBIeLNHMKM1PJD3AODisYenIJNp5GVMdZxBbC+1jJ2dI3Lxjbp+spCQsyY9iiaXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR11MB5542 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Jiewen Yao > -----Original Message----- > From: Li, Yi1 > Sent: Wednesday, April 13, 2022 2:25 PM > To: devel@edk2.groups.io > Cc: Li, Yi1 ; Yao, Jiewen ; Wang,= Jian > J > Subject: [PATCH 1/3] CryptoPkg: Add instrinsics to support building ECC o= n IA32 > windows >=20 > REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3D3679 >=20 > This dependency is needed to build openssl lib with ECC ciphers > under IA32 Windows and adds implementation for _allmul and _allshr > instrinsics. >=20 > It is taken from Project Mu: > microsoft/mu_basecore@b55b341 >=20 > Cc: Jiewen Yao > Cc: Jian J Wang >=20 > Signed-off-by: yi1 li > --- > .../Library/IntrinsicLib/Ia32/MathLlmul.asm | 98 +++++++++++++++++++ > .../Library/IntrinsicLib/Ia32/MathLlshr.asm | 78 +++++++++++++++ > .../Library/IntrinsicLib/IntrinsicLib.inf | 2 + > 3 files changed, 178 insertions(+) > create mode 100644 CryptoPkg/Library/IntrinsicLib/Ia32/MathLlmul.asm > create mode 100644 CryptoPkg/Library/IntrinsicLib/Ia32/MathLlshr.asm >=20 > diff --git a/CryptoPkg/Library/IntrinsicLib/Ia32/MathLlmul.asm > b/CryptoPkg/Library/IntrinsicLib/Ia32/MathLlmul.asm > new file mode 100644 > index 000000000000..341ea8a7bc0d > --- /dev/null > +++ b/CryptoPkg/Library/IntrinsicLib/Ia32/MathLlmul.asm > @@ -0,0 +1,98 @@ > +;*** > +;llmul.asm - long multiply routine > +; > +; Copyright (c) Microsoft Corporation. All rights reserved. > +; SPDX-License-Identifier: BSD-2-Clause-Patent > +; > +;Purpose: > +; Defines long multiply routine > +; Both signed and unsigned routines are the same, since multiply's > +; work out the same in 2's complement > +; creates the following routine: > +; __allmul > +; > +;Original Implemenation: MSVC 14.12.25827 > +; > +;*************************************************************** > **************** > + .686 > + .model flat,C > + .code > + > + > +;*** > +;llmul - long multiply routine > +; > +;Purpose: > +; Does a long multiply (same for signed/unsigned) > +; Parameters are not changed. > +; > +;Entry: > +; Parameters are passed on the stack: > +; 1st pushed: multiplier (QWORD) > +; 2nd pushed: multiplicand (QWORD) > +; > +;Exit: > +; EDX:EAX - product of multiplier and multiplicand > +; NOTE: parameters are removed from the stack > +; > +;Uses: > +; ECX > +; > +;Exceptions: > +; > +;*************************************************************** > **************** > +_allmul PROC NEAR > + > +A EQU [esp + 4] ; stack address of a > +B EQU [esp + 12] ; stack address of b > + > +HIGH_PART EQU [4] ; > +LOW_PART EQU [0] > + > +; > +; AHI, BHI : upper 32 bits of A and B > +; ALO, BLO : lower 32 bits of A and B > +; > +; ALO * BLO > +; ALO * BHI > +; + BLO * AHI > +; --------------------- > +; > + > + mov eax,HIGH_PART(A) > + mov ecx,HIGH_PART(B) > + or ecx,eax ;test for both high dwords zero. > + mov ecx,LOW_PART(B) > + jnz short hard ;both are zero, just mult ALO and BLO > + > + mov eax,LOW_PART(A) > + mul ecx > + > + ret 16 ; callee restores the stack > + > +hard: > + push ebx > + > +; must redefine A and B since esp has been altered > + > +A2 EQU [esp + 8] ; stack address of a > +B2 EQU [esp + 16] ; stack address of b > + > + mul ecx ;eax has AHI, ecx has BLO, so AHI * BLO > + mov ebx,eax ;save result > + > + mov eax,LOW_PART(A2) > + mul dword ptr HIGH_PART(B2) ;ALO * BHI > + add ebx,eax ;ebx =3D ((ALO * BHI) + (AHI * BLO)) > + > + mov eax,LOW_PART(A2);ecx =3D BLO > + mul ecx ;so edx:eax =3D ALO*BLO > + add edx,ebx ;now edx has all the LO*HI stuff > + > + pop ebx > + > + ret 16 ; callee restores the stack > + > +_allmul ENDP > + > + end > diff --git a/CryptoPkg/Library/IntrinsicLib/Ia32/MathLlshr.asm > b/CryptoPkg/Library/IntrinsicLib/Ia32/MathLlshr.asm > new file mode 100644 > index 000000000000..ab8294580f16 > --- /dev/null > +++ b/CryptoPkg/Library/IntrinsicLib/Ia32/MathLlshr.asm > @@ -0,0 +1,78 @@ > +;*** > +;llshr.asm - long shift right > +; > +; Copyright (c) Microsoft Corporation. All rights reserved. > +; SPDX-License-Identifier: BSD-2-Clause-Patent > +; > +;Purpose: > +; define signed long shift right routine > +; __allshr > +; > +;Original Implemenation: MSVC 14.12.25827 > +; > +;*************************************************************** > **************** > + .686 > + .model flat,C > + .code > + > + > + > +;*** > +;llshr - long shift right > +; > +;Purpose: > +; Does a signed Long Shift Right > +; Shifts a long right any number of bits. > +; > +;Entry: > +; EDX:EAX - long value to be shifted > +; CL - number of bits to shift by > +; > +;Exit: > +; EDX:EAX - shifted value > +; > +;Uses: > +; CL is destroyed. > +; > +;Exceptions: > +; > +;*************************************************************** > **************** > +_allshr PROC NEAR > + > +; > +; Handle shifts of 64 bits or more (if shifting 64 bits or more, the res= ult > +; depends only on the high order bit of edx). > +; > + cmp cl,64 > + jae short RETSIGN > + > +; > +; Handle shifts of between 0 and 31 bits > +; > + cmp cl, 32 > + jae short MORE32 > + shrd eax,edx,cl > + sar edx,cl > + ret > + > +; > +; Handle shifts of between 32 and 63 bits > +; > +MORE32: > + mov eax,edx > + sar edx,31 > + and cl,31 > + sar eax,cl > + ret > + > +; > +; Return double precision 0 or -1, depending on the sign of edx > +; > +RETSIGN: > + sar edx,31 > + mov eax,edx > + ret > + > +_allshr ENDP > + > + end > diff --git a/CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf > b/CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf > index fcbb93316cf7..86e74b57b109 100644 > --- a/CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf > +++ b/CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf > @@ -30,6 +30,8 @@ > Ia32/MathLShiftS64.c | MSFT > Ia32/MathRShiftU64.c | MSFT > Ia32/MathFtol.c | MSFT > + Ia32/MathLlmul.asm | MSFT > + Ia32/MathLlshr.asm | MSFT >=20 > Ia32/MathLShiftS64.c | INTEL > Ia32/MathRShiftU64.c | INTEL > -- > 2.33.0.windows.2