OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [i386/] [pr21291.c] - Rev 695

Go to most recent revision | Compare with Previous | Blame | View Log

/* The asm has 2 "r" in/out operands, 1 earlyclobber "r" output, 1 "r"
   input and 2 fixed "r" clobbers (eax and edx), so there are a total of
   6 registers that must not conflict.  Add to that the PIC register,
   the frame pointer, and the stack pointer, and we've run out of
   registers on 32-bit targets.  */
/* { dg-do compile } */
/* { dg-options "-O" } */
 
typedef unsigned long bngdigit;
typedef bngdigit *bng;
typedef unsigned int bngcarry;
typedef unsigned long bngsize;
 
bngdigit
bng_ia32_mult_sub_digit (bng a, bngsize alen, bng b, bngsize blen, bngdigit d)
{
  bngdigit out, tmp;
  bngcarry carry;
  bngdigit a11;
 
  alen -= blen;
  out = 0;
  asm (""
       : "+r" (a), "+r" (b), "+mr" (blen), "+mr" (out), "=&r" (tmp)
       : "mr" (d)
       : "eax", "edx");
  if (alen == 0)
    {
      a11 = out;
      goto t;
    }
 
  a11 = 1;
 t:
  return a11;
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.