i386.c (ix86_value_regno): Don't return FIRST_MMX_REG if !TARGET_MMX...
* config/i386/i386.c (ix86_value_regno): Don't return FIRST_MMX_REG if !TARGET_MMX, and don't return FIRST_SSE_REG if !TARGET_SSE. From-SVN: r116321
This commit is contained in:
parent
173c3aa1f4
commit
883259c6d3
2 changed files with 12 additions and 5 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2006-08-22 Roger Sayle <roger@eyesopen.com>
|
||||||
|
|
||||||
|
* config/i386/i386.c (ix86_value_regno): Don't return FIRST_MMX_REG
|
||||||
|
if !TARGET_MMX, and don't return FIRST_SSE_REG if !TARGET_SSE.
|
||||||
|
|
||||||
2006-08-21 Jason Merrill <jason@redhat.com>
|
2006-08-21 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
PR c++/27115
|
PR c++/27115
|
||||||
|
|
|
@ -3980,14 +3980,16 @@ ix86_value_regno (enum machine_mode mode, tree func, tree fntype)
|
||||||
gcc_assert (!TARGET_64BIT);
|
gcc_assert (!TARGET_64BIT);
|
||||||
|
|
||||||
/* 8-byte vector modes in %mm0. See ix86_return_in_memory for where
|
/* 8-byte vector modes in %mm0. See ix86_return_in_memory for where
|
||||||
we prevent this case when mmx is not available. */
|
we normally prevent this case when mmx is not available. However
|
||||||
if ((VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8))
|
some ABIs may require the result to be returned like DImode. */
|
||||||
return FIRST_MMX_REG;
|
if (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 8)
|
||||||
|
return TARGET_MMX ? FIRST_MMX_REG : 0;
|
||||||
|
|
||||||
/* 16-byte vector modes in %xmm0. See ix86_return_in_memory for where
|
/* 16-byte vector modes in %xmm0. See ix86_return_in_memory for where
|
||||||
we prevent this case when sse is not available. */
|
we prevent this case when sse is not available. However some ABIs
|
||||||
|
may require the result to be returned like integer TImode. */
|
||||||
if (mode == TImode || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
|
if (mode == TImode || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
|
||||||
return FIRST_SSE_REG;
|
return TARGET_SSE ? FIRST_SSE_REG : 0;
|
||||||
|
|
||||||
/* Decimal floating point values can go in %eax, unlike other float modes. */
|
/* Decimal floating point values can go in %eax, unlike other float modes. */
|
||||||
if (DECIMAL_FLOAT_MODE_P (mode))
|
if (DECIMAL_FLOAT_MODE_P (mode))
|
||||||
|
|
Loading…
Add table
Reference in a new issue