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 __divlu
.globl __divlu
.align 3
__divlu :
lda $30 , - 48 ($30 )
.frame $30 , 48 , $23 , 0
.prologue 0
.Ludiv:
stq $1 , 0($30 )
zapnot $25 ,15, $1
stq $2 , 8($30 )
zapnot $24 ,15, $2
stq $0 , 16($30 )
clr $27
stq $3 , 24($30 )
ldiq $0 , 1
stq $4 ,32($30 )
beq $1 , .Ldivbyzero
.align 3
1: cmpult $1 , $2 , $at
s8addq $1 , $31 , $1
s8addq $0 , $31 , $0
bne $at , 1b
3: addq $27 ,$0 , $4
srl $0 , 1, $0
cmpule $1 , $2 , $at
subq $2 , $1 , $3
cmovne $at ,$4 , $27
srl $1 , 1, $1
cmovne $at , $3 , $2
bne $0 , 3b
.Ldone: ldq $1 , 0($30 )
ldq $2 , 8($30 )
ldq $0 , 16($30 )
ldq $3 , 24($30 )
ldq $4 ,32($30 )
lda $30 , 48 ($30 )
ret $31 , ($23 ), 1
.Ldivbyzero:
mov $16 , $3
ldiq $16 , -2
call_pal 170
mov $3 , $16
clr $27
br .Ldone
.end __divlu
.ent __divl
.globl __divl
.align 3
__divl :
lda $30 , - 48 ($30 )
.frame $30 , 48 , $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 , __divlu
ldq $24 , 0($30 )
ldq $25 , 8($30 )
xor $24 , $25 , $at
negl $27 , $3
sextl $at , $at
ldq $23 , 16($30 )
cmovlt $at , $3 , $27
ldq $3 , 24($30 )
lda $30 , 48 ($30 )
ret $31 , ($23 ), 1
.end __divl
|