(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
This commit is contained in:
Richard Stallman 1993-07-13 07:34:25 +00:00
parent da3c61151d
commit 7a87bc5714
1 changed files with 17 additions and 8 deletions

View File

@ -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,