aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1993-07-30 06:46:33 +0000
committerRichard Stallman <rms@gnu.org>1993-07-30 06:46:33 +0000
commit6d7512e47340cf0451ca674ed78b45375d579163 (patch)
treeb377fbe65932027e2c8c761323fa4dc3e4622209
parent81d57b8e1d9a23be27a1b4affaa03bc6c82d4471 (diff)
downloadgcc-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.md44
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 \"\";
}")