Commit | Line | Data |
---|---|---|
086e9dc0 JH |
1 | ! Copyright (C) 2012 by Imagination Technologies Ltd. |
2 | ! | |
3 | ! 64-bit arithmetic shift right routine. | |
4 | ! | |
5 | ||
6 | .text | |
7 | .global ___ashrdi3 | |
8 | .type ___ashrdi3,function | |
9 | ||
10 | ___ashrdi3: | |
11 | MOV D0Re0,D0Ar2 | |
12 | MOV D1Re0,D1Ar1 | |
13 | CMP D1Ar3,#0 ! COUNT == 0 | |
14 | MOVEQ PC,D1RtP ! Yes, return | |
15 | ||
16 | MOV D0Ar4,D1Ar3 | |
17 | SUBS D1Ar3,D1Ar3,#32 ! N = COUNT - 32 | |
18 | BGE $L20 | |
19 | ||
20 | !! Shift < 32 | |
21 | NEG D1Ar3,D1Ar3 ! N = - N | |
22 | LSR D0Re0,D0Re0,D0Ar4 ! LO = LO >> COUNT | |
23 | LSL D0Ar6,D1Re0,D1Ar3 ! TMP= HI << -(COUNT - 32) | |
24 | OR D0Re0,D0Re0,D0Ar6 ! LO = LO | TMP | |
25 | SWAP D1Ar3,D0Ar4 | |
26 | ASR D1Re0,D1Re0,D1Ar3 ! HI = HI >> COUNT | |
27 | MOV PC,D1RtP | |
28 | $L20: | |
29 | !! Shift >= 32 | |
30 | ASR D0Re0,D1Re0,D1Ar3 ! LO = HI >> N | |
31 | ASR D1Re0,D1Re0,#31 ! HI = HI >> 31 | |
32 | MOV PC,D1RtP | |
33 | .size ___ashrdi3,.-___ashrdi3 |