public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* CpuDeadLoop() is optimized by compiler
@ 2023-05-18  9:59 Ni, Ray
  2023-05-18 13:19 ` [edk2-devel] " Pedro Falcato
  2023-05-18 15:36 ` Michael D Kinney
  0 siblings, 2 replies; 27+ messages in thread
From: Ni, Ray @ 2023-05-18  9:59 UTC (permalink / raw)
  To: devel@edk2.groups.io; +Cc: Kinney, Michael D, Rebecca Cran, Ni, Ray

[-- Attachment #1: Type: text/plain, Size: 1537 bytes --]

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:

  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 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



[-- Attachment #2: Type: text/html, Size: 7871 bytes --]

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2024-06-07 16:57 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-18  9:59 CpuDeadLoop() is optimized by compiler Ni, Ray
2023-05-18 13:19 ` [edk2-devel] " Pedro Falcato
2023-05-18 15:36 ` Michael D Kinney
2023-05-18 16:49   ` [edk2-devel] " Andrew Fish
2023-05-18 17:05     ` Michael D Kinney
2023-05-18 17:08       ` Andrew Fish
2023-05-18 17:19         ` Michael D Kinney
2023-05-18 17:22           ` Andrew Fish
2023-05-18 17:24           ` Andrew Fish
2023-05-18 18:45             ` Andrew Fish
     [not found]             ` <17605136DCF3E084.26337@groups.io>
2023-05-18 20:45               ` Andrew Fish
2023-05-18 21:42                 ` Michael D Kinney
2023-05-19  0:42                   ` Andrew Fish
2023-05-19  2:53                     ` Ni, Ray
2023-05-19  3:03                       ` Jeff Fan
2023-05-19 15:31                       ` Rebecca Cran
2023-05-19 16:31                         ` Andrew Fish
2023-10-31  2:51                           ` Ni, Ray
2023-10-31  3:37                             ` Michael D Kinney
2023-10-31  8:30                               ` Ni, Ray
2023-10-31 14:19                                 ` Michael D Kinney
2024-06-05  1:07                                   ` Michael D Kinney
2024-06-05 16:48                                     ` Oliver Smith-Denny
2024-06-07 16:57                                       ` Hernandez Miramontes, Jose Miguel
     [not found]                       ` <1760952DCE55DF8D.29365@groups.io>
2023-05-19 16:09                         ` Rebecca Cran
2023-05-18 17:36   ` Rebecca Cran
2023-05-18 18:21     ` Andrew Fish

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox