From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by mx.groups.io with SMTP id smtpd.web11.16917.1684415962107645049 for ; Thu, 18 May 2023 06:19:22 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="signature has expired" header.i=@gmail.com header.s=20221208 header.b=Ssb7pPBL; spf=pass (domain: gmail.com, ip: 209.85.210.177, mailfrom: pedro.falcato@gmail.com) Received: by mail-pf1-f177.google.com with SMTP id d2e1a72fcca58-64a9335a8e7so14094264b3a.0 for ; Thu, 18 May 2023 06:19:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684415961; x=1687007961; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=31OjV/OasNUcsNo/XSR0tjzzJATRrNw5euQI7qVkgiQ=; b=Ssb7pPBLJwu12JffLJQwzrl1QcNP4miuOrocxwKGSKXptdgCS6iF1bnSNsq/ZLFSzV mMlh8oJ+ddCvpJSbhtLTeTuklThUnQlWJGcUWdyaXcxI+596NIWv1ssNyrRjjvzB5xB6 MaSR0H0Zw/J2+bjl7qOCzNheYv3MDGCQEo5Y3mI9m6lj5UL+vcEORAbA1MhUJxVoawNT 18Yv1uIofih9m42WiLiaVRSbrcH0fWR6haWvCKWQ/qgKm6CwMkg77ierkWJkipQH7b/5 X1zPMnKAUnfGmOnpKwdFQjVsLFUO3H9V15jpggUutXasvrSzCN3pRFwikiuQyHrMkX9I UuSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684415961; x=1687007961; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=31OjV/OasNUcsNo/XSR0tjzzJATRrNw5euQI7qVkgiQ=; b=BSWxA3X4Mi+kCWYJRvi1OZUpeCKhvlUT6thVQonJPixW3+n1StsCddXwanglyJAdYb qAWQTg4PGf6lRdbpGg5jSqOcFD2NxtdqPZKAK8vFxfEHZ6R8D7vw1V/QIYQsm5ZxvcUs B4037vjaXzlbropZC6G1c/i2W3M3VJ17ZVz/HBkoxxERzWApfCSE/qd8qOYmeP3PTPEX 4Z80jlodGNOTUV7ISaUSV4BrfNfG4YR1iexmuuSKbgpvN/EMSoRfvUWlpeeXCFpfzfNC f5XqaaM5Sxn0mzR3Sm/x0b5B99Yzl/g0V/tLNpnDlovcbF9akHIMpTv/aMZON1dgdzlb +ZpA== X-Gm-Message-State: AC+VfDw1XmDrzTN5jif5Do1OgI+B6ytLskc9BnaeZc3cqwwYaPido+7+ UF+XcuXDntTnImYIedKNifcNk8+pn1I/m5XFAfiAsXltMYk= X-Google-Smtp-Source: ACHHUZ7/UijwEC2L0ItpxOMS9DJX5Rd+z9YG3SpXqqsqAs3A/VA+cUkmZS/eeizUdLYXkujAHVIPGoSmD4Qg9JiUlnU= X-Received: by 2002:a17:902:e889:b0:1ac:7245:ba55 with SMTP id w9-20020a170902e88900b001ac7245ba55mr2481378plg.6.1684415961200; Thu, 18 May 2023 06:19:21 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: "Pedro Falcato" Date: Thu, 18 May 2023 14:19:10 +0100 Message-ID: Subject: Re: [edk2-devel] CpuDeadLoop() is optimized by compiler To: devel@edk2.groups.io, ray.ni@intel.com Cc: "Kinney, Michael D" , Rebecca Cran Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, May 18, 2023 at 10:59=E2=80=AFAM Ni, Ray wrote: > > Hi, > > Starting from certain version of Visual Studio C compiler (I don=E2=80=99= t have the exact version. I am using VS2019), CpuDeadLoop is now optimized = quite well by compiler. > > > > The optimization is so =E2=80=9Cgood=E2=80=9D that it becomes 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 jump out of the loop whe= n the Index is not zero. > > So in order to break out of the loop, developers need to: > > Manually adjust rsp by increasing 40 > Manually =E2=80=9Cret=E2=80=9D > > > > I am not sure if anyone has interest to re-write this function so that co= mpiler can be =E2=80=9Cfooled=E2=80=9D 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 Hi Ray, Can you try something like this? https://godbolt.org/z/x7P1PqY59 Seems to work, but godbolt does not support MSVC LTO :/ --=20 Pedro