diff options
author | Richard Stallman <rms@gnu.org> | 1993-07-30 06:46:33 +0000 |
---|---|---|
committer | Richard Stallman <rms@gnu.org> | 1993-07-30 06:46:33 +0000 |
commit | 6d7512e47340cf0451ca674ed78b45375d579163 (patch) | |
tree | b377fbe65932027e2c8c761323fa4dc3e4622209 | |
parent | 81d57b8e1d9a23be27a1b4affaa03bc6c82d4471 (diff) | |
download | gcc-6d7512e47340cf0451ca674ed78b45375d579163.zip gcc-6d7512e47340cf0451ca674ed78b45375d579163.tar.gz gcc-6d7512e47340cf0451ca674ed78b45375d579163.tar.bz2 |
(ffssi2 and ffshi2 recognizers): Generate unique labels by hand.
From-SVN: r5041
-rw-r--r-- | gcc/config/i386/i386.md | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index cda3150..f0a0498 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -4461,15 +4461,33 @@ "* { rtx xops[3]; + static int ffssi_label_number; + char buffer[30]; xops[0] = operands[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); +#ifdef LOCAL_LABEL_PREFIX + sprintf (buffer, \"jnz %sLFFSSI%d\", + LOCAL_LABEL_PREFIX, ffssi_label_number); +#else + sprintf (buffer, \"jnz %sLFFSSI%d\", + \"\", ffssi_label_number); +#endif + output_asm_insn (buffer, xops); output_asm_insn (AS2 (mov%L0,%2,%0), xops); - output_asm_insn (\"1:\", xops); +#ifdef LOCAL_LABEL_PREFIX + sprintf (buffer, \"%sLFFSSI%d:\", + LOCAL_LABEL_PREFIX, ffssi_label_number); +#else + sprintf (buffer, \"%sLFFSSI%d:\", + \"\", ffssi_label_number); +#endif + output_asm_insn (buffer, xops); + + ffssi_label_number++; return \"\"; }") @@ -4490,14 +4508,32 @@ "* { rtx xops[3]; + static int ffshi_label_number; + char buffer[30]; xops[0] = operands[0]; xops[1] = operands[1]; xops[2] = constm1_rtx; output_asm_insn (AS2 (bsf%W0,%1,%0), xops); - output_asm_insn (\"jnz 1f\", xops); +#ifdef LOCAL_LABEL_PREFIX + sprintf (buffer, \"jnz %sLFFSHI%d\", + LOCAL_LABEL_PREFIX, ffshi_label_number); +#else + sprintf (buffer, \"jnz %sLFFSHI%d\", + \"\", ffshi_label_number); +#endif + output_asm_insn (buffer, xops); output_asm_insn (AS2 (mov%W0,%2,%0), xops); - output_asm_insn (\"1:\", xops); +#ifdef LOCAL_LABEL_PREFIX + sprintf (buffer, \"%sLFFSHI%d:\", + LOCAL_LABEL_PREFIX, ffshi_label_number); +#else + sprintf (buffer, \"%sLFFSHI%d:\", + \"\", ffshi_label_number); +#endif + output_asm_insn (buffer, xops); + + ffshi_label_number++; return \"\"; }") |