diff options
author | Peter Barada <peter@the-baradas.com> | 2004-05-29 15:17:50 +0000 |
---|---|---|
committer | Bernardo Innocenti <bernie@gcc.gnu.org> | 2004-05-29 17:17:50 +0200 |
commit | 28bad6d14ded53978deea30a09d2a27b0cf35188 (patch) | |
tree | b715490bc817f20b6f9abd58bc2c76176f83e271 /gcc/config/m68k | |
parent | d1fe6168c0c4a9c5bba9e04afea5aad5cc7dc2bb (diff) | |
download | gcc-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.c | 18 |
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 : |