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

--- Comment #9 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Liu Hao from comment #7)
> MSDN says 'the upper portions of YMM0-15 and ZMM0-15 are considered volatile
> and must be considered destroyed on function calls' explicitly [1].

BTW: MSDN is clear that xMM16-31 are volatile (call_used), so the current
definition of CALL_USER_REGISTERS is wrong. At least this part should be:

Index: i386.h
===================================================================
--- i386.h      (revision 278455)
+++ i386.h      (working copy)
@@ -1126,9 +1126,9 @@
 /*xmm8,xmm9,xmm10,xmm11,xmm12,xmm13,xmm14,xmm15*/              \
      6,   6,    6,    6,    6,    6,    6,    6,               \
 /*xmm16,xmm17,xmm18,xmm19,xmm20,xmm21,xmm22,xmm23*/            \
-     6,    6,     6,    6,    6,    6,    6,    6,             \
+     1,    1,     1,    1,    1,    1,    1,    1,             \
 /*xmm24,xmm25,xmm26,xmm27,xmm28,xmm29,xmm30,xmm31*/            \
-     6,    6,     6,    6,    6,    6,    6,    6,             \
+     1,    1,     1,    1,    1,    1,    1,    1,             \
  /* k0,  k1,  k2,  k3,  k4,  k5,  k6,  k7*/                    \
      1,   1,   1,   1,   1,   1,   1,   1 }

Reply via email to