aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/m68k
diff options
context:
space:
mode:
authorPeter Barada <peter@the-baradas.com>2004-05-29 15:17:50 +0000
committerBernardo Innocenti <bernie@gcc.gnu.org>2004-05-29 17:17:50 +0200
commit28bad6d14ded53978deea30a09d2a27b0cf35188 (patch)
treeb715490bc817f20b6f9abd58bc2c76176f83e271 /gcc/config/m68k
parentd1fe6168c0c4a9c5bba9e04afea5aad5cc7dc2bb (diff)
downloadgcc-28bad6d14ded53978deea30a09d2a27b0cf35188.zip
gcc-28bad6d14ded53978deea30a09d2a27b0cf35188.tar.gz
gcc-28bad6d14ded53978deea30a09d2a27b0cf35188.tar.bz2
m68k.c (CONST_METHOD): Add MVZ, MVS.
* config/m68k/m68k.c (CONST_METHOD): Add MVZ, MVS. * config/m68k/m68k.c (const_method): Likewise. * config/m68k/m68k.c (const_int_cost): Likewise. * config/m68k/m68k.c (const_int_cost): Likewise. * config/m68k/m68k.c (output_move_const_into_data_reg): Likewise. From-SVN: r82421
Diffstat (limited to 'gcc/config/m68k')
-rw-r--r--gcc/config/m68k/m68k.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/gcc/config/m68k/m68k.c b/gcc/config/m68k/m68k.c
index 69a62a6..89af89e 100644
--- a/gcc/config/m68k/m68k.c
+++ b/gcc/config/m68k/m68k.c
@@ -1470,7 +1470,7 @@ legitimize_pic_address (rtx orig, enum machine_mode mode ATTRIBUTE_UNUSED,
}
-typedef enum { MOVL, SWAP, NEGW, NOTW, NOTB, MOVQ } CONST_METHOD;
+typedef enum { MOVL, SWAP, NEGW, NOTW, NOTB, MOVQ, MVS, MVZ } CONST_METHOD;
static CONST_METHOD const_method (rtx);
@@ -1505,6 +1505,16 @@ const_method (rtx constant)
if (USE_MOVQ ((u >> 16) | (u << 16)))
return SWAP;
}
+
+ if (TARGET_CFV4)
+ {
+ /* Try using MVZ/MVS with an immedaite value to load constants. */
+ if (i >= 0 && i <= 65535)
+ return MVZ;
+ if (i >= -32768 && i <= 32767)
+ return MVS;
+ }
+
/* Otherwise, use move.l */
return MOVL;
}
@@ -1517,6 +1527,8 @@ const_int_cost (rtx constant)
case MOVQ :
/* Constants between -128 and 127 are cheap due to moveq */
return 0;
+ case MVZ:
+ case MVS:
case NOTB :
case NOTW :
case NEGW :
@@ -1661,6 +1673,10 @@ output_move_const_into_data_reg (rtx *operands)
i = INTVAL (operands[1]);
switch (const_method (operands[1]))
{
+ case MVZ:
+ return "mvsw %1,%0";
+ case MVS:
+ return "mvzw %1,%0";
case MOVQ :
return "moveq %1,%0";
case NOTB :