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