aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJoern Rennecke <amylaar@gcc.gnu.org>1997-01-29 23:15:10 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>1997-01-29 23:15:10 +0000
commit27232d288515c2f3c5fa15680463f1fb6593625f (patch)
treec85d6931aff0e3451be7098cc3f0bb97549bb816 /gcc
parentf8aa1f6e5d235634794cf5b494b7251e0eb34fe1 (diff)
downloadgcc-27232d288515c2f3c5fa15680463f1fb6593625f.zip
gcc-27232d288515c2f3c5fa15680463f1fb6593625f.tar.gz
gcc-27232d288515c2f3c5fa15680463f1fb6593625f.tar.bz2
sh.md (movsi_i, movsi_ie, movhi_i, movhi+1): Use type pcload for immediate operands where appropriate.
sh.md (movsi_i, movsi_ie, movhi_i, movhi+1): Use type pcload for immediate operands where appropriate. (movsf_ie+1): Fail when loading anything but a MEM into a floating point reguister. From-SVN: r13566
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sh/sh.md14
1 files changed, 8 insertions, 6 deletions
diff --git a/gcc/config/sh/sh.md b/gcc/config/sh/sh.md
index 1459807..c9ce22a 100644
--- a/gcc/config/sh/sh.md
+++ b/gcc/config/sh/sh.md
@@ -1504,7 +1504,7 @@
lds %1,%0
lds.l %1,%0
fake %1,%0"
- [(set_attr "type" "move,pcload,move,load,move,store,store,move,load,move,move")
+ [(set_attr "type" "move,pcload,move,load,move,store,store,move,load,move,pcload")
(set_attr "length" "8,*,*,*,*,*,*,*,*,*,*")])
;; t/z is first, so that it will be preferred over r/r when reloading a move
@@ -1531,7 +1531,7 @@
fake %1,%0
lds %1,%0
sts %1,%0"
- [(set_attr "type" "move,pcload,move,load,move,store,store,move,load,move,move,move,move")
+ [(set_attr "type" "move,pcload,move,load,move,store,store,move,load,move,pcload,move,move")
(set_attr "length" "8,*,*,*,*,*,*,*,*,*,*,*,*")])
(define_expand "movsi"
@@ -1574,7 +1574,7 @@
sts %1,%0
lds %1,%0
fake %1,%0"
- [(set_attr "type" "pcload,move,load,move,store,move,move,move")])
+ [(set_attr "type" "pcload,move,load,move,store,move,move,pcload")])
(define_expand "movhi"
[(set (match_operand:HI 0 "general_movdst_operand" "")
@@ -1585,13 +1585,13 @@
;; ??? This should be a define expand.
(define_insn ""
- [(set (match_operand:DI 0 "general_movdst_operand" "=r,r,r,m,r,r")
- (match_operand:DI 1 "general_movsrc_operand" "Q,r,m,r,i,x"))]
+ [(set (match_operand:DI 0 "general_movdst_operand" "=r,r,r,m,r,r,r")
+ (match_operand:DI 1 "general_movsrc_operand" "Q,r,m,r,I,i,x"))]
"arith_reg_operand (operands[0], DImode)
|| arith_reg_operand (operands[1], DImode)"
"* return output_movedouble (insn, operands, DImode);"
[(set_attr "length" "4")
- (set_attr "type" "pcload,move,load,store,move,move")])
+ (set_attr "type" "pcload,move,load,store,move,pcload,move")])
;; If the output is a register and the input is memory or a register, we have
;; to be careful and see which word needs to be loaded first.
@@ -1819,6 +1819,8 @@
{
if (REGNO (operands[0]) >= FIRST_FP_REG && REGNO (operands[0]) <= LAST_FP_REG)
{
+ if (GET_CODE (operands[1]) != MEM)
+ FAIL;
emit_insn (gen_mova (XEXP (operands[1], 0)));
XEXP (operands[1], 0) = gen_rtx (REG, Pmode, 0);
}