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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [libc/] [stdlib/] [drand48-iter.c] - Diff between revs 1325 and 1765

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

Rev 1325 Rev 1765
/* Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.
/* Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu <mailto:drepper@gnu.ai.mit.edu>>, August 1995.
   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu <mailto:drepper@gnu.ai.mit.edu>>, August 1995.
 
 
   The GNU C Library is free software; you can redistribute it and/or
   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
   version 2.1 of the License, or (at your option) any later version.
 
 
   The GNU C Library is distributed in the hope that it will be useful,
   The GNU C Library 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 GNU
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
   Lesser General Public License for more details.
 
 
   You should have received a copy of the GNU Lesser General Public
   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */
   02111-1307 USA.  */
 
 
#include <errno.h>
#include <errno.h>
#include <stdlib.h>
#include <stdlib.h>
#include <limits.h>
#include <limits.h>
#include <stdint.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/types.h>
 
 
/* Global state for non-reentrant functions.  */
/* Global state for non-reentrant functions.  */
struct drand48_data __libc_drand48_data;
struct drand48_data __libc_drand48_data;
 
 
 
 
int
int
__drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer)
__drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer)
{
{
  uint64_t X;
  uint64_t X;
  uint64_t result;
  uint64_t result;
 
 
  /* Initialize buffer, if not yet done.  */
  /* Initialize buffer, if not yet done.  */
  if (unlikely(!buffer->__init))
  if (unlikely(!buffer->__init))
    {
    {
      buffer->__a = 0x5deece66dull;
      buffer->__a = 0x5deece66dull;
      buffer->__c = 0xb;
      buffer->__c = 0xb;
      buffer->__init = 1;
      buffer->__init = 1;
    }
    }
 
 
  /* Do the real work.  We choose a data type which contains at least
  /* Do the real work.  We choose a data type which contains at least
     48 bits.  Because we compute the modulus it does not care how
     48 bits.  Because we compute the modulus it does not care how
     many bits really are computed.  */
     many bits really are computed.  */
 
 
  X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0];
  X = (uint64_t) xsubi[2] << 32 | (uint32_t) xsubi[1] << 16 | xsubi[0];
 
 
  result = X * buffer->__a + buffer->__c;
  result = X * buffer->__a + buffer->__c;
 
 
  xsubi[0] = result & 0xffff;
  xsubi[0] = result & 0xffff;
  xsubi[1] = (result >> 16) & 0xffff;
  xsubi[1] = (result >> 16) & 0xffff;
  xsubi[2] = (result >> 32) & 0xffff;
  xsubi[2] = (result >> 32) & 0xffff;
 
 
  return 0;
  return 0;
}
}
 
 
 
 

powered by: WebSVN 2.1.0

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