1193323Sed// SPDX-License-Identifier: GPL-2.0 2193323Sed#include <linux/export.h> 3193323Sed 4193323Sed#include "libgcc.h" 5193323Sed 6193323Sedlong long __ashrdi3(long long u, word_type b) 7193323Sed{ 8193323Sed DWunion uu, w; 9193323Sed word_type bm; 10193323Sed 11193323Sed if (b == 0) 12193323Sed return u; 13193323Sed 14193323Sed uu.ll = u; 15193323Sed bm = 32 - b; 16193323Sed 17193323Sed if (bm <= 0) { 18193323Sed /* w.s.high = 1..1 or 0..0 */ 19193323Sed w.s.high = 20198090Srdivacky uu.s.high >> 31; 21198090Srdivacky w.s.low = uu.s.high >> -bm; 22207618Srdivacky } else { 23193323Sed const unsigned int carries = (unsigned int) uu.s.high << bm; 24198090Srdivacky 25193323Sed w.s.high = uu.s.high >> b; 26193323Sed w.s.low = ((unsigned int) uu.s.low >> b) | carries; 27193323Sed } 28193323Sed 29193323Sed return w.ll; 30198090Srdivacky} 31198090SrdivackyEXPORT_SYMBOL(__ashrdi3); 32198090Srdivacky