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