|  | /* | 
|  | * Copyright 2004-2009 Analog Devices Inc. | 
|  | * | 
|  | * Licensed under the GPL-2 or later. | 
|  | */ | 
|  |  | 
|  | #include "gcclib.h" | 
|  |  | 
|  | #ifdef CONFIG_ARITHMETIC_OPS_L1 | 
|  | DItype __lshrdi3(DItype u, word_type b)__attribute__((l1_text)); | 
|  | #endif | 
|  |  | 
|  | DItype __lshrdi3(DItype u, word_type b) | 
|  | { | 
|  | DIunion w; | 
|  | word_type bm; | 
|  | DIunion uu; | 
|  |  | 
|  | if (b == 0) | 
|  | return u; | 
|  |  | 
|  | uu.ll = u; | 
|  |  | 
|  | bm = (sizeof(SItype) * BITS_PER_UNIT) - b; | 
|  | if (bm <= 0) { | 
|  | w.s.high = 0; | 
|  | w.s.low = (USItype) uu.s.high >> -bm; | 
|  | } else { | 
|  | USItype carries = (USItype) uu.s.high << bm; | 
|  | w.s.high = (USItype) uu.s.high >> b; | 
|  | w.s.low = ((USItype) uu.s.low >> b) | carries; | 
|  | } | 
|  |  | 
|  | return w.ll; | 
|  | } |