summaryrefslogtreecommitdiff
path: root/gcc/config/arc/arc.c
diff options
context:
space:
mode:
authorpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>2005-09-06 22:26:59 +0000
committerpinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>2005-09-06 22:26:59 +0000
commit8f27db36d31929f99df6efe403a9a0eed7394309 (patch)
tree3a05faf7b9080efca625adaf398cfa8d28c0dd32 /gcc/config/arc/arc.c
parentb2a02a0e4031d2c345354492f3c33a879b495ca7 (diff)
downloadgcc-8f27db36d31929f99df6efe403a9a0eed7394309.tar.gz
2005-09-06 Saurabh Verma <saurabh.verma@codito.com>
PR target/8972 * config/arc/arc.c (output_shift): Add check for loop count when optimizing. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103971 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arc/arc.c')
-rw-r--r--gcc/config/arc/arc.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index 2adf01d0d61..6d8666e4c8f 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -1494,7 +1494,11 @@ output_shift (rtx *operands)
if (GET_CODE (operands[2]) != CONST_INT)
{
if (optimize)
- output_asm_insn ("mov lp_count,%2", operands);
+ {
+ output_asm_insn ("sub.f 0,%2,0", operands);
+ output_asm_insn ("mov lp_count,%2", operands);
+ output_asm_insn ("bz 2f", operands);
+ }
else
output_asm_insn ("mov %4,%2", operands);
goto shiftloop;
@@ -1568,6 +1572,8 @@ output_shift (rtx *operands)
fprintf (asm_out_file, "1:\t%s single insn loop\n",
ASM_COMMENT_START);
output_asm_insn (shift_one, operands);
+ fprintf (asm_out_file, "2:\t%s end single insn loop\n",
+ ASM_COMMENT_START);
}
else
{