On Thu, May 18, 2023 at 10:59 AM Ni, Ray <ray...@intel.com> wrote: > > 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 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 when > the Index is not zero. > > So in order to break out of the loop, developers need to: > > Manually adjust rsp by increasing 40 > Manually “ret” > > > > I am not sure if anyone has interest to re-write this function so that > compiler can be “fooled” again. > > Thanks, > Ray > > > > ======================= > > ; Function compile flags: /Ogspy > > ; File e:\work\edk2\MdePkg\Library\BaseLib\CpuDeadLoop.c > > ; COMDAT CpuDeadLoop > > _TEXT SEGMENT > > Index$ = 48 > > CpuDeadLoop PROC > ; COMDAT > > > > ; 26 : { > > > > $LN12: > > 00000 48 83 ec 28 sub rsp, 40 > ; 00000028H > > > > ; 27 : volatile UINTN Index; > > ; 28 : > > ; 29 : for (Index = 0; Index == 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 :/ -- Pedro -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#105025): https://edk2.groups.io/g/devel/message/105025 Mute This Topic: https://groups.io/mt/98987896/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-