1*b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2d64af918SMichal Simek #include <linux/export.h> 34e07dba7SMichal Simek 44e07dba7SMichal Simek #include "libgcc.h" 54e07dba7SMichal Simek __ashldi3(long long u,word_type b)64e07dba7SMichal Simeklong long __ashldi3(long long u, word_type b) 74e07dba7SMichal Simek { 84e07dba7SMichal Simek DWunion uu, w; 94e07dba7SMichal Simek word_type bm; 104e07dba7SMichal Simek 114e07dba7SMichal Simek if (b == 0) 124e07dba7SMichal Simek return u; 134e07dba7SMichal Simek 144e07dba7SMichal Simek uu.ll = u; 154e07dba7SMichal Simek bm = 32 - b; 164e07dba7SMichal Simek 174e07dba7SMichal Simek if (bm <= 0) { 184e07dba7SMichal Simek w.s.low = 0; 194e07dba7SMichal Simek w.s.high = (unsigned int) uu.s.low << -bm; 204e07dba7SMichal Simek } else { 214e07dba7SMichal Simek const unsigned int carries = (unsigned int) uu.s.low >> bm; 224e07dba7SMichal Simek 234e07dba7SMichal Simek w.s.low = (unsigned int) uu.s.low << b; 244e07dba7SMichal Simek w.s.high = ((unsigned int) uu.s.high << b) | carries; 254e07dba7SMichal Simek } 264e07dba7SMichal Simek 274e07dba7SMichal Simek return w.ll; 284e07dba7SMichal Simek } 294e07dba7SMichal Simek EXPORT_SYMBOL(__ashldi3); 30