35 lines
874 B
ArmAsm
35 lines
874 B
ArmAsm
|
! SPDX-License-Identifier: GPL-2.0
|
||
|
! Copyright (C) 2012 by Imagination Technologies Ltd.
|
||
|
!
|
||
|
! 64-bit arithmetic shift left routine.
|
||
|
!
|
||
|
|
||
|
.text
|
||
|
.global ___ashldi3
|
||
|
.type ___ashldi3,function
|
||
|
|
||
|
___ashldi3:
|
||
|
MOV D0Re0,D0Ar2
|
||
|
MOV D1Re0,D1Ar1
|
||
|
CMP D1Ar3,#0 ! COUNT == 0
|
||
|
MOVEQ PC,D1RtP ! Yes, return
|
||
|
|
||
|
SUBS D0Ar4,D1Ar3,#32 ! N = COUNT - 32
|
||
|
BGE $L10
|
||
|
|
||
|
!! Shift < 32
|
||
|
NEG D0Ar4,D0Ar4 ! N = - N
|
||
|
LSL D1Re0,D1Re0,D1Ar3 ! HI = HI << COUNT
|
||
|
LSR D0Ar6,D0Re0,D0Ar4 ! TMP= LO >> -(COUNT - 32)
|
||
|
OR D1Re0,D1Re0,D0Ar6 ! HI = HI | TMP
|
||
|
SWAP D0Ar4,D1Ar3
|
||
|
LSL D0Re0,D0Re0,D0Ar4 ! LO = LO << COUNT
|
||
|
MOV PC,D1RtP
|
||
|
|
||
|
$L10:
|
||
|
!! Shift >= 32
|
||
|
LSL D1Re0,D0Re0,D0Ar4 ! HI = LO << N
|
||
|
MOV D0Re0,#0 ! LO = 0
|
||
|
MOV PC,D1RtP
|
||
|
.size ___ashldi3,.-___ashldi3
|