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 9typedef unsigned long bngdigit; 10typedef bngdigit *bng; 11typedef unsigned int bngcarry; 12typedef unsigned long bngsize; 13 14bngdigit 15bng_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} 37