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
|
.text
.align 3
.globl __gmpn_cnd_add_n
.type __gmpn_cnd_add_n,@function
__gmpn_cnd_add_n:
cmp x0, #1
sbc x0, x0, x0
cmn xzr, xzr
lsr x18, x4, #2
tbz x4, #0, .Lbx0
.Lbx1: ldr x13, [x3]
ldr x11, [x2]
bic x7, x13, x0
adcs x9, x11, x7
str x9, [x1]
tbnz x4, #1, .Lb11
.Lb01: cbz x18, .Lrt
ldp x12, x13, [x3,#8]
ldp x10, x11, [x2,#8]
sub x2, x2, #8
sub x3, x3, #8
sub x1, x1, #24
b .Lmid
.Lb11: ldp x12, x13, [x3,#8]!
ldp x10, x11, [x2,#8]!
sub x1, x1, #8
cbz x18, .Lend
b .Ltop
.Lbx0: ldp x12, x13, [x3]
ldp x10, x11, [x2]
tbnz x4, #1, .Lb10
.Lb00: sub x2, x2, #16
sub x3, x3, #16
sub x1, x1, #32
b .Lmid
.Lb10: sub x1, x1, #16
cbz x18, .Lend
.align 4
.Ltop: bic x6, x12, x0
bic x7, x13, x0
ldp x12, x13, [x3,#16]
adcs x8, x10, x6
adcs x9, x11, x7
ldp x10, x11, [x2,#16]
stp x8, x9, [x1,#16]
.Lmid: bic x6, x12, x0
bic x7, x13, x0
ldp x12, x13, [x3,#32]!
adcs x8, x10, x6
adcs x9, x11, x7
ldp x10, x11, [x2,#32]!
stp x8, x9, [x1,#32]!
sub x18, x18, #1
cbnz x18, .Ltop
.Lend: bic x6, x12, x0
bic x7, x13, x0
adcs x8, x10, x6
adcs x9, x11, x7
stp x8, x9, [x1,#16]
.Lrt: cset x0, cs
ret
.size __gmpn_cnd_add_n,.-__gmpn_cnd_add_n
|