diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2013-10-19 14:58:20 +0200 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2013-10-19 14:58:20 +0200 |
commit | 6eb793dd0fd8a3494a48b4ca1d748f347f9b3105 (patch) | |
tree | 768ed4b211dde61d2ef02251b1e6a132db4eee22 | |
parent | c07757e53626133cd0f248f1f690e3fd9b059f6e (diff) | |
download | gcc-6eb793dd0fd8a3494a48b4ca1d748f347f9b3105.zip gcc-6eb793dd0fd8a3494a48b4ca1d748f347f9b3105.tar.gz gcc-6eb793dd0fd8a3494a48b4ca1d748f347f9b3105.tar.bz2 |
re PR target/58792 (ICE at mode-switching.c:421 when compiling clang lib/AST/MicrosoftCXXABI.cpp)
PR target/58792
* config/i386/i386.c (ix86_function_value_regno): Add DX_REG,
ST1_REG and XMM1_REG for 32bit and 64bit targets. Also add DI_REG
and SI_REG for 64bit SYSV ABI targets.
From-SVN: r203857
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 14 |
2 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 7deefce..78bc3bd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2013-10-19 Uros Bizjak <ubizjak@gmail.com> + PR target/58792 + * config/i386/i386.c (ix86_function_value_regno): Add DX_REG, + ST1_REG and XMM1_REG for 32bit and 64bit targets. Also add DI_REG + and SI_REG for 64bit SYSV ABI targets. + +2013-10-19 Uros Bizjak <ubizjak@gmail.com> + * mode-switching.c (create_pre_exit): Rename maybe_builtin_apply to multi_reg_return. Clarify that we are skipping USEs of multiple return registers. Use bool type where appropriate. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 91e6510..54bd5f2 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -7393,9 +7393,15 @@ ix86_function_value_regno_p (const unsigned int regno) switch (regno) { case AX_REG: + case DX_REG: return true; + case DI_REG: + case SI_REG: + return TARGET_64BIT && ix86_abi != MS_ABI; - case FIRST_FLOAT_REG: + /* Complex values are returned in %st(0)/%st(1) pair. */ + case ST0_REG: + case ST1_REG: /* TODO: The function should depend on current function ABI but builtins.c would need updating then. Therefore we use the default ABI. */ @@ -7403,10 +7409,12 @@ ix86_function_value_regno_p (const unsigned int regno) return false; return TARGET_FLOAT_RETURNS_IN_80387; - case FIRST_SSE_REG: + /* Complex values are returned in %xmm0/%xmm1 pair. */ + case XMM0_REG: + case XMM1_REG: return TARGET_SSE; - case FIRST_MMX_REG: + case MM0_REG: if (TARGET_MACHO || TARGET_64BIT) return false; return TARGET_MMX; |