(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr21291.c
       1  /* The asm has 2 "r" in/out operands, 1 earlyclobber "r" output, 1 "r"
       2     input and 2 fixed "r" clobbers (eax and edx), so there are a total of
       3     6 registers that must not conflict.  Add to that the PIC register,
       4     the frame pointer, and the stack pointer, and we've run out of
       5     registers on 32-bit targets.  */
       6  /* { dg-do compile } */
       7  /* { dg-options "-O" } */
       8  
       9  typedef unsigned long bngdigit;
      10  typedef bngdigit *bng;
      11  typedef unsigned int bngcarry;
      12  typedef unsigned long bngsize;
      13  
      14  bngdigit
      15  bng_ia32_mult_sub_digit (bng a, bngsize alen, bng b, bngsize blen, bngdigit d)
      16  {
      17    bngdigit out, tmp;
      18    bngcarry carry;
      19    bngdigit a11;
      20  
      21    alen -= blen;
      22    out = 0;
      23    asm (""
      24         : "+r" (a), "+r" (b), "+mr" (blen), "+mr" (out), "=&r" (tmp)
      25         : "mr" (d)
      26         : "eax", "edx");
      27    if (alen == 0)
      28      {
      29        a11 = out;
      30        goto t;
      31      }
      32  
      33    a11 = 1;
      34   t:
      35    return a11;
      36  }