From 7a87bc57141f13a09196ae48a4cabc120f5f45b6 Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Tue, 13 Jul 1993 07:34:25 +0000 Subject: [PATCH] (ffssi2, ffshi2): Assume bsf produces garbage if input is 0. (ffssi2, ffshi2): Assume bsf produces garbage if input is 0. Use jumps to load output in that case. From-SVN: r4911 --- gcc/config/i386/i386.md | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 3b91864c1e9..983f49734f8 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4460,12 +4460,17 @@ "" "* { - rtx xops[2]; + rtx xops[3]; xops[0] = operands[0]; - xops[1] = constm1_rtx; - output_asm_insn (AS2 (mov%L0,%1,%0), xops); - return AS2 (bsf%L0,%1,%0); + xops[1] = operands[1]; + xops[2] = constm1_rtx; + /* Can there be a way to avoid the jump here? */ + output_asm_insn (AS2 (bsf%L0,%1,%0), xops); + output_asm_insn (\"jnz 1f\", xops); + output_asm_insn (AS2 (mov%L0,%2,%0), xops); + output_asm_insn (\"1:\", xops); + return \"\"; }") (define_expand "ffshi2" @@ -4484,12 +4489,16 @@ "" "* { - rtx xops[2]; + rtx xops[3]; xops[0] = operands[0]; - xops[1] = constm1_rtx; - output_asm_insn (AS2 (mov%W0,%1,%0), xops); - return AS2 (bsf%W0,%1,%0); + xops[1] = operands[1]; + xops[2] = constm1_rtx; + output_asm_insn (AS2 (bsf%W0,%1,%0), xops); + output_asm_insn (\"jnz 1f\", xops); + output_asm_insn (AS2 (mov%W0,%2,%0), xops); + output_asm_insn (\"1:\", xops); + return \"\"; }") ;; These patterns match the binary 387 instructions for addM3, subM3, -- 2.30.2