Root/
1 | /*␊ |
2 | * libgcc/__ashrdi3.c␊ |
3 | */␊ |
4 | ␊ |
5 | #include <stdint.h>␊ |
6 | #include <stddef.h>␊ |
7 | ␊ |
8 | uint64_t __ashrdi3(uint64_t v, int cnt)␊ |
9 | {␊ |
10 | ␉int c = cnt & 31;␊ |
11 | ␉uint32_t vl = (uint32_t) v;␊ |
12 | ␉uint32_t vh = (uint32_t) (v >> 32);␊ |
13 | ␊ |
14 | ␉if (cnt & 32) {␊ |
15 | ␉␉vl = ((int32_t) vh >> c);␊ |
16 | ␉␉vh = (int32_t) vh >> 31;␊ |
17 | ␉} else {␊ |
18 | ␉␉vl = (vl >> c) + (vh << (32 - c));␊ |
19 | ␉␉vh = ((int32_t) vh >> c);␊ |
20 | ␉}␊ |
21 | ␊ |
22 | ␉return ((uint64_t) vh << 32) + vl;␊ |
23 | }␊ |
24 |