(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:
parent
da3c61151d
commit
7a87bc5714
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue