summaryrefslogtreecommitdiffstats
path: root/arch/metag/lib/cmpdi2.S
blob: 9c5c663c5aea2433d6eb1f9182e65f40abefc565 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
! Copyright (C) 2012 by Imagination Technologies Ltd.
!
! 64-bit signed compare routine.
!

	.text
	.global ___cmpdi2
	.type   ___cmpdi2,function

!         low    high
! s64 a  (D0Ar2, D1Ar1)
! s64 b  (D0Ar4, D1Ar3)
___cmpdi2:
	! start at 1 (equal) and conditionally increment or decrement
	MOV	D0Re0,#1

	! high words differ?
	CMP	D1Ar1,D1Ar3
	BNE	$Lhigh_differ

	! unsigned compare low words
	CMP	D0Ar2,D0Ar4
	SUBLO	D0Re0,D0Re0,#1
	ADDHI	D0Re0,D0Re0,#1
	MOV	PC,D1RtP

$Lhigh_differ:
	! signed compare high words
	SUBLT	D0Re0,D0Re0,#1
	ADDGT	D0Re0,D0Re0,#1
	MOV	PC,D1RtP
	.size ___cmpdi2,.-___cmpdi2