1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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);