Skip to content

Commit

Permalink
slight speedup of vmul
Browse files Browse the repository at this point in the history
  • Loading branch information
herumi committed Oct 28, 2024
1 parent ce7b00d commit 986b131
Show file tree
Hide file tree
Showing 5 changed files with 580 additions and 195 deletions.
178 changes: 161 additions & 17 deletions src/asm/bint-x64-amd64.S
Original file line number Diff line number Diff line change
Expand Up @@ -529,6 +529,15 @@ SIZE(mcl_c5_vsub)
.global PRE(mcl_c5_vmul)
PRE(mcl_c5_vmul):
TYPE(mcl_c5_vmul)
lea PRE(ap)(%rip), %rax
vmovdqa64 (%rax), %zmm20
vmovdqa64 64(%rax), %zmm21
vmovdqa64 128(%rax), %zmm22
vmovdqa64 192(%rax), %zmm23
vmovdqa64 256(%rax), %zmm24
vmovdqa64 320(%rax), %zmm25
vmovdqa64 384(%rax), %zmm26
vmovdqa64 448(%rax), %zmm27
mov $4503599627370495, %rax
vpbroadcastq %rax, %zmm9
lea PRE(rp)(%rip), %r10
Expand Down Expand Up @@ -568,8 +577,22 @@ vpxorq %zmm8, %zmm8, %zmm8
vpmadd52huq 448(%rsi), %zmm11, %zmm8
vpxorq %zmm11, %zmm11, %zmm11
vpmadd52luq (%r10){1to8}, %zmm0, %zmm11
lea PRE(ap)(%rip), %rax
call .L2
vpmadd52luq %zmm20, %zmm11, %zmm0
vpmadd52huq %zmm20, %zmm11, %zmm1
vpmadd52luq %zmm21, %zmm11, %zmm1
vpmadd52huq %zmm21, %zmm11, %zmm2
vpmadd52luq %zmm22, %zmm11, %zmm2
vpmadd52huq %zmm22, %zmm11, %zmm3
vpmadd52luq %zmm23, %zmm11, %zmm3
vpmadd52huq %zmm23, %zmm11, %zmm4
vpmadd52luq %zmm24, %zmm11, %zmm4
vpmadd52huq %zmm24, %zmm11, %zmm5
vpmadd52luq %zmm25, %zmm11, %zmm5
vpmadd52huq %zmm25, %zmm11, %zmm6
vpmadd52luq %zmm26, %zmm11, %zmm6
vpmadd52huq %zmm26, %zmm11, %zmm7
vpmadd52luq %zmm27, %zmm11, %zmm7
vpmadd52huq %zmm27, %zmm11, %zmm8
mov $7, %ecx
.balign 32
.L1:
Expand All @@ -586,13 +609,42 @@ vmovdqa64 %zmm6, %zmm5
vmovdqa64 %zmm7, %zmm6
vmovdqa64 %zmm8, %zmm7
vpxorq %zmm8, %zmm8, %zmm8
call .L2
vpmadd52luq (%rax), %zmm11, %zmm0
vpmadd52huq (%rax), %zmm11, %zmm1
vpmadd52luq 64(%rax), %zmm11, %zmm1
vpmadd52huq 64(%rax), %zmm11, %zmm2
vpmadd52luq 128(%rax), %zmm11, %zmm2
vpmadd52huq 128(%rax), %zmm11, %zmm3
vpmadd52luq 192(%rax), %zmm11, %zmm3
vpmadd52huq 192(%rax), %zmm11, %zmm4
vpmadd52luq 256(%rax), %zmm11, %zmm4
vpmadd52huq 256(%rax), %zmm11, %zmm5
vpmadd52luq 320(%rax), %zmm11, %zmm5
vpmadd52huq 320(%rax), %zmm11, %zmm6
vpmadd52luq 384(%rax), %zmm11, %zmm6
vpmadd52huq 384(%rax), %zmm11, %zmm7
vpmadd52luq 448(%rax), %zmm11, %zmm7
vpmadd52huq 448(%rax), %zmm11, %zmm8
vpsrlq $52, %zmm12, %zmm11
vpaddq %zmm11, %zmm0, %zmm0
vpxorq %zmm11, %zmm11, %zmm11
vpmadd52luq (%r10){1to8}, %zmm0, %zmm11
lea PRE(ap)(%rip), %rax
call .L2
vpmadd52luq %zmm20, %zmm11, %zmm0
vpmadd52huq %zmm20, %zmm11, %zmm1
vpmadd52luq %zmm21, %zmm11, %zmm1
vpmadd52huq %zmm21, %zmm11, %zmm2
vpmadd52luq %zmm22, %zmm11, %zmm2
vpmadd52huq %zmm22, %zmm11, %zmm3
vpmadd52luq %zmm23, %zmm11, %zmm3
vpmadd52huq %zmm23, %zmm11, %zmm4
vpmadd52luq %zmm24, %zmm11, %zmm4
vpmadd52huq %zmm24, %zmm11, %zmm5
vpmadd52luq %zmm25, %zmm11, %zmm5
vpmadd52huq %zmm25, %zmm11, %zmm6
vpmadd52luq %zmm26, %zmm11, %zmm6
vpmadd52huq %zmm26, %zmm11, %zmm7
vpmadd52luq %zmm27, %zmm11, %zmm7
vpmadd52huq %zmm27, %zmm11, %zmm8
dec %ecx
jnz .L1
vpsrlq $52, %zmm0, %zmm11
Expand All @@ -619,29 +671,28 @@ vpandq %zmm9, %zmm6, %zmm6
vpsrlq $52, %zmm7, %zmm11
vpaddq %zmm11, %zmm8, %zmm8
vpandq %zmm9, %zmm7, %zmm7
lea PRE(p)(%rip), %rax
vpxorq %zmm10, %zmm10, %zmm10
vpsubq (%rax){1to8}, %zmm1, %zmm12
vpsubq %zmm20, %zmm1, %zmm12
vpsrlq $63, %zmm12, %zmm11
vpsubq 8(%rax){1to8}, %zmm2, %zmm13
vpsubq %zmm21, %zmm2, %zmm13
vpsubq %zmm11, %zmm13, %zmm13
vpsrlq $63, %zmm13, %zmm11
vpsubq 16(%rax){1to8}, %zmm3, %zmm14
vpsubq %zmm22, %zmm3, %zmm14
vpsubq %zmm11, %zmm14, %zmm14
vpsrlq $63, %zmm14, %zmm11
vpsubq 24(%rax){1to8}, %zmm4, %zmm15
vpsubq %zmm23, %zmm4, %zmm15
vpsubq %zmm11, %zmm15, %zmm15
vpsrlq $63, %zmm15, %zmm11
vpsubq 32(%rax){1to8}, %zmm5, %zmm16
vpsubq %zmm24, %zmm5, %zmm16
vpsubq %zmm11, %zmm16, %zmm16
vpsrlq $63, %zmm16, %zmm11
vpsubq 40(%rax){1to8}, %zmm6, %zmm17
vpsubq %zmm25, %zmm6, %zmm17
vpsubq %zmm11, %zmm17, %zmm17
vpsrlq $63, %zmm17, %zmm11
vpsubq 48(%rax){1to8}, %zmm7, %zmm18
vpsubq %zmm26, %zmm7, %zmm18
vpsubq %zmm11, %zmm18, %zmm18
vpsrlq $63, %zmm18, %zmm11
vpsubq 56(%rax){1to8}, %zmm8, %zmm19
vpsubq %zmm27, %zmm8, %zmm19
vpsubq %zmm11, %zmm19, %zmm19
vpsrlq $63, %zmm19, %zmm11
vpcmpeqq %zmm10, %zmm11, %k1
Expand Down Expand Up @@ -1021,7 +1072,38 @@ vpxorq %zmm22, %zmm22, %zmm22
vpmadd52luq (%rcx){1to8}, %zmm0, %zmm21
vpmadd52luq (%rcx){1to8}, %zmm1, %zmm22
lea PRE(apA)(%rip), %rax
call .L5
vpmadd52luq (%rax), %zmm21, %zmm0
vpmadd52luq 64(%rax), %zmm22, %zmm1
vpmadd52huq (%rax), %zmm21, %zmm2
vpmadd52huq 64(%rax), %zmm22, %zmm3
vpmadd52luq 128(%rax), %zmm21, %zmm2
vpmadd52luq 192(%rax), %zmm22, %zmm3
vpmadd52huq 128(%rax), %zmm21, %zmm4
vpmadd52huq 192(%rax), %zmm22, %zmm5
vpmadd52luq 256(%rax), %zmm21, %zmm4
vpmadd52luq 320(%rax), %zmm22, %zmm5
vpmadd52huq 256(%rax), %zmm21, %zmm6
vpmadd52huq 320(%rax), %zmm22, %zmm7
vpmadd52luq 384(%rax), %zmm21, %zmm6
vpmadd52luq 448(%rax), %zmm22, %zmm7
vpmadd52huq 384(%rax), %zmm21, %zmm8
vpmadd52huq 448(%rax), %zmm22, %zmm9
vpmadd52luq 512(%rax), %zmm21, %zmm8
vpmadd52luq 576(%rax), %zmm22, %zmm9
vpmadd52huq 512(%rax), %zmm21, %zmm10
vpmadd52huq 576(%rax), %zmm22, %zmm11
vpmadd52luq 640(%rax), %zmm21, %zmm10
vpmadd52luq 704(%rax), %zmm22, %zmm11
vpmadd52huq 640(%rax), %zmm21, %zmm12
vpmadd52huq 704(%rax), %zmm22, %zmm13
vpmadd52luq 768(%rax), %zmm21, %zmm12
vpmadd52luq 832(%rax), %zmm22, %zmm13
vpmadd52huq 768(%rax), %zmm21, %zmm14
vpmadd52huq 832(%rax), %zmm22, %zmm15
vpmadd52luq 896(%rax), %zmm21, %zmm14
vpmadd52luq 960(%rax), %zmm22, %zmm15
vpmadd52huq 896(%rax), %zmm21, %zmm16
vpmadd52huq 960(%rax), %zmm22, %zmm17
mov $7, %r8
.balign 32
.L4:
Expand Down Expand Up @@ -1049,7 +1131,38 @@ vmovdqa64 %zmm16, %zmm14
vmovdqa64 %zmm17, %zmm15
vpxorq %zmm16, %zmm16, %zmm16
vpxorq %zmm17, %zmm17, %zmm17
call .L5
vpmadd52luq (%rax), %zmm21, %zmm0
vpmadd52luq 64(%rax), %zmm22, %zmm1
vpmadd52huq (%rax), %zmm21, %zmm2
vpmadd52huq 64(%rax), %zmm22, %zmm3
vpmadd52luq 128(%rax), %zmm21, %zmm2
vpmadd52luq 192(%rax), %zmm22, %zmm3
vpmadd52huq 128(%rax), %zmm21, %zmm4
vpmadd52huq 192(%rax), %zmm22, %zmm5
vpmadd52luq 256(%rax), %zmm21, %zmm4
vpmadd52luq 320(%rax), %zmm22, %zmm5
vpmadd52huq 256(%rax), %zmm21, %zmm6
vpmadd52huq 320(%rax), %zmm22, %zmm7
vpmadd52luq 384(%rax), %zmm21, %zmm6
vpmadd52luq 448(%rax), %zmm22, %zmm7
vpmadd52huq 384(%rax), %zmm21, %zmm8
vpmadd52huq 448(%rax), %zmm22, %zmm9
vpmadd52luq 512(%rax), %zmm21, %zmm8
vpmadd52luq 576(%rax), %zmm22, %zmm9
vpmadd52huq 512(%rax), %zmm21, %zmm10
vpmadd52huq 576(%rax), %zmm22, %zmm11
vpmadd52luq 640(%rax), %zmm21, %zmm10
vpmadd52luq 704(%rax), %zmm22, %zmm11
vpmadd52huq 640(%rax), %zmm21, %zmm12
vpmadd52huq 704(%rax), %zmm22, %zmm13
vpmadd52luq 768(%rax), %zmm21, %zmm12
vpmadd52luq 832(%rax), %zmm22, %zmm13
vpmadd52huq 768(%rax), %zmm21, %zmm14
vpmadd52huq 832(%rax), %zmm22, %zmm15
vpmadd52luq 896(%rax), %zmm21, %zmm14
vpmadd52luq 960(%rax), %zmm22, %zmm15
vpmadd52huq 896(%rax), %zmm21, %zmm16
vpmadd52huq 960(%rax), %zmm22, %zmm17
vpsrlq $52, %zmm23, %zmm21
vpsrlq $52, %zmm24, %zmm22
vpaddq %zmm21, %zmm0, %zmm0
Expand All @@ -1059,7 +1172,38 @@ vpxorq %zmm22, %zmm22, %zmm22
vpmadd52luq (%rcx){1to8}, %zmm0, %zmm21
vpmadd52luq (%rcx){1to8}, %zmm1, %zmm22
lea PRE(apA)(%rip), %rax
call .L5
vpmadd52luq (%rax), %zmm21, %zmm0
vpmadd52luq 64(%rax), %zmm22, %zmm1
vpmadd52huq (%rax), %zmm21, %zmm2
vpmadd52huq 64(%rax), %zmm22, %zmm3
vpmadd52luq 128(%rax), %zmm21, %zmm2
vpmadd52luq 192(%rax), %zmm22, %zmm3
vpmadd52huq 128(%rax), %zmm21, %zmm4
vpmadd52huq 192(%rax), %zmm22, %zmm5
vpmadd52luq 256(%rax), %zmm21, %zmm4
vpmadd52luq 320(%rax), %zmm22, %zmm5
vpmadd52huq 256(%rax), %zmm21, %zmm6
vpmadd52huq 320(%rax), %zmm22, %zmm7
vpmadd52luq 384(%rax), %zmm21, %zmm6
vpmadd52luq 448(%rax), %zmm22, %zmm7
vpmadd52huq 384(%rax), %zmm21, %zmm8
vpmadd52huq 448(%rax), %zmm22, %zmm9
vpmadd52luq 512(%rax), %zmm21, %zmm8
vpmadd52luq 576(%rax), %zmm22, %zmm9
vpmadd52huq 512(%rax), %zmm21, %zmm10
vpmadd52huq 576(%rax), %zmm22, %zmm11
vpmadd52luq 640(%rax), %zmm21, %zmm10
vpmadd52luq 704(%rax), %zmm22, %zmm11
vpmadd52huq 640(%rax), %zmm21, %zmm12
vpmadd52huq 704(%rax), %zmm22, %zmm13
vpmadd52luq 768(%rax), %zmm21, %zmm12
vpmadd52luq 832(%rax), %zmm22, %zmm13
vpmadd52huq 768(%rax), %zmm21, %zmm14
vpmadd52huq 832(%rax), %zmm22, %zmm15
vpmadd52luq 896(%rax), %zmm21, %zmm14
vpmadd52luq 960(%rax), %zmm22, %zmm15
vpmadd52huq 896(%rax), %zmm21, %zmm16
vpmadd52huq 960(%rax), %zmm22, %zmm17
dec %r8
jnz .L4
vpsrlq $52, %zmm0, %zmm21
Expand Down
Loading

0 comments on commit 986b131

Please sign in to comment.