summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/alpha/reml.S
blob: 2d89e3280c867a0fa29c25e1a236a5fbb1bcf46a (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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* taken from glibc 2.2 */

	.set noreorder
	.set noat

	.ent __remlu
	.globl __remlu

	.align 3
__remlu :
	lda	$30 , -32($30)
	.frame	$30 , 32 , $23  , 0
	.prologue 0
.Ludiv:
	stq	$1  , 0($30)
	zapnot	$25 , 15 , $1
	stq	$2  , 8($30)
	zapnot  $24 , 15 , $27
	stq	$0  , 16($30)
	clr	$2
	stq	$3  , 24($30)
	ldiq	$0  , 1

	beq	$1  , .Ldivbyzero

	.align 3


1:	cmpult	$1  , $27 , $at
	s8addq	$1  , $31 , $1
	s8addq	$0  , $31 , $0
	bne	$at , 1b



3:
	srl	$0  , 1 , $0
	cmpule	$1  , $27 , $at
	subq	$27 , $1 , $3

	srl	$1  , 1  , $1
	cmovne	$at , $3  , $27
	bne	$0  , 3b

.Ldone:	ldq	$1 , 0($30)
	ldq	$2 , 8($30)
	ldq	$0 , 16($30)
	ldq	$3 , 24($30)

	lda	$30 , 32($30)
	ret	$31 , ($23), 1

.Ldivbyzero:
	mov	$16 , $3
	ldiq	$16 , -2
	call_pal 170
	mov	$3  , $16
	clr	$27
	br	.Ldone

	.end __remlu

	.ent __reml
	.globl __reml

	.align 3
__reml :
	lda	$30 , - 32 ($30 )
	.frame	$30 , 32 , $23  , 0
	.prologue 0
	or	$24 , $25  , $at
	sextl	$at , $at
	bge	$at , .Ludiv


	stq	$24 , 0($30 )
	negl	$24 ,  $at
	stq	$25 , 8($30 )
	cmovge	$at , $at , $24
	stq	$23 , 16($30 )
	negl	$25 ,  $at
	stq	$3  , 24($30 )
	cmovge	$at , $at , $25


	bsr	$23 , __remlu


	ldq	$24 , 0($30 )
	ldq	$25 , 8($30 )
	mov	$24 ,  $at
	negl	$27 ,  $3
	sextl	$at , $at
	ldq	$23 , 16($30 )
	cmovlt	$at , $3  , $27
	ldq	$3  , 24($30 )

	lda	$30 , 32 ($30 )
	ret	$31 , ($23  ), 1

	.end	__reml