summaryrefslogtreecommitdiffstats
path: root/arch/parisc/lib/libgcc/__ashrdi3.c
diff options
context:
space:
mode:
authorSteve French2007-10-22 18:28:19 +0200
committerSteve French2007-10-22 18:28:19 +0200
commit7efb35af738e96565934cc640d863eb18dba0206 (patch)
tree29ed331d864b0cfa73fdca5fd3982896e56f9530 /arch/parisc/lib/libgcc/__ashrdi3.c
parentMerge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6 (diff)
parentNFS: Fix a typo in nfs_call_unlink() (diff)
downloadkernel-qcow2-linux-7efb35af738e96565934cc640d863eb18dba0206.tar.gz
kernel-qcow2-linux-7efb35af738e96565934cc640d863eb18dba0206.tar.xz
kernel-qcow2-linux-7efb35af738e96565934cc640d863eb18dba0206.zip
Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'arch/parisc/lib/libgcc/__ashrdi3.c')
-rw-r--r--arch/parisc/lib/libgcc/__ashrdi3.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/parisc/lib/libgcc/__ashrdi3.c b/arch/parisc/lib/libgcc/__ashrdi3.c
new file mode 100644
index 000000000000..8636a5aa4f77
--- /dev/null
+++ b/arch/parisc/lib/libgcc/__ashrdi3.c
@@ -0,0 +1,19 @@
+#include "libgcc.h"
+
+u64 __ashrdi3(u64 v, int cnt)
+{
+ int c = cnt & 31;
+ u32 vl = (u32) v;
+ u32 vh = (u32) (v >> 32);
+
+ if (cnt & 32) {
+ vl = ((s32) vh >> c);
+ vh = (s32) vh >> 31;
+ } else {
+ vl = (vl >> c) + (vh << (32 - c));
+ vh = ((s32) vh >> c);
+ }
+
+ return ((u64) vh << 32) + vl;
+}
+EXPORT_SYMBOL(__ashrdi3);