summaryrefslogtreecommitdiff
path: root/vere/ext/gmp/gen/aarch64-linux/mpn/bdiv_q_1.s
blob: 0a530eab4e76c26d8b9c6ea5718e0a6747940602 (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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

























































		
		





	.text
	.align	3
	.globl	__gmpn_bdiv_q_1 
	.type	__gmpn_bdiv_q_1,@function
__gmpn_bdiv_q_1:

	rbit	x6, x3
	clz	x5, x6
	lsr	x3, x3, x5

	adrp	x7, :got:__gmp_binvert_limb_table
	ubfx	x6, x3, 1, 7
	ldr	x7, [x7, #:got_lo12:__gmp_binvert_limb_table]
	ldrb	w6, [x7, x6]
	ubfiz	x7, x6, 1, 8
	umull	x6, w6, w6
	msub	x6, x6, x3, x7
	lsl	x7, x6, 1
	mul	x6, x6, x6
	msub	x6, x6, x3, x7
	lsl	x7, x6, 1
	mul	x6, x6, x6
	msub	x4, x6, x3, x7

	b	__gmpn_pi1_bdiv_q_1
	.size	__gmpn_bdiv_q_1,.-__gmpn_bdiv_q_1

	.text
	.align	3
	.globl	__gmpn_pi1_bdiv_q_1 
	.type	__gmpn_pi1_bdiv_q_1,@function
__gmpn_pi1_bdiv_q_1:
	sub	x2, x2, #1
	subs	x6, x6, x6		
	ldr	x9, [x1],#8
	cbz	x5, .Lnorm

.Lunorm:
	lsr	x12, x9, x5
	cbz	x2, .Leu1
	sub	x8, xzr, x5

.Ltpu:	ldr	x9, [x1],#8
	lsl	x7, x9, x8
	orr	x7, x7, x12
	sbcs	x6, x7, x6
	mul	x7, x6, x4
	str	x7, [x0],#8
	lsr	x12, x9, x5
	umulh	x6, x7, x3
	sub	x2, x2, #1
	cbnz	x2, .Ltpu

.Leu1:	sbcs	x6, x12, x6
	mul	x6, x6, x4
	str	x6, [x0]
	ret

.Lnorm:
	mul	x5, x9, x4
	str	x5, [x0],#8
	cbz	x2, .Len1

.Ltpn:	ldr	x9, [x1],#8
	umulh	x5, x5, x3
	sbcs	x5, x9, x5
	mul	x5, x5, x4
	str	x5, [x0],#8
	sub	x2, x2, #1
	cbnz	x2, .Ltpn

.Len1:	ret
	.size	__gmpn_pi1_bdiv_q_1,.-__gmpn_pi1_bdiv_q_1