https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117312

--- Comment #17 from Uroš Bizjak <ubizjak at gmail dot com> ---
With the patch in PR117359 applied and testcase patched with:

--cut here--
--- pr117312.c  2024-10-30 10:50:04.921338850 +0100
+++ pr117312-new.c      2024-10-30 10:49:49.441488965 +0100
@@ -1,3 +1,6 @@
+register unsigned long current_stack_pointer asm ("%rsp");
+#define ASM_CALL_CONSTRAINT "+r" (current_stack_pointer)
+
 /* Just an opaque data source */
 static inline __attribute__((always_inline)) int get_random(void)
 {
@@ -22,7 +25,7 @@
     /* Clobbers [-16..-1](%rsp) */
     /* "volatile" or a memory clobber doesn't seem to make any difference */
     asm("push %2; pushf; pop %0; pop %1"
-       : "=r" (y), "=r" (z)
+       : "=r" (y), "=r" (z), ASM_CALL_CONSTRAINT
        : "r" (x)
        : "memory");

the resulting asm differs in:

--- pr117312.s  2024-10-30 10:50:13.170258856 +0100
+++ pr117312-new.s      2024-10-30 10:50:28.517110031 +0100
@@ -1,4 +1,4 @@
-       .file   "pr117312.c"
+       .file   "pr117312-new.c"
        .text
        .p2align 4
        .globl  asm_clobbers_redzone
@@ -6,115 +6,116 @@
 asm_clobbers_redzone:
 .LFB1:
        .cfi_startproc
-       movl    %edi, %eax
+       subq    $72, %rsp
+       .cfi_def_cfa_offset 80
 #APP
-# 5 "pr117312.c" 1
+# 8 "pr117312-new.c" 1
        rdrand %edx
 # 0 "" 2
 #NO_APP
-       movl    %edx, -72(%rsp)
+       movl    %edx, (%rsp)
 #APP
-# 5 "pr117312.c" 1
-       rdrand %ecx
+# 8 "pr117312-new.c" 1
+       rdrand %eax
 # 0 "" 2
 #NO_APP
-       movl    %ecx, -68(%rsp)
+       movl    %eax, 4(%rsp)
 #APP
-# 5 "pr117312.c" 1
-       rdrand %esi
+# 8 "pr117312-new.c" 1
+       rdrand %ecx
 # 0 "" 2
 #NO_APP
-       movl    %esi, -64(%rsp)
+       movl    %ecx, 8(%rsp)
...

No redzone was used with the patched testcase.

Reply via email to