(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
asm-flag-6.c
       1  /* Executable testcase for 'output flags.'  */
       2  /* { dg-do run } */
       3  
       4  char TestC ()
       5  {
       6    char r;
       7  
       8    __asm__ ("stc" : "=@ccc"(r));
       9    if (r)
      10    {
      11      __asm__ ("clc" : "=@ccnc"(r));
      12      if (r)
      13        return 1;
      14    }
      15    return 0;
      16  }
      17  
      18  char TestE ()
      19  {
      20    char r;
      21  
      22    /* 1 equals 1.  */
      23    __asm__ ("cmp $1, %1" : "=@cce"(r) : "r" (1));
      24    if (r)
      25    {
      26      /* 1 not equals 2.  */
      27      __asm__ ("cmp $2, %1" : "=@ccne"(r) : "r" (1));
      28      if (r)
      29        return 1;
      30    }
      31    return 0;
      32  }
      33  
      34  char TestZ ()
      35  {
      36    char r;
      37  
      38    /* 1 equals 1.  */
      39    __asm__ ("cmp $1, %1" : "=@ccz"(r) : "r" (1));
      40    if (r)
      41    {
      42      /* 1 not equals 2.  */
      43      __asm__ ("cmp $2, %1" : "=@ccnz"(r) : "r" (1));
      44      if (r)
      45        return 1;
      46    }
      47    return 0;
      48  }
      49  
      50  char TestA ()
      51  {
      52    char r;
      53  
      54    /* 1 a 0.  */
      55    __asm__ ("cmp $0, %1" : "=@cca"(r) : "r" (1));
      56    if (r)
      57    {
      58      /* 1 na 2.  */
      59      __asm__ ("cmp $2, %1" : "=@ccna"(r) : "r" (1));
      60      if (r)
      61      {
      62        /* 1 na 1.  */
      63        __asm__ ("cmp $1, %1" : "=@ccna"(r) : "r" (1));
      64        if (r)
      65  	return 1;
      66      }
      67    }
      68    return 0;
      69  }
      70  
      71  char TestAE ()
      72  {
      73    char r;
      74  
      75    /* 1 ae 0.  */
      76    __asm__ ("cmp $0, %1" : "=@ccae"(r) : "r" (1));
      77    if (r)
      78    {
      79      /* 1 nae 2.  */
      80      __asm__ ("cmp $2, %1" : "=@ccnae"(r) : "r" (1));
      81      if (r)
      82      {
      83        /* 1 ae 1.  */
      84        __asm__ ("cmp $1, %1" : "=@ccae"(r) : "r" (1));
      85        if (r)
      86  	return 1;
      87      }
      88    }
      89    return 0;
      90  }
      91  
      92  char TestB ()
      93  {
      94    char r;
      95  
      96    /* 1 b 2.  */
      97    __asm__ ("cmp $2, %1" : "=@ccb"(r) : "r" (1));
      98    if (r)
      99    {
     100      /* 1 nb 0.  */
     101      __asm__ ("cmp $0, %1" : "=@ccnb"(r) : "r" (1));
     102      if (r)
     103      {
     104        /* 1 nb 1.  */
     105        __asm__ ("cmp $1, %1" : "=@ccnb"(r) : "r" (1));
     106        if (r)
     107  	return 1;
     108      }
     109    }
     110    return 0;
     111  }
     112  
     113  char TestBE ()
     114  {
     115    char r;
     116  
     117    /* 1 be 2.  */
     118    __asm__ ("cmp $2, %1" : "=@ccbe"(r) : "r" (1));
     119    if (r)
     120    {
     121      /* 1 nbe 0.  */
     122      __asm__ ("cmp $0, %1" : "=@ccnbe"(r) : "r" (1));
     123      if (r)
     124      {
     125        /* 1 be 1.  */
     126        __asm__ ("cmp $1, %1" : "=@ccbe"(r) : "r" (1));
     127        if (r)
     128  	return 1;
     129      }
     130    }
     131    return 0;
     132  }
     133  
     134  char TestG ()
     135  {
     136    char r;
     137  
     138    /* 1 g 0.  */
     139    __asm__ ("cmp $0, %1" : "=@ccg"(r) : "r" (1));
     140    if (r)
     141    {
     142      /* 1 ng 2.  */
     143      __asm__ ("cmp $2, %1" : "=@ccng"(r) : "r" (1));
     144      if (r)
     145      {
     146        /* 1 ng 1.  */
     147        __asm__ ("cmp $1, %1" : "=@ccng"(r) : "r" (1));
     148        if (r)
     149  	return 1;
     150      }
     151    }
     152    return 0;
     153  }
     154  
     155  char TestGE ()
     156  {
     157    char r;
     158  
     159    /* 1 ge 0.  */
     160    __asm__ ("cmp $0, %1" : "=@ccge"(r) : "r" (1));
     161    if (r)
     162    {
     163      /* 1 nge 2.  */
     164      __asm__ ("cmp $2, %1" : "=@ccnge"(r) : "r" (1));
     165      if (r)
     166      {
     167        /* 1 ge 1.  */
     168        __asm__ ("cmp $1, %1" : "=@ccge"(r) : "r" (1));
     169        if (r)
     170  	return 1;
     171      }
     172    }
     173    return 0;
     174  }
     175  
     176  char TestL ()
     177  {
     178    char r;
     179  
     180    /* 1 l 2.  */
     181    __asm__ ("cmp $2, %1" : "=@ccl"(r) : "r" (1));
     182    if (r)
     183    {
     184      /* 1 nl 0.  */
     185      __asm__ ("cmp $0, %1" : "=@ccnl"(r) : "r" (1));
     186      if (r)
     187      {
     188        /* 1 nl 1.  */
     189        __asm__ ("cmp $1, %1" : "=@ccnl"(r) : "r" (1));
     190        if (r)
     191  	return 1;
     192      }
     193    }
     194    return 0;
     195  }
     196  
     197  char TestLE ()
     198  {
     199    char r;
     200  
     201    /* 1 le 2.  */
     202    __asm__ ("cmp $2, %1" : "=@ccle"(r) : "r" (1));
     203    if (r)
     204    {
     205      /* 1 nle 0.  */
     206      __asm__ ("cmp $0, %1" : "=@ccnle"(r) : "r" (1));
     207      if (r)
     208      {
     209        /* 1 le 1.  */
     210        __asm__ ("cmp $1, %1" : "=@ccle"(r) : "r" (1));
     211        if (r)
     212  	return 1;
     213      }
     214    }
     215    return 0;
     216  }
     217  
     218  char TestO ()
     219  {
     220    char r;
     221    unsigned char res = 128;
     222  
     223    /* overflow.  */
     224    __asm__ ("addb $128, %1" : "=@cco"(r), "+r"(res));
     225    if (r)
     226    {
     227      /* not overflow.  */
     228      __asm__ ("addb $1, %1" : "=@ccno"(r), "+r"(res));
     229      if (r)
     230        return 1;
     231    }
     232    return 0;
     233  }
     234  
     235  char TestP ()
     236  {
     237    char r, res = 1;
     238  
     239    /* even # bits.  */
     240    __asm__ ("addb $2, %1" : "=@ccp"(r), "+r"(res));
     241    if (r)
     242    {
     243      /* odd # bits.  */
     244      __asm__ ("addb $1, %1" : "=@ccnp"(r), "+r"(res));
     245      if (r)
     246        return 1;
     247    }
     248    return 0;
     249  }
     250  
     251  char TestS ()
     252  {
     253    char r, res = 1;
     254  
     255    /* sign bit set.  */
     256    __asm__ ("addb $128, %1" : "=@ccs"(r), "+r"(res));
     257    if (r)
     258    {
     259      /* sign bit not set.  */
     260      __asm__ ("subb $128, %1" : "=@ccns"(r), "+r"(res));
     261      if (r)
     262        return 1;
     263    }
     264    return 0;
     265  }
     266  
     267  /* dg-do treats exit code of 0 as success.  */
     268  int main ()
     269  {
     270    if (TestC () && TestE () && TestZ () && TestA ()
     271        && TestAE () && TestB () && TestBE () && TestG ()
     272        && TestGE () && TestL () && TestLE () && TestO ()
     273        && TestP ()  && TestS ())
     274      return 0;
     275    __builtin_abort ();
     276  }