summaryrefslogtreecommitdiff
path: root/vere/ext/gmp/gen/x86_64-windows/mpn/bdiv_dbm1c.s
blob: 384066dae072d6c0c949cc0b9b5069c9c1519a49 (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





































































	.text
	.align	16, 0x90
	.globl	__gmpn_bdiv_dbm1c
	
	.def	__gmpn_bdiv_dbm1c
	.scl	2
	.type	32
	.endef
__gmpn_bdiv_dbm1c:

	push	%rdi
	push	%rsi
	mov	%rcx, %rdi
	mov	%rdx, %rsi
	mov	%r8, %rdx
	mov	%r9, %rcx

	mov	56(%rsp), %r8	
	mov	(%rsi), %rax
	mov	%rdx, %r9
	mov	%edx, %r11d
	mul	%rcx
	lea	(%rsi,%r9,8), %rsi
	lea	(%rdi,%r9,8), %rdi
	neg	%r9
	and	$3, %r11d
	jz	Llo0
	lea	-4(%r9,%r11), %r9
	cmp	$2, %r11d
	jc	Llo1
	jz	Llo2
	jmp	Llo3

	.align	16, 0x90
Ltop:	mov	(%rsi,%r9,8), %rax
	mul	%rcx
Llo0:	sub	%rax, %r8
	mov	%r8, (%rdi,%r9,8)
	sbb	%rdx, %r8
	mov	8(%rsi,%r9,8), %rax
	mul	%rcx
Llo3:	sub	%rax, %r8
	mov	%r8, 8(%rdi,%r9,8)
	sbb	%rdx, %r8
	mov	16(%rsi,%r9,8), %rax
	mul	%rcx
Llo2:	sub	%rax, %r8
	mov	%r8, 16(%rdi,%r9,8)
	sbb	%rdx, %r8
	mov	24(%rsi,%r9,8), %rax
	mul	%rcx
Llo1:	sub	%rax, %r8
	mov	%r8, 24(%rdi,%r9,8)
	sbb	%rdx, %r8
	add	$4, %r9
	jnz	Ltop

	mov	%r8, %rax
	pop	%rsi
	pop	%rdi
	ret