From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mx.groups.io with SMTP id smtpd.web11.13186.1684403996943275028 for ; Thu, 18 May 2023 02:59:57 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=RIiDLBFM; spf=pass (domain: intel.com, ip: 192.55.52.136, mailfrom: ray.ni@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1684403996; x=1715939996; h=from:to:cc:subject:date:message-id:mime-version; bh=z0zhTOrPW5v0xaGHg97HmnNU6/i5odar6r1EXXoU2bc=; b=RIiDLBFMPkbdMXxfU6covDeeaiMme7PxXguFtgoz0bCQzfcgyjoAvkbI impuA2elI7yoGMU5uLHRCzvDK3nwBIOw0gn0HU2aPxOFQKYOwNdt+JyaQ 5weZgz6pr51G6exvCpHqWtc5znmf66kOKBPFjsB0fogXs+++wfxWht0Zk bW0fwC5XNuDN4s8U4jn3rQ2/uKtRI6DhgFWFrHWDwl/IyJCI5yFcSlLJr 58HJGFL6VCETR7A3qUXF2N47tMNoaSQh8fRMHfz8AuQMqJ79jyPcdgNuY mKmFvrEk3WJSTNnbOCnF0wcoaMWZkhrWuza82dF3hDRbAavZLL9le5i87 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="331641407" X-IronPort-AV: E=Sophos;i="5.99,285,1677571200"; d="scan'208,217";a="331641407" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 May 2023 02:59:56 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10713"; a="1032112053" X-IronPort-AV: E=Sophos;i="5.99,285,1677571200"; d="scan'208,217";a="1032112053" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga005.fm.intel.com with ESMTP; 18 May 2023 02:59:56 -0700 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23; Thu, 18 May 2023 02:59:55 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.23 via Frontend Transport; Thu, 18 May 2023 02:59:55 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) 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.2507.23; Thu, 18 May 2023 02:59:55 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kbtG9h2DoLVRtEULojSdErBKVEj7qKqKKBRpoAN+WCz/a7LtN/QoLzxj1Hf5Om6gAkzY4W8rTOdhXnTbgC7VH2PTW7jr8o4CCQ3B4RFEB9RSGQ2aiDU3R6B00fG9PoGGGjYx0nA0nAp1l3KO12aVzeeqaMaom0g1SnqMiZ6mBDKZyH90R9L72z7K6SmeiRtG6iXwT/OgNU+Eg4QKT8Dax9fZkn+TGw7ytKH/yyayWogitlgUUl/8vVhjj0QD2jDO1Uru1bXJnWhiJbBPNRWAU+eniQxAzBQgQR384iOTkIqZHfBF0n174yHd+I9n3Ea9RXIGBHoMhGA3X55hOEZ1mg== 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=WsRldwNj1Hwon+rAl/aDjU+n3l5Ev/YELdxRGhoc1IA=; b=cHDdiMrieDDYzlptYYuG4N0PP0boiVu8udMW8pXjl2qPtZiolHjoaUz59Y8CNTp9FdlWxo24f69eRrksIIjl6FAajDh2I5N/sgm0FvXlU8eGbBVMkk2y+Ue0SVIFN9Dwhq+gQGzJ+AoCAOlaSTjQ3bR9iLdiCGQkdiPO/UYEqVVk3FHaUM326OLLKLmPi+G/tnvkExp5Lhz5wCWdyAZFoEBixdb3KJdXYEIHzeYSDVDbeS627gdXx+c7S4PLcBIQwH7DNMfUxxC4qZ6lbOnDYjh6XJUgZaOIksKf5CDVpR2qOdnTZo6bSlomDslrBuAcmNTkSHHNEeU4f/GdX5PGww== 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 MN6PR11MB8244.namprd11.prod.outlook.com (2603:10b6:208:470::14) by MW4PR11MB7164.namprd11.prod.outlook.com (2603:10b6:303:212::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.17; Thu, 18 May 2023 09:59:52 +0000 Received: from MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d]) by MN6PR11MB8244.namprd11.prod.outlook.com ([fe80::892b:b8e6:bab7:635d%5]) with mapi id 15.20.6387.032; Thu, 18 May 2023 09:59:52 +0000 From: "Ni, Ray" To: "devel@edk2.groups.io" CC: "Kinney, Michael D" , Rebecca Cran , "Ni, Ray" Subject: CpuDeadLoop() is optimized by compiler Thread-Topic: CpuDeadLoop() is optimized by compiler Thread-Index: AdmJbt4CNBNeb1syQVC5/ttKEmOvqQ== Date: Thu, 18 May 2023 09:59:52 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MN6PR11MB8244:EE_|MW4PR11MB7164:EE_ x-ms-office365-filtering-correlation-id: 1e899967-cc47-4ea2-c97c-08db5786a003 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: z7CP+WmWwVK8mv6MIhkbZGDzuHJrELYgnKZDDIYzQwUkK9a0cUrfHVZDA/3xJABZp6WY7mBOsbj2bq9UJxPzp7wB1Lwji/K/GShDieelz/hDzMdJbYRCTm1/HOIc0kGBxg5+7EtYswVT2pzPQ48jTMhH+qNeVJ1CS6nBaJVArXZ9T/Ui4+wUJ9OadhvXenRz3birBnPPV0b7St/tkxeLH6VufavP4DhmJux1xquHdpoiQpRk7/NHyWmCeQftzB3UqaEAa4T2EcIPY71QhdxrDxtmtjC/7+Ykcawi9XmCAmHr0/U8WOXR5e5MzTag2qQmFlkQ21+Zb6Bc3utn9E39QPR0UiiIn5arE8nmHqfAzS8B2fz83Q8AmbVc6+26V2gL/rEmnHQyGXgk04Sg7LQOobQh6+lAq453FKyby6xscyc926pwkOKVVojdTvV7t6j4wVguMTWyF/DgfCD3E/GUWZOyha96+S2ubqgj7KKmmEPvlOel8LMFAG19LiDh9rLD6phE+ffP0a4YKGJsCsCe82hA/IJLazYanxgzK2LpQlQQz50/0nIYI2tAcMPWXHWNFwxjvrNSYEjO94Owa3LY37UQaVoRQ25rT8hjni8Mv0XVi1zDEZqtd16BZxnxp0d/ x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN6PR11MB8244.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(366004)(346002)(39860400002)(396003)(136003)(376002)(451199021)(86362001)(83380400001)(7696005)(82960400001)(41300700001)(33656002)(122000001)(6916009)(38100700002)(5660300002)(52536014)(9326002)(8676002)(316002)(38070700005)(66476007)(4326008)(66556008)(55016003)(2906002)(66946007)(76116006)(64756008)(66446008)(186003)(6506007)(107886003)(26005)(8936002)(9686003)(71200400001)(478600001)(54906003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?V4pkO+TFBw6c7/6X1eXy2dsfx7ZHZnwT3TaE9A8Q0YT9K/fNwdRiEwQeBE4j?= =?us-ascii?Q?YPIkmSW+F5LSCv5ZVAND6Uptn6uUPmypgXU8sBx39tVkH1Xpx3RkusoSCAhj?= =?us-ascii?Q?psE41cQ6fPrTWYonwjPg3B4e1/Pxdi7HQtkCX6aw44o43c3c1m4ibiy5fEon?= =?us-ascii?Q?aM6FEJvLRcgLIeV6Mc15S80lh7WhvqqKLVK9ICEpu9xN+t3VYRUU/CTj8b/2?= =?us-ascii?Q?8dU0GCyoPVF96cE5fuPP3Iest9eb+l6En17kgMUefSOuPp7AXNzaxslJahPT?= =?us-ascii?Q?KYgP5tYtBiQZS/ehQtBYJ/c9P2Wjc3JJk1swcDfk9IRENsqMTcS/Bel+KXqQ?= =?us-ascii?Q?SIr1K1PWc6OgvC3vrKQmM1l3x/Vs/IqsJzgtpBK3T+RzV6aWQ48I20w8hjdl?= =?us-ascii?Q?f24vSkQ6Nro/3YCCbWGY6hUNEduumvcpYIZ1pQkLzfnhYMGWm0UGP8kFmRFi?= =?us-ascii?Q?EOnvXfv+s8pohjJLaY6AevhPGifG+l/p4h+KD1+nEddqQC4Qmdw1pXmjWgW4?= =?us-ascii?Q?5r9N8LUYsW2M6Q0HCdzzc3bKaPtaqEuEOHdGNC3QNUtiSjKagiU8KmWU7KiK?= =?us-ascii?Q?4hkzYEfT1j/Q4xP+ZXryjcWFvI+ppZMwMZ6c/fmn/dPnJWPw0JZHbtG+YRxX?= =?us-ascii?Q?WRTSMFyNH/p2549s2s2N6xQy/JHN3JIq/Jb+KBUZG1cVMUFZn8xwSXcBu3yR?= =?us-ascii?Q?DvlZgsto+aOraKpFWDMnz637i/qvYLykk1UvAqReZFuHdtHQyC/pZ1FwAS2Z?= =?us-ascii?Q?aAAIcDR6YpjDdFV6vfyeRbFGDWB8ZQgwFcl4KP5iEwOW1mhiNj9q5bqlmvHX?= =?us-ascii?Q?vkTFmKtVu03I3semScLT07yvEKW2QSvv1peSt587HPeyaRWqElaMF0ShqR6y?= =?us-ascii?Q?SdktjdL7ahDojnk0YPlDkGXe/GcpZoHUfCaINXUQc+Tri/5XK0nzHF/99+1b?= =?us-ascii?Q?gyhmrc/pwttGVszwn8AzDbwvquOL5jfCkmqzHEDciu8MB/gfmS4ReACBDSDt?= =?us-ascii?Q?6s2EHII9cSaqNhKoB0yoglEMaha+slBnWbJZ/mru2klldsTtkyUpq6O+st0N?= =?us-ascii?Q?ivYZRHprfxycRXMei2wI7smdpIMJv1+CQO4vffaxZzntzSwdF02itgmCC/cN?= =?us-ascii?Q?tZFBykjR6BH3wKuwxIHAjzQoxUraeFf1FDaKSFCautupFRBvzHTi6BhKhw+r?= =?us-ascii?Q?NRBA8BOpMNHlNrGeeiENBO79W5nii9WAOwF7Vyma2dm+gTMFR6cg84lxrLmt?= =?us-ascii?Q?vUcqpfr2FOIujOAomycKracRb9h5ChGiihO4tzcldpzGHeDuqmXdDnc0yVkF?= =?us-ascii?Q?p3IWzngHr7nsfSumXgAldELvoQ7qXbVNiml77FhzquJKdrgEN79cDnT3/mH2?= =?us-ascii?Q?m9NJbAyedRIDg1ncyjysWqrbo9AYtPkdA/yuuMQ22zo2LsmkT9Y2mFTeVQKz?= =?us-ascii?Q?toFH94UPkZ47G53irs5a7Y4nrGU1pXWnf/VnuFAYbAKB1EBzbeVfgZhi0K1y?= =?us-ascii?Q?81Dg7X2fAbeHUXs6AMTojOPUhD5m0skUqVDAhgV+rYxWTrc2U9jmRU1FNwaj?= =?us-ascii?Q?27agB+/e+nl942KOk1c=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN6PR11MB8244.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e899967-cc47-4ea2-c97c-08db5786a003 X-MS-Exchange-CrossTenant-originalarrivaltime: 18 May 2023 09:59:52.4755 (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: 5LIGV6oYxQ5R7+tWGTp+PMZJkaK3Ou32dfSq0dOQAdIetbHjMZerv9ORPn4apvkNAYA49n2RPx1pM0KPdm3GhA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR11MB7164 Return-Path: ray.ni@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: multipart/alternative; boundary="_000_MN6PR11MB82441EBD7043DE6E7DC8A25D8C7F9MN6PR11MB8244namp_" --_000_MN6PR11MB82441EBD7043DE6E7DC8A25D8C7F9MN6PR11MB8244namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, Starting from certain version of Visual Studio C compiler (I don't have the= exact version. I am using VS2019), CpuDeadLoop is now optimized quite well= by compiler. The optimization is so "good" that it becomes harder for developers to brea= k out of the deadloop. I copied the assembly instructions as below for your reference. The compiler does not generate instructions that jump out of the loop when = the Index is not zero. So in order to break out of the loop, developers need to: 1. Manually adjust rsp by increasing 40 2. Manually "ret" I am not sure if anyone has interest to re-write this function so that comp= iler can be "fooled" again. Thanks, Ray =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D ; Function compile flags: /Ogspy ; File e:\work\edk2\MdePkg\Library\BaseLib\CpuDeadLoop.c ; COMDAT CpuDeadLoop _TEXT SEGMENT Index$ =3D 48 CpuDeadLoop PROC = ; COMDAT ; 26 : { $LN12: 00000 48 83 ec 28 sub rsp, 40 = ; 00000028H ; 27 : volatile UINTN Index; ; 28 : ; 29 : for (Index =3D 0; Index =3D=3D 0;) { 00004 48 c7 44 24 30 00 00 00 00 mov QWORD PTR Index$[rsp], 0 $LN10@CpuDeadLoo: ; 30 : CpuPause (); 0000d 48 8b 44 24 30 mov rax, QWORD PTR Index$[rsp] 00012 e8 00 00 00 00 call CpuPause 00017 eb f4 jmp SHORT $LN10@CpuDeadLoo CpuDeadLoop ENDP _TEXT ENDS END --_000_MN6PR11MB82441EBD7043DE6E7DC8A25D8C7F9MN6PR11MB8244namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi,

Starting from certain version of Visual Studio C com= piler (I don’t have the exact version. I am using VS2019), CpuDeadLoo= p is now optimized quite well by compiler.

 

The optimization is so “good” that it be= comes harder for developers to break out of the deadloop.

 

I copied the assembly instructions as below for your= reference.

The compiler does not generate instructions that jum= p out of the loop when the Index is not zero.

So in order to break out of the loop, developers nee= d to:

  1. Manually adjust rsp by increasing 40
  2. Manually &#= 8220;ret”

 

I am not sure if anyone has interest to re-write thi= s function so that compiler can be “fooled” again.

Thanks,
Ray

 

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D

; Function compile flags: /Ogspy

; File e:\work\edk2\MdePkg\Library\BaseLib\CpuDeadLo= op.c

;        &nb= sp;     COMDAT CpuDeadLoop

_TEXT    SEGMENT

Index$ =3D 48

CpuDeadLoop PROC      =             &nb= sp;            =             &nb= sp;            =             ; COMDAT=

 

; 26   : {

 

$LN12:

  00000  48 83 ec 28   &nbs= p;     sub        rs= p, 40           &nbs= p;            &= nbsp;       ; 00000028H

 

; 27   :   volatile UINTN  = Index;

; 28   :

; 29   :   for (Index =3D 0; Ind= ex =3D=3D 0;) {

 

  00004  48 c7 44 24 30

        &nbs= p;      00 00 00 00     &= nbsp;  mov      QWORD PTR Index$[rsp], 0=

$LN10@CpuDeadLoo:

 

; 30   :     CpuPause = ();

 

  0000d  48 8b 44 24 30   mov&nb= sp;     rax, QWORD PTR Index$[rsp]

  00012  e8 00 00 00 00   call&n= bsp;       CpuPause

  00017  eb f4    &nbs= p;            &= nbsp;   jmp       SHORT $LN10@CpuDe= adLoo

CpuDeadLoop ENDP

_TEXT    ENDS

END

 

 

--_000_MN6PR11MB82441EBD7043DE6E7DC8A25D8C7F9MN6PR11MB8244namp_--