1*d2aa5dcaSMarek Vasut #include "libgcc.h" 2*d2aa5dcaSMarek Vasut __ashldi3(long long u,word_type b)3*d2aa5dcaSMarek Vasutlong long __ashldi3(long long u, word_type b) 4*d2aa5dcaSMarek Vasut { 5*d2aa5dcaSMarek Vasut DWunion uu, w; 6*d2aa5dcaSMarek Vasut word_type bm; 7*d2aa5dcaSMarek Vasut 8*d2aa5dcaSMarek Vasut if (b == 0) 9*d2aa5dcaSMarek Vasut return u; 10*d2aa5dcaSMarek Vasut 11*d2aa5dcaSMarek Vasut uu.ll = u; 12*d2aa5dcaSMarek Vasut bm = 32 - b; 13*d2aa5dcaSMarek Vasut 14*d2aa5dcaSMarek Vasut if (bm <= 0) { 15*d2aa5dcaSMarek Vasut w.s.low = 0; 16*d2aa5dcaSMarek Vasut w.s.high = (unsigned int) uu.s.low << -bm; 17*d2aa5dcaSMarek Vasut } else { 18*d2aa5dcaSMarek Vasut const unsigned int carries = (unsigned int) uu.s.low >> bm; 19*d2aa5dcaSMarek Vasut 20*d2aa5dcaSMarek Vasut w.s.low = (unsigned int) uu.s.low << b; 21*d2aa5dcaSMarek Vasut w.s.high = ((unsigned int) uu.s.high << b) | carries; 22*d2aa5dcaSMarek Vasut } 23*d2aa5dcaSMarek Vasut 24*d2aa5dcaSMarek Vasut return w.ll; 25*d2aa5dcaSMarek Vasut } 26