* config/i386/i386.h (HARD_REGNO_CALL_PART_CLOBBERED): New.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 Aug 2010 18:40:45 +0000 (18:40 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 Aug 2010 18:40:45 +0000 (18:40 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@163103 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.h

index 92e6b58..f9ce2f4 100644 (file)
@@ -1,3 +1,7 @@
+2010-08-11  Richard Henderson  <rth@redhat.com>
+
+       * config/i386/i386.h (HARD_REGNO_CALL_PART_CLOBBERED): New.
+
 2010-08-11  Nick Clifton  <nickc@redhat.com>
 
        * config/stormy16/stormy16-lib2.c (__cmpsi2): New function.
index a2acc71..7fd874b 100644 (file)
@@ -1104,6 +1104,12 @@ enum target_cpu_default
    : (MODE) == QImode && (REGNO) > BX_REG && !TARGET_64BIT ? SImode    \
    : (MODE))
 
+/* The only ABI that saves SSE registers across calls is Win64 (thus no
+   need to check the current ABI here), and with AVX enabled Win64 only
+   guarantees that the low 16 bytes are saved.  */
+#define HARD_REGNO_CALL_PART_CLOBBERED(REGNO, MODE)             \
+  (SSE_REGNO_P (REGNO) && GET_MODE_SIZE (MODE) > 16)
+
 /* Specify the registers used for certain standard purposes.
    The values of these macros are register numbers.  */