From e6bcfef93acf89ff924dbe47b31dc923f27a584b Mon Sep 17 00:00:00 2001 From: Juha Sarlin Date: Wed, 10 Jun 1998 02:41:51 +0200 Subject: [PATCH] * h8300.c (get_shift_alg): Add special cases for shifts of 8 and 24. From-SVN: r20396 --- gcc/ChangeLog | 4 ++++ gcc/config/h8300/h8300.c | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db2fa7d2d31..18b99650e55 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Wed Jun 10 01:39:00 1998 Juha Sarlin + + * h8300.c (get_shift_alg): Add special cases for shifts of 8 and 24. + Tue Jun 9 22:05:34 1998 Richard Henderson * fold-const.c (fold): Even with otherwise constant trees, look for diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 8ff9ec460f9..a3af135f426 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -1,5 +1,5 @@ /* Subroutines for insn-output.c for Hitachi H8/300. - Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. + Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Steve Chamberlain (sac@cygnus.com), Jim Wilson (wilson@cygnus.com), and Doug Evans (dje@cygnus.com). @@ -2378,6 +2378,24 @@ get_shift_alg (cpu, shift_type, mode, count, assembler_p, return SHIFT_SPECIAL; } } + else if (count == 8 && !TARGET_H8300) + { + switch (shift_type) + { + case SHIFT_ASHIFT: + *assembler_p = "mov.w\t%e0,%f4\n\tmov.b\t%s4,%t4\n\tmov.b\t%t0,%s4\n\tmov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tmov.w\t%f4,%e0"; + *cc_valid_p = 0; + return SHIFT_SPECIAL; + case SHIFT_LSHIFTRT: + *assembler_p = "mov.w\t%e0,%f4\n\tmov.b\t%t0,%s0\n\tmov.b\t%s4,%t0\n\tmov.b\t%t4,%s4\n\textu.w\t%f4\n\tmov.w\t%f4,%e0"; + *cc_valid_p = 0; + return SHIFT_SPECIAL; + case SHIFT_ASHIFTRT: + *assembler_p = "mov.w\t%e0,%f4\n\tmov.b\t%t0,%s0\n\tmov.b\t%s4,%t0\n\tmov.b\t%t4,%s4\n\texts.w\t%f4\n\tmov.w\t%f4,%e0"; + *cc_valid_p = 0; + return SHIFT_SPECIAL; + } + } else if (count == 16) { switch (shift_type) @@ -2489,6 +2507,24 @@ get_shift_alg (cpu, shift_type, mode, count, assembler_p, return SHIFT_SPECIAL; } } + else if (count == 24 && !TARGET_H8300) + { + switch (shift_type) + { + case SHIFT_ASHIFT: + *assembler_p = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tmov.w\t%f0,%e0\n\tsub.w\t%f0,%f0"; + *cc_valid_p = 0; + return SHIFT_SPECIAL; + case SHIFT_LSHIFTRT: + *assembler_p = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\textu.w\t%f0\n\textu.l\t%S0"; + *cc_valid_p = 0; + return SHIFT_SPECIAL; + case SHIFT_ASHIFTRT: + *assembler_p = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\texts.w\t%f0\n\texts.l\t%S0"; + *cc_valid_p = 0; + return SHIFT_SPECIAL; + } + } else if (count >= 28 && count <= 30 && !TARGET_H8300) { if (shift_type == SHIFT_ASHIFTRT) -- 2.30.2