Index: gcc/testsuite/gcc.target/i386/asm-flag-6.c
===================================================================
--- gcc/testsuite/gcc.target/i386/asm-flag-6.c	(revision 0)
+++ gcc/testsuite/gcc.target/i386/asm-flag-6.c	(working copy)
@@ -0,0 +1,276 @@
+/* Executable testcase for 'output flags.'  */
+/* { dg-do run } */
+
+char TestC ()
+{
+  char r;
+
+  __asm__ ("stc" : "=@ccc"(r));
+  if (r)
+  {
+    __asm__ ("clc" : "=@ccnc"(r));
+    if (r)
+      return 1;
+  }
+  return 0;
+}
+
+char TestE ()
+{
+  char r;
+
+  /* 1 equals 1.  */
+  __asm__ ("cmp $1, %1" : "=@cce"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 not equals 2.  */
+    __asm__ ("cmp $2, %1" : "=@ccne"(r) : "r" (1));
+    if (r)
+      return 1;
+  }
+  return 0;
+}
+
+char TestZ ()
+{
+  char r;
+
+  /* 1 equals 1.  */
+  __asm__ ("cmp $1, %1" : "=@ccz"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 not equals 2.  */
+    __asm__ ("cmp $2, %1" : "=@ccnz"(r) : "r" (1));
+    if (r)
+      return 1;
+  }
+  return 0;
+}
+
+char TestA ()
+{
+  char r;
+
+  /* 1 a 0.  */
+  __asm__ ("cmp $0, %1" : "=@cca"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 na 2.  */
+    __asm__ ("cmp $2, %1" : "=@ccna"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 na 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccna"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestAE ()
+{
+  char r;
+
+  /* 1 ae 0.  */
+  __asm__ ("cmp $0, %1" : "=@ccae"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 nae 2.  */
+    __asm__ ("cmp $2, %1" : "=@ccnae"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 ae 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccae"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestB ()
+{
+  char r;
+
+  /* 1 b 2.  */
+  __asm__ ("cmp $2, %1" : "=@ccb"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 nb 0.  */
+    __asm__ ("cmp $0, %1" : "=@ccnb"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 nb 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccnb"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestBE ()
+{
+  char r;
+
+  /* 1 be 2.  */
+  __asm__ ("cmp $2, %1" : "=@ccbe"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 nbe 0.  */
+    __asm__ ("cmp $0, %1" : "=@ccnbe"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 be 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccbe"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestG ()
+{
+  char r;
+
+  /* 1 g 0.  */
+  __asm__ ("cmp $0, %1" : "=@ccg"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 ng 2.  */
+    __asm__ ("cmp $2, %1" : "=@ccng"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 ng 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccng"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestGE ()
+{
+  char r;
+
+  /* 1 ge 0.  */
+  __asm__ ("cmp $0, %1" : "=@ccge"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 nge 2.  */
+    __asm__ ("cmp $2, %1" : "=@ccnge"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 ge 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccge"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestL ()
+{
+  char r;
+
+  /* 1 l 2.  */
+  __asm__ ("cmp $2, %1" : "=@ccl"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 nl 0.  */
+    __asm__ ("cmp $0, %1" : "=@ccnl"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 nl 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccnl"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestLE ()
+{
+  char r;
+
+  /* 1 le 2.  */
+  __asm__ ("cmp $2, %1" : "=@ccle"(r) : "r" (1));
+  if (r)
+  {
+    /* 1 nle 0.  */
+    __asm__ ("cmp $0, %1" : "=@ccnle"(r) : "r" (1));
+    if (r)
+    {
+      /* 1 le 1.  */
+      __asm__ ("cmp $1, %1" : "=@ccle"(r) : "r" (1));
+      if (r)
+	return 1;
+    }
+  }
+  return 0;
+}
+
+char TestO ()
+{
+  char r;
+  unsigned char res = 128;
+
+  /* overflow.  */
+  __asm__ ("addb $128, %1" : "=@cco"(r), "+r"(res));
+  if (r)
+  {
+    /* not overflow.  */
+    __asm__ ("addb $1, %1" : "=@ccno"(r), "+r"(res));
+    if (r)
+      return 1;
+  }
+  return 0;
+}
+
+char TestP ()
+{
+  char r, res = 1;
+
+  /* even # bits.  */
+  __asm__ ("addb $2, %1" : "=@ccp"(r), "+r"(res));
+  if (r)
+  {
+    /* odd # bits.  */
+    __asm__ ("addb $1, %1" : "=@ccnp"(r), "+r"(res));
+    if (r)
+      return 1;
+  }
+  return 0;
+}
+
+char TestS ()
+{
+  char r, res = 1;
+
+  /* sign bit set.  */
+  __asm__ ("addb $128, %1" : "=@ccs"(r), "+r"(res));
+  if (r)
+  {
+    /* sign bit not set.  */
+    __asm__ ("subb $128, %1" : "=@ccns"(r), "+r"(res));
+    if (r)
+      return 1;
+  }
+  return 0;
+}
+
+/* dg-do treats exit code of 0 as success.  */
+int main ()
+{
+  if (TestC ()  && TestE () && TestZ ()  && TestA ()
+      && TestAE () && TestB () && TestBE () && TestG ()
+      && TestGE () && TestL () && TestLE () && TestO ()
+      && TestP ()  && TestS ())
+    return 0;
+  return 1;
+}
