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
|
.text
.align 16, 0x90
.globl __gmpn_invert_limb
.def __gmpn_invert_limb
.scl 2
.type 32
.endef
__gmpn_invert_limb:
push %rdi
push %rsi
mov %rcx, %rdi
mov %rdi, %rax
shr $55, %rax
lea -512+__gmpn_invert_limb_table(%rip), %r8
movzwl (%r8,%rax,2), %ecx
mov %rdi, %rsi
mov %ecx, %eax
imul %ecx, %ecx
shr $24, %rsi
inc %rsi
imul %rsi, %rcx
shr $40, %rcx
sal $11, %eax
dec %eax
sub %ecx, %eax
mov $0x1000000000000000, %rcx
imul %rax, %rsi
sub %rsi, %rcx
imul %rax, %rcx
sal $13, %rax
shr $47, %rcx
add %rax, %rcx
mov %rdi, %rsi
shr %rsi
sbb %rax, %rax
sub %rax, %rsi
imul %rcx, %rsi
and %rcx, %rax
shr %rax
sub %rsi, %rax
mul %rcx
sal $31, %rcx
shr %rdx
add %rdx, %rcx
mov %rdi, %rax
mul %rcx
add %rdi, %rax
mov %rcx, %rax
adc %rdi, %rdx
sub %rdx, %rax
pop %rsi
pop %rdi
ret
|