/*- * Copyright (c) 1992 The Regents of the University of California. * All rights reserved. * * %sccs.include.redist.c% */ #if defined(LIBC_SCCS) && !defined(lint) static char sccsid[] = "@(#)lshrdi3.c 5.1 (Berkeley) 05/12/92"; #endif /* LIBC_SCCS and not lint */ #include "longlong.h" long long __lshrdi3 (u, b1) long long u; long long b1; { long_long w; unsigned long carries; int bm; long_long uu; int b = b1; if (b == 0) return u; uu.ll = u; bm = (sizeof (int) * BITS_PER_UNIT) - b; if (bm <= 0) { w.s.high = 0; w.s.low = (unsigned long)uu.s.high >> -bm; } else { carries = (unsigned long)uu.s.high << bm; w.s.high = (unsigned long)uu.s.high >> b; w.s.low = ((unsigned long)uu.s.low >> b) | carries; } return w.ll; }