forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
466 B
25 lines
466 B
// SPDX-License-Identifier: GPL-2.0 |
|
#include "libgcc.h" |
|
|
|
DWtype |
|
__ashldi3(DWtype u, word_type b) |
|
{ |
|
const DWunion uu = {.ll = u}; |
|
const word_type bm = (sizeof (Wtype) * BITS_PER_UNIT) - b; |
|
DWunion w; |
|
|
|
if (b == 0) |
|
return u; |
|
|
|
if (bm <= 0) { |
|
w.s.low = 0; |
|
w.s.high = (UWtype) uu.s.low << -bm; |
|
} else { |
|
const UWtype carries = (UWtype) uu.s.low >> bm; |
|
|
|
w.s.low = (UWtype) uu.s.low << b; |
|
w.s.high = ((UWtype) uu.s.high << b) | carries; |
|
} |
|
|
|
return w.ll; |
|
}
|
|
|