__ashrdi3.c 317 B

12345678910111213141516171819
  1. #include "libgcc.h"
  2. u64 __ashrdi3(u64 v, int cnt)
  3. {
  4. int c = cnt & 31;
  5. u32 vl = (u32) v;
  6. u32 vh = (u32) (v >> 32);
  7. if (cnt & 32) {
  8. vl = ((s32) vh >> c);
  9. vh = (s32) vh >> 31;
  10. } else {
  11. vl = (vl >> c) + (vh << (32 - c));
  12. vh = ((s32) vh >> c);
  13. }
  14. return ((u64) vh << 32) + vl;
  15. }
  16. EXPORT_SYMBOL(__ashrdi3);