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

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [rc203soc/] [sw/] [uClinux/] [arch/] [i960/] [lib/] [ashrdi3.c] - Diff between revs 1765 and 1782

Only display areas with differences | Details | Blame | View Log

Rev 1765 Rev 1782
/* ashrdi3.c extracted from gcc-2.7.2/libgcc2.c which is: */
/* ashrdi3.c extracted from gcc-2.7.2/libgcc2.c which is: */
/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
 
 
This file is part of GNU CC.
This file is part of GNU CC.
 
 
GNU CC is free software; you can redistribute it and/or modify
GNU CC is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
the Free Software Foundation; either version 2, or (at your option)
any later version.
any later version.
 
 
GNU CC is distributed in the hope that it will be useful,
GNU CC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
GNU General Public License for more details.
 
 
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU General Public License
along with GNU CC; see the file COPYING.  If not, write to
along with GNU CC; see the file COPYING.  If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.  */
Boston, MA 02111-1307, USA.  */
 
 
#include <linux/stddef.h>
#include <linux/stddef.h>
 
 
#define BITS_PER_UNIT 8
#define BITS_PER_UNIT 8
 
 
typedef          int SItype     __attribute__ ((mode (SI)));
typedef          int SItype     __attribute__ ((mode (SI)));
typedef unsigned int USItype    __attribute__ ((mode (SI)));
typedef unsigned int USItype    __attribute__ ((mode (SI)));
typedef          int DItype     __attribute__ ((mode (DI)));
typedef          int DItype     __attribute__ ((mode (DI)));
typedef int word_type __attribute__ ((mode (__word__)));
typedef int word_type __attribute__ ((mode (__word__)));
 
 
struct DIstruct {SItype high, low;};
struct DIstruct {SItype high, low;};
 
 
typedef union
typedef union
{
{
  struct DIstruct s;
  struct DIstruct s;
  DItype ll;
  DItype ll;
} DIunion;
} DIunion;
 
 
DItype
DItype
__ashrdi3 (DItype u, word_type b)
__ashrdi3 (DItype u, word_type b)
{
{
  DIunion w;
  DIunion w;
  word_type bm;
  word_type bm;
  DIunion uu;
  DIunion uu;
 
 
  if (b == 0)
  if (b == 0)
    return u;
    return u;
 
 
  uu.ll = u;
  uu.ll = u;
 
 
  bm = (sizeof (SItype) * BITS_PER_UNIT) - b;
  bm = (sizeof (SItype) * BITS_PER_UNIT) - b;
  if (bm <= 0)
  if (bm <= 0)
    {
    {
      /* w.s.high = 1..1 or 0..0 */
      /* w.s.high = 1..1 or 0..0 */
      w.s.high = uu.s.high >> (sizeof (SItype) * BITS_PER_UNIT - 1);
      w.s.high = uu.s.high >> (sizeof (SItype) * BITS_PER_UNIT - 1);
      w.s.low = uu.s.high >> -bm;
      w.s.low = uu.s.high >> -bm;
    }
    }
  else
  else
    {
    {
      USItype carries = (USItype)uu.s.high << bm;
      USItype carries = (USItype)uu.s.high << bm;
      w.s.high = uu.s.high >> b;
      w.s.high = uu.s.high >> b;
      w.s.low = ((USItype)uu.s.low >> b) | carries;
      w.s.low = ((USItype)uu.s.low >> b) | carries;
    }
    }
 
 
  return w.ll;
  return w.ll;
}
}
 
 

powered by: WebSVN 2.1.0

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