From 539dbd15f3e90c346a11bea734b069e93dd14a55 Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Fri, 20 Dec 2002 04:05:14 +0000 Subject: [PATCH] h8300.md (output_a_shift): Clean up the code to output shifts using rotation. * config/h8300/h8300.md (output_a_shift): Clean up the code to output shifts using rotation. From-SVN: r60353 --- gcc/ChangeLog | 5 +++++ gcc/config/h8300/h8300.c | 36 +++++++++++++++++------------------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 22112f07127..209e12fc496 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-12-19 Kazu Hirata + + * config/h8300/h8300.md (output_a_shift): Clean up the code to + output shifts using rotation. + 2002-12-20 Zdenek Dvorak * flow.c (allocate_reg_life_data): Reset REG_FREQ. diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 078c4a97651..ab2cc1544ed 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -3026,30 +3026,28 @@ output_a_shift (operands) output_asm_insn (info.shift1, operands); /* Now mask off the high bits. */ - if (TARGET_H8300) + switch (mode) { - switch (mode) + case QImode: + sprintf (insn_buf, "and\t#%d,%%X0", mask); + cc_status.value1 = operands[0]; + cc_status.flags |= CC_NO_CARRY; + break; + case HImode: + if (TARGET_H8300) { - case QImode: - sprintf (insn_buf, "and\t#%d,%%X0", mask); - cc_status.value1 = operands[0]; - cc_status.flags |= CC_NO_CARRY; - break; - case HImode: sprintf (insn_buf, "and\t#%d,%%s0\n\tand\t#%d,%%t0", mask & 255, mask >> 8); - break; - default: - abort (); } - } - else - { - sprintf (insn_buf, "and.%c\t#%d,%%%c0", - "bwl"[shift_mode], mask, - mode == QImode ? 'X' : mode == HImode ? 'T' : 'S'); - cc_status.value1 = operands[0]; - cc_status.flags |= CC_NO_CARRY; + else + { + sprintf (insn_buf, "and.w\t#%d,%%T0", mask); + cc_status.value1 = operands[0]; + cc_status.flags |= CC_NO_CARRY; + } + break; + default: + abort (); } output_asm_insn (insn_buf, operands); return ""; -- 2.30.2