Merge branch 'master' of git://git.denx.de/u-boot-i2c
[oweals/u-boot.git] / arch / mips / lib / ashldi3.c
1 #include "libgcc.h"
2
3 long long __ashldi3(long long u, word_type b)
4 {
5         DWunion uu, w;
6         word_type bm;
7
8         if (b == 0)
9                 return u;
10
11         uu.ll = u;
12         bm = 32 - b;
13
14         if (bm <= 0) {
15                 w.s.low = 0;
16                 w.s.high = (unsigned int) uu.s.low << -bm;
17         } else {
18                 const unsigned int carries = (unsigned int) uu.s.low >> bm;
19
20                 w.s.low = (unsigned int) uu.s.low << b;
21                 w.s.high = ((unsigned int) uu.s.high << b) | carries;
22         }
23
24         return w.ll;
25 }