aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/dexon-foundation/mcl/src/asm/low_x86-64.asm
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/dexon-foundation/mcl/src/asm/low_x86-64.asm')
-rw-r--r--vendor/github.com/dexon-foundation/mcl/src/asm/low_x86-64.asm153
1 files changed, 153 insertions, 0 deletions
diff --git a/vendor/github.com/dexon-foundation/mcl/src/asm/low_x86-64.asm b/vendor/github.com/dexon-foundation/mcl/src/asm/low_x86-64.asm
new file mode 100644
index 000000000..b09b9dcd3
--- /dev/null
+++ b/vendor/github.com/dexon-foundation/mcl/src/asm/low_x86-64.asm
@@ -0,0 +1,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
+