mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 13:55:32 +00:00
![James Hogan](/assets/img/avatar_default.png)
Add optimised library functions for metag. Signed-off-by: James Hogan <james.hogan@imgtec.com>
108 lines
1.9 KiB
ArmAsm
108 lines
1.9 KiB
ArmAsm
! Copyright (C) 2012 Imagination Technologies Ltd.
|
|
!
|
|
! Signed/unsigned 64-bit division routines.
|
|
!
|
|
|
|
.text
|
|
.global _div_u64
|
|
.type _div_u64,function
|
|
|
|
_div_u64:
|
|
$L1:
|
|
ORS A0.3,D1Ar3,D0Ar4
|
|
BNE $L3
|
|
$L2:
|
|
MOV D0Re0,D0Ar2
|
|
MOV D1Re0,D1Ar1
|
|
MOV PC,D1RtP
|
|
$L3:
|
|
CMP D1Ar3,D1Ar1
|
|
CMPEQ D0Ar4,D0Ar2
|
|
MOV D0Re0,#1
|
|
MOV D1Re0,#0
|
|
BHS $L6
|
|
$L4:
|
|
ADDS D0Ar6,D0Ar4,D0Ar4
|
|
ADD D1Ar5,D1Ar3,D1Ar3
|
|
ADDCS D1Ar5,D1Ar5,#1
|
|
CMP D1Ar5,D1Ar3
|
|
CMPEQ D0Ar6,D0Ar4
|
|
BLO $L6
|
|
$L5:
|
|
MOV D0Ar4,D0Ar6
|
|
MOV D1Ar3,D1Ar5
|
|
ADDS D0Re0,D0Re0,D0Re0
|
|
ADD D1Re0,D1Re0,D1Re0
|
|
ADDCS D1Re0,D1Re0,#1
|
|
CMP D1Ar3,D1Ar1
|
|
CMPEQ D0Ar4,D0Ar2
|
|
BLO $L4
|
|
$L6:
|
|
ORS A0.3,D1Re0,D0Re0
|
|
MOV D0Ar6,#0
|
|
MOV D1Ar5,D0Ar6
|
|
BEQ $L10
|
|
$L7:
|
|
CMP D1Ar1,D1Ar3
|
|
CMPEQ D0Ar2,D0Ar4
|
|
BLO $L9
|
|
$L8:
|
|
ADDS D0Ar6,D0Ar6,D0Re0
|
|
ADD D1Ar5,D1Ar5,D1Re0
|
|
ADDCS D1Ar5,D1Ar5,#1
|
|
|
|
SUBS D0Ar2,D0Ar2,D0Ar4
|
|
SUB D1Ar1,D1Ar1,D1Ar3
|
|
SUBCS D1Ar1,D1Ar1,#1
|
|
$L9:
|
|
LSL A0.3,D1Re0,#31
|
|
LSR D0Re0,D0Re0,#1
|
|
LSR D1Re0,D1Re0,#1
|
|
OR D0Re0,D0Re0,A0.3
|
|
LSL A0.3,D1Ar3,#31
|
|
LSR D0Ar4,D0Ar4,#1
|
|
LSR D1Ar3,D1Ar3,#1
|
|
OR D0Ar4,D0Ar4,A0.3
|
|
ORS A0.3,D1Re0,D0Re0
|
|
BNE $L7
|
|
$L10:
|
|
MOV D0Re0,D0Ar6
|
|
MOV D1Re0,D1Ar5
|
|
MOV PC,D1RtP
|
|
.size _div_u64,.-_div_u64
|
|
|
|
.text
|
|
.global _div_s64
|
|
.type _div_s64,function
|
|
_div_s64:
|
|
MSETL [A0StP],D0FrT,D0.5
|
|
XOR D0.5,D0Ar2,D0Ar4
|
|
XOR D1.5,D1Ar1,D1Ar3
|
|
TSTT D1Ar1,#HI(0x80000000)
|
|
BZ $L25
|
|
|
|
NEGS D0Ar2,D0Ar2
|
|
NEG D1Ar1,D1Ar1
|
|
SUBCS D1Ar1,D1Ar1,#1
|
|
$L25:
|
|
TSTT D1Ar3,#HI(0x80000000)
|
|
BZ $L27
|
|
|
|
NEGS D0Ar4,D0Ar4
|
|
NEG D1Ar3,D1Ar3
|
|
SUBCS D1Ar3,D1Ar3,#1
|
|
$L27:
|
|
CALLR D1RtP,_div_u64
|
|
TSTT D1.5,#HI(0x80000000)
|
|
BZ $L29
|
|
|
|
NEGS D0Re0,D0Re0
|
|
NEG D1Re0,D1Re0
|
|
SUBCS D1Re0,D1Re0,#1
|
|
$L29:
|
|
|
|
GETL D0FrT,D1RtP,[A0StP+#(-16)]
|
|
GETL D0.5,D1.5,[A0StP+#(-8)]
|
|
SUB A0StP,A0StP,#16
|
|
MOV PC,D1RtP
|
|
.size _div_s64,.-_div_s64
|