i386.c (construct_container): Rewrite processing BLKmode with X86_64_SSE_CLASS.
2009-02-12 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (construct_container): Rewrite processing BLKmode with X86_64_SSE_CLASS. From-SVN: r144128
This commit is contained in:
parent
552af63412
commit
f13eae6a01
2 changed files with 31 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
|||
2009-02-12 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* config/i386/i386.c (construct_container): Rewrite processing
|
||||
BLKmode with X86_64_SSE_CLASS.
|
||||
|
||||
2009-02-12 Paolo Bonzini <bonzini@gnu.org>
|
||||
|
||||
PR target/39152
|
||||
|
|
|
@ -5315,6 +5315,8 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode,
|
|||
/* Otherwise figure out the entries of the PARALLEL. */
|
||||
for (i = 0; i < n; i++)
|
||||
{
|
||||
int pos;
|
||||
|
||||
switch (regclass[i])
|
||||
{
|
||||
case X86_64_NO_CLASS:
|
||||
|
@ -5351,24 +5353,36 @@ construct_container (enum machine_mode mode, enum machine_mode orig_mode,
|
|||
sse_regno++;
|
||||
break;
|
||||
case X86_64_SSE_CLASS:
|
||||
if (i < n - 1 && regclass[i + 1] == X86_64_SSEUP_CLASS)
|
||||
pos = i;
|
||||
switch (n)
|
||||
{
|
||||
if (regclass[i + 2] == X86_64_SSEUP_CLASS
|
||||
|| regclass[i + 3] == X86_64_SSEUP_CLASS)
|
||||
tmpmode = OImode;
|
||||
case 1:
|
||||
tmpmode = DImode;
|
||||
break;
|
||||
case 2:
|
||||
if (i == 0 && regclass[1] == X86_64_SSEUP_CLASS)
|
||||
{
|
||||
tmpmode = TImode;
|
||||
i++;
|
||||
}
|
||||
else
|
||||
tmpmode = TImode;
|
||||
tmpmode = DImode;
|
||||
break;
|
||||
case 4:
|
||||
gcc_assert (i == 0
|
||||
&& regclass[1] == X86_64_SSEUP_CLASS
|
||||
&& regclass[2] == X86_64_SSEUP_CLASS
|
||||
&& regclass[3] == X86_64_SSEUP_CLASS);
|
||||
tmpmode = OImode;
|
||||
i += 3;
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
else
|
||||
tmpmode = DImode;
|
||||
exp [nexps++] = gen_rtx_EXPR_LIST (VOIDmode,
|
||||
gen_rtx_REG (tmpmode,
|
||||
SSE_REGNO (sse_regno)),
|
||||
GEN_INT (i*8));
|
||||
if (tmpmode == OImode)
|
||||
i += 3;
|
||||
else if (tmpmode == TImode)
|
||||
i++;
|
||||
GEN_INT (pos*8));
|
||||
sse_regno++;
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Add table
Reference in a new issue