aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1994-10-10 19:19:32 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1994-10-10 19:19:32 -0400
commitb9bcad654a75c6340f5080f31151363f751e1b18 (patch)
tree7f2b3bcf3080b9a738ceb3618c575f04bdedff1c
parenta93738eb45d6c0fc40f067bb6b23346602a2d7d0 (diff)
downloadgcc-b9bcad654a75c6340f5080f31151363f751e1b18.zip
gcc-b9bcad654a75c6340f5080f31151363f751e1b18.tar.gz
gcc-b9bcad654a75c6340f5080f31151363f751e1b18.tar.bz2
(convert_move): Add TImode conversions.
From-SVN: r8248
-rw-r--r--gcc/expr.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index ea971a5..364789d 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -1199,6 +1199,58 @@ convert_move (to, from, unsignedp)
return;
}
+ if (from_mode == TImode && to_mode == DImode)
+ {
+#ifdef HAVE_trunctidi2
+ if (HAVE_trunctidi2)
+ {
+ emit_unop_insn (CODE_FOR_trunctidi2, to, from, UNKNOWN);
+ return;
+ }
+#endif
+ convert_move (to, force_reg (from_mode, from), unsignedp);
+ return;
+ }
+
+ if (from_mode == TImode && to_mode == SImode)
+ {
+#ifdef HAVE_trunctisi2
+ if (HAVE_trunctisi2)
+ {
+ emit_unop_insn (CODE_FOR_trunctisi2, to, from, UNKNOWN);
+ return;
+ }
+#endif
+ convert_move (to, force_reg (from_mode, from), unsignedp);
+ return;
+ }
+
+ if (from_mode == TImode && to_mode == HImode)
+ {
+#ifdef HAVE_trunctihi2
+ if (HAVE_trunctihi2)
+ {
+ emit_unop_insn (CODE_FOR_trunctihi2, to, from, UNKNOWN);
+ return;
+ }
+#endif
+ convert_move (to, force_reg (from_mode, from), unsignedp);
+ return;
+ }
+
+ if (from_mode == TImode && to_mode == QImode)
+ {
+#ifdef HAVE_trunctiqi2
+ if (HAVE_trunctiqi2)
+ {
+ emit_unop_insn (CODE_FOR_trunctiqi2, to, from, UNKNOWN);
+ return;
+ }
+#endif
+ convert_move (to, force_reg (from_mode, from), unsignedp);
+ return;
+ }
+
/* Handle truncation of volatile memrefs, and so on;
the things that couldn't be truncated directly,
and for which there was no special instruction. */