aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/byzantine-lab/mcl/src/asm/low_x86-64.asm
blob: b09b9dcd31f24e967394d0aa654065d1e02d6601 (plain) (blame)
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153

; Linux     rdi     rsi    rdx    rcx
; Win       rcx     rdx    r8     r9

%ifdef _WIN64
    %define p1org rcx
    %define p2org rdx
    %define p3org r8
    %define p4org r9
%else
    %define p1org rdi
    %define p2org rsi
    %define p3org rdx
    %define p4org rcx
%endif

%imacro proc 1
global %1
%1:
%endmacro

segment .text

%imacro addPre 1
    mov rax, [p2org]
    add rax, [p3org]
    mov [p1org], rax
%assign i 1
%rep %1
    mov rax, [p2org + i * 8]
    adc rax, [p3org + i * 8]
    mov [p1org + i * 8], rax
%assign i (i+1)
%endrep
    setc al
    movzx eax, al
    ret
%endmacro

%imacro subNC 1
    mov rax, [p2org]
    sub rax, [p3org]
    mov [p1org], rax
%assign i 1
%rep %1
    mov rax, [p2org + i * 8]
    sbb rax, [p3org + i * 8]
    mov [p1org + i * 8], rax
%assign i (i+1)
%endrep
    setc al
    movzx eax, al
    ret
%endmacro

proc mcl_fp_addPre64
        addPre 0
proc mcl_fp_addPre128
        addPre 1
proc mcl_fp_addPre192
        addPre 2
proc mcl_fp_addPre256
        addPre 3
proc mcl_fp_addPre320
        addPre 4
proc mcl_fp_addPre384
        addPre 5
proc mcl_fp_addPre448
        addPre 6
proc mcl_fp_addPre512
        addPre 7
proc mcl_fp_addPre576
        addPre 8
proc mcl_fp_addPre640
        addPre 9
proc mcl_fp_addPre704
        addPre 10
proc mcl_fp_addPre768
        addPre 11
proc mcl_fp_addPre832
        addPre 12
proc mcl_fp_addPre896
        addPre 13
proc mcl_fp_addPre960
        addPre 14
proc mcl_fp_addPre1024
        addPre 15
proc mcl_fp_addPre1088
        addPre 16
proc mcl_fp_addPre1152
        addPre 17
proc mcl_fp_addPre1216
        addPre 18
proc mcl_fp_addPre1280
        addPre 19
proc mcl_fp_addPre1344
        addPre 20
proc mcl_fp_addPre1408
        addPre 21
proc mcl_fp_addPre1472
        addPre 22
proc mcl_fp_addPre1536
        addPre 23

proc mcl_fp_subNC64
        subNC 0
proc mcl_fp_subNC128
        subNC 1
proc mcl_fp_subNC192
        subNC 2
proc mcl_fp_subNC256
        subNC 3
proc mcl_fp_subNC320
        subNC 4
proc mcl_fp_subNC384
        subNC 5
proc mcl_fp_subNC448
        subNC 6
proc mcl_fp_subNC512
        subNC 7
proc mcl_fp_subNC576
        subNC 8
proc mcl_fp_subNC640
        subNC 9
proc mcl_fp_subNC704
        subNC 10
proc mcl_fp_subNC768
        subNC 11
proc mcl_fp_subNC832
        subNC 12
proc mcl_fp_subNC896
        subNC 13
proc mcl_fp_subNC960
        subNC 14
proc mcl_fp_subNC1024
        subNC 15
proc mcl_fp_subNC1088
        subNC 16
proc mcl_fp_subNC1152
        subNC 17
proc mcl_fp_subNC1216
        subNC 18
proc mcl_fp_subNC1280
        subNC 19
proc mcl_fp_subNC1344
        subNC 20
proc mcl_fp_subNC1408
        subNC 21
proc mcl_fp_subNC1472
        subNC 22
proc mcl_fp_subNC1536
        subNC 23