On Mon, Mar 07, 2022 at 07:06:28AM -0800, H.J. Lu wrote:
> Since eh_return doesn't work with stack realignment, disable SSE on
> unwind-c.c and unwind-dw2.c to avoid stack realignment with the 4-byte
> incoming stack to avoid SSE usage which is caused by
> 
> commit 609e8c492d62d92465460eae3d43dfc4b2c68288
> Author: H.J. Lu <hjl.to...@gmail.com>
> Date:   Sat Feb 26 14:17:23 2022 -0800
> 
>     x86: Always return pseudo register in ix86_gen_scratch_sse_rtx
> 
> when pseudo vector registers are used to expand memset.

>       PR target/104781
>       * config.host (tmake_file): Add i386/32/t-eh-return-no-sse for
>       32-bit x86 Cygwin, MinGW and Solaris.
>       * config/i386/32/t-eh-return-no-sse: New file.

For this, isn't the right fix instead something like:

--- gcc/config/i386/i386.h.jj   2022-02-25 12:06:45.535493490 +0100
+++ gcc/config/i386/i386.h      2022-03-08 11:20:43.207043370 +0100
@@ -2848,6 +2848,10 @@ extern enum attr_cpu ix86_schedule;
 #define NUM_X86_64_MS_CLOBBERED_REGS 12
 #endif
 
+/* __builtin_eh_return can't handle stack realignment, so disable SSE in
+   libgcc functions that call it.  */
+#define LIBGCC2_UNWIND_ATTRIBUTE __attribute__((target ("no-sse")))
+
 /*
 Local variables:
 version-control: t


As mentioned in PR104838, this likely isn't specific to just Solaris and
cygwin/mingw.  Fedora uses -msse2 -mfpmath=sse -mstackrealign in its C{,XX}FLAGS
among other things for i686.

        Jakub

Reply via email to