diff options
Diffstat (limited to 'gcc/config/m88k/m88k.md')
-rw-r--r-- | gcc/config/m88k/m88k.md | 87 |
1 files changed, 38 insertions, 49 deletions
diff --git a/gcc/config/m88k/m88k.md b/gcc/config/m88k/m88k.md index 118ebe366da..edab3f706ae 100644 --- a/gcc/config/m88k/m88k.md +++ b/gcc/config/m88k/m88k.md @@ -1,5 +1,5 @@ ;;- Machine description for the Motorola 88000 for GNU C compiler -;;; Copyright (C) 1988, 92, 93, 94, 95, 1996 Free Software Foundation, Inc. +;;; Copyright (C) 1988, 92-96, 1999 Free Software Foundation, Inc. ;; Contributed by Michael Tiemann (tiemann@mcc.com) ;; Currently maintained by (gcc@dg-rtp.dg.com) @@ -759,7 +759,7 @@ (define_insn "" [(set (match_operand:CCEVEN 0 "register_operand" "=r") - (rotate:CC (match_operand 1 "partial_ccmode_register_operand" "r") + (rotate:CCEVEN (match_operand 1 "partial_ccmode_register_operand" "r") (match_operand:CC 2 "int5_operand" "")))] "" "rot %0,%1,%2" @@ -782,7 +782,7 @@ (define_insn "" [(set (match_operand:CCEVEN 0 "register_operand" "=r") - (ior:CC (rotate:CC (match_operand 1 "partial_ccmode_register_operand" "r") + (ior:CCEVEN (rotate:CC (match_operand 1 "partial_ccmode_register_operand" "r") (match_operand:CC 2 "int5_operand" "")) (match_operand 3 "partial_ccmode_register_operand" "r"))) (clobber (match_scratch:CCEVEN 4 "=r"))] @@ -2129,60 +2129,49 @@ DONE; }") +;; ??? We shouldn't be allowing such mode mismatches (define_insn "" - [(set (match_operand:QI 0 "register_operand" "=r") - (match_operand:BLK 1 "memory_operand" "m"))] - "" - "%V1ld.bu\\t %0,%1" - [(set_attr "type" "load")]) - -(define_insn "" - [(set (match_operand:HI 0 "register_operand" "=r") + [(set (match_operand 0 "register_operand" "=r") (match_operand:BLK 1 "memory_operand" "m"))] "" - "%V1ld.hu\\t %0,%1" - [(set_attr "type" "load")]) - -(define_insn "" - [(set (match_operand:SI 0 "register_operand" "=r") - (match_operand:BLK 1 "memory_operand" "m"))] - "" - "%V1ld\\t %0,%1" + "* +{ + switch (GET_MODE (operands[0])) + { + case QImode: + return \"%V1ld.bu\\t %0,%1\"; + case HImode: + return \"%V1ld.hu\\t %0,%1\"; + case SImode: + return \"%V1ld\\t %0,%1\"; + case DImode: + return \"%V1ld.d\\t %0,%1\"; + default: + abort (); + } +}" [(set_attr "type" "load")]) (define_insn "" - [(set (match_operand:DI 0 "register_operand" "=r") - (match_operand:BLK 1 "memory_operand" "m"))] - "" - "%V1ld.d\\t %0,%1" - [(set_attr "type" "loadd")]) - -(define_insn "" - [(set (match_operand:BLK 0 "memory_operand" "=m") - (match_operand:QI 1 "register_operand" "r"))] - "" - "%v0st.b\\t %1,%0" - [(set_attr "type" "store")]) - -(define_insn "" [(set (match_operand:BLK 0 "memory_operand" "=m") - (match_operand:HI 1 "register_operand" "r"))] + (match_operand 1 "register_operand" "r"))] "" - "%v0st.h\\t %1,%0" - [(set_attr "type" "store")]) - -(define_insn "" - [(set (match_operand:BLK 0 "memory_operand" "=m") - (match_operand:SI 1 "register_operand" "r"))] - "" - "%v0st\\t %1,%0" - [(set_attr "type" "store")]) - -(define_insn "" - [(set (match_operand:BLK 0 "memory_operand" "=m") - (match_operand:DI 1 "register_operand" "r"))] - "" - "%v0st.d\\t %1,%0" + "* +{ + switch (GET_MODE (operands[1])) + { + case QImode: + return \"%v0st.b\\t %1,%0\"; + case HImode: + return \"%v0st.h\\t %1,%0\"; + case SImode: + return \"%v0st\\t %1,%0\"; + case DImode: + return \"%v0st.d\\t %1,%0\"; + default: + abort (); + } +}" [(set_attr "type" "store")]) ;; Call a non-looping block move library function (e.g. __movstrSI96x64). |