summaryrefslogtreecommitdiff
path: root/arch/parisc/lib/libgcc/__lshrdi3.c
blob: 4a820708ec57b6ca1c19705e212fea43212ec55a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "libgcc.h"

u64 __lshrdi3(u64 v, int cnt)
{
	int c = cnt & 31;
	u32 vl = (u32) v;
	u32 vh = (u32) (v >> 32);

	if (cnt & 32) {
		vl = (vh >> c);
		vh = 0;
	} else {
		vl = (vl >> c) + (vh << (32 - c));
		vh = (vh >> c);
	}

	return ((u64) vh << 32) + vl;
}
EXPORT_SYMBOL(__lshrdi3);