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
This commit is contained in:
Uros Bizjak 2013-10-19 14:58:20 +02:00 committed by Uros Bizjak
parent c07757e536
commit 6eb793dd0f
2 changed files with 18 additions and 3 deletions

View File

@ -1,3 +1,10 @@
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> 2013-10-19 Uros Bizjak <ubizjak@gmail.com>
* mode-switching.c (create_pre_exit): Rename maybe_builtin_apply * mode-switching.c (create_pre_exit): Rename maybe_builtin_apply

View File

@ -7393,9 +7393,15 @@ ix86_function_value_regno_p (const unsigned int regno)
switch (regno) switch (regno)
{ {
case AX_REG: case AX_REG:
case DX_REG:
return true; 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 /* TODO: The function should depend on current function ABI but
builtins.c would need updating then. Therefore we use the builtins.c would need updating then. Therefore we use the
default ABI. */ default ABI. */
@ -7403,10 +7409,12 @@ ix86_function_value_regno_p (const unsigned int regno)
return false; return false;
return TARGET_FLOAT_RETURNS_IN_80387; 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; return TARGET_SSE;
case FIRST_MMX_REG: case MM0_REG:
if (TARGET_MACHO || TARGET_64BIT) if (TARGET_MACHO || TARGET_64BIT)
return false; return false;
return TARGET_MMX; return TARGET_MMX;