aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2011-05-30 20:00:11 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2011-05-30 13:00:11 -0700
commita0cd843f4d76e778d03509bd3aa80a3880ab717f (patch)
tree15a8e619c63ac1d8dc5884be4164334b6bc4abdf /gcc/config
parent006a5f38b96928094f8e359a29a6415cdef1b29f (diff)
downloadgcc-a0cd843f4d76e778d03509bd3aa80a3880ab717f.zip
gcc-a0cd843f4d76e778d03509bd3aa80a3880ab717f.tar.gz
gcc-a0cd843f4d76e778d03509bd3aa80a3880ab717f.tar.bz2
Handle misaligned TFmode load/store.
gcc/ 2011-05-30 H.J. Lu <hongjiu.lu@intel.com> PR target/49168 * config/i386/i386.md (*movtf_internal): Handle misaligned load/store. gcc/testsuite/ 2011-05-30 H.J. Lu <hongjiu.lu@intel.com> PR target/49168 * gcc.target/i386/pr49168-1.c: New. From-SVN: r174451
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.md19
1 files changed, 16 insertions, 3 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 89e1173..6d3ae80 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -2842,10 +2842,23 @@
{
case 0:
case 1:
- if (get_attr_mode (insn) == MODE_V4SF)
- return "%vmovaps\t{%1, %0|%0, %1}";
+ /* Handle misaligned load/store since we don't have movmisaligntf
+ pattern. */
+ if (misaligned_operand (operands[0], TFmode)
+ || misaligned_operand (operands[1], TFmode))
+ {
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "%vmovups\t{%1, %0|%0, %1}";
+ else
+ return "%vmovdqu\t{%1, %0|%0, %1}";
+ }
else
- return "%vmovdqa\t{%1, %0|%0, %1}";
+ {
+ if (get_attr_mode (insn) == MODE_V4SF)
+ return "%vmovaps\t{%1, %0|%0, %1}";
+ else
+ return "%vmovdqa\t{%1, %0|%0, %1}";
+ }
case 2:
return standard_sse_constant_opcode (insn, operands[1]);