aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-02-17 23:33:10 +0000
committerRichard Stallman <rms@gnu.org>1993-02-17 23:33:10 +0000
commitabc1d3f177dd5824bb9c5bb99abd177c2ee6f5be (patch)
tree440d780e8f166c7a9ed8e9caaf6418413da17b3c
parent4de54e922f4123559dba5215e0cd160dd7bcd264 (diff)
downloadgcc-abc1d3f177dd5824bb9c5bb99abd177c2ee6f5be.zip
gcc-abc1d3f177dd5824bb9c5bb99abd177c2ee6f5be.tar.gz
gcc-abc1d3f177dd5824bb9c5bb99abd177c2ee6f5be.tar.bz2
(truncdfsf2, extendsfdf2): Changed from define_insn to expand_insn.
Eliminated a jmp pattern and the peephole patterns which are no longer needed now that deferred addressing is supported. From-SVN: r3483
-rw-r--r--gcc/config/we32k/we32k.md83
1 files changed, 28 insertions, 55 deletions
diff --git a/gcc/config/we32k/we32k.md b/gcc/config/we32k/we32k.md
index 78e8d4e..6b175d0 100644
--- a/gcc/config/we32k/we32k.md
+++ b/gcc/config/we32k/we32k.md
@@ -802,24 +802,29 @@
;; truncate instructions
-(define_insn "truncdfsf2"
- [(clobber (reg:SI 0))
+(define_insn ""
+ [(set (match_operand:SF 0 "register_operand" "=r")
+ (float_truncate:SF (match_operand:DF 1 "general_operand" "orF")))
(clobber (reg:SI 1))
- (clobber (reg:SI 2))
- (set (match_operand:SF 0 "nonimmediate_operand" "=mr")
- (float_truncate:SF (match_operand:DF 1 "general_operand" "orF")))]
- ""
+ (clobber (reg:SI 2))]
+ "REGNO (operands[0]) == 0"
"*
{
output_push_double(&operands[1]);
output_asm_insn(\"call &2, _fdtos\");
- if (GET_CODE (operands[0]) != REG || REGNO (operands[0]) != 0)
- output_asm_insn(\"movw %%r0, %0\", operands);
-
return \"\";
}")
+(define_expand "truncdfsf2"
+ [(parallel [(set (reg:SF 0)
+ (float_truncate:SF (match_operand:DF 1 "general_operand" "orF")))
+ (clobber (reg:SI 1))
+ (clobber (reg:SI 2))])
+ (set (match_operand:SF 0 "nonimmediate_operand" "=mr")
+ (reg:SF 0))]
+ ""
+ "")
(define_insn "truncsihi2"
[(set (match_operand:HI 0 "nonimmediate_operand" "=mr")
@@ -841,29 +846,28 @@
;; sign-extend move instructions
-(define_insn "extendsfdf2"
- [(clobber (reg:SI 0))
- (clobber (reg:SI 1))
- (clobber (reg:SI 2))
- (set (match_operand:DF 0 "nonimmediate_operand" "=or")
- (float_extend:DF (match_operand:SF 1 "general_operand" "mrF")))]
- ""
+(define_insn ""
+ [(set (match_operand:DF 0 "register_operand" "=r")
+ (float_extend:DF (match_operand:SF 1 "general_operand" "mrF")))
+ (clobber (reg:SI 2))]
+ "REGNO (operands[0]) == 0"
"*
{
- rtx xoperands[2];
-
output_asm_insn(\"pushw %1\", operands);
output_asm_insn(\"call &1, _fstod\");
- if (GET_CODE (operands[0]) != REG || REGNO (operands[0]) != 0) {
- xoperands[0] = operands[0];
- xoperands[1] = gen_rtx(REG, DFmode, 0);
- output_move_double(xoperands);
- }
-
return \"\";
}")
+(define_expand "extendsfdf2"
+ [(parallel [(set (reg:DF 0)
+ (float_extend:DF (match_operand:SF 1 "general_operand" "mrF")))
+ (clobber (reg:SI 2))])
+ (set (match_operand:DF 0 "nonimmediate_operand" "=or")
+ (reg:DF 0))]
+ ""
+ "")
+
(define_insn "extendhisi2"
[(set (match_operand:SI 0 "nonimmediate_operand" "=mr")
(sign_extend:SI (match_operand:HI 1 "general_operand" "mri")))]
@@ -1189,11 +1193,6 @@
;; jump instructions
-(define_insn ""
- [(set (pc) (mem:SI (match_operand:SI 0 "address_operand" "p")))]
- "GET_CODE (operands[0]) != MEM"
- "jmp *%a0")
-
(define_insn "indirect_jump"
[(set (pc) (match_operand:SI 0 "address_operand" "p"))]
""
@@ -1203,29 +1202,3 @@
[(set (pc) (label_ref (match_operand 0 "" "")))]
""
"jmp %l0")
-
-;; peephole optimizations
-
-(define_peephole
- [(set (match_operand:SI 0 "register_operand" "=r")
- (match_operand:SI 1 "nonimmediate_operand" "or"))
- (set (match_operand:SI 2 "register_operand" "=r")
- (mem:SI (match_dup 0)))]
- "REGNO (operands[0]) == REGNO (operands[2]) && (REG_P (operands[1]) || offsettable_memref_p (operands[1]))"
- "movw %a1, %0")
-
-(define_peephole
- [(set (match_operand:SI 0 "register_operand" "=r")
- (match_operand:SI 1 "nonimmediate_operand" "or"))
- (set (match_operand:HI 2 "register_operand" "=r")
- (mem:HI (match_dup 0)))]
- "REGNO (operands[0]) == REGNO (operands[2]) && (REG_P (operands[1]) || offsettable_memref_p (operands[1]))"
- "movh %a1, %0")
-
-(define_peephole
- [(set (match_operand:SI 0 "register_operand" "=r")
- (match_operand:SI 1 "nonimmediate_operand" "or"))
- (set (match_operand:QI 2 "register_operand" "=r")
- (mem:QI (match_dup 0)))]
- "REGNO (operands[0]) == REGNO (operands[2]) && (REG_P (operands[1]) || offsettable_memref_p (operands[1]))"
- "movb %a1, %0")