/go/arrow/math/uint64_avx2_amd64.s

https://github.com/apache/arrow · Assembly · 173 lines · 160 code · 13 blank · 0 comment · 0 complexity · f168b688e3b76000d687562c81bb7ca3 MD5 · raw file

  1. //+build !noasm !appengine
  2. // AUTO-GENERATED BY C2GOASM -- DO NOT EDIT
  3. TEXT ·_sum_uint64_avx2(SB), $0-24
  4. MOVQ buf+0(FP), DI
  5. MOVQ len+8(FP), SI
  6. MOVQ res+16(FP), DX
  7. WORD $0x8548; BYTE $0xf6 // test rsi, rsi
  8. JE LBB0_1
  9. LONG $0x1ffe8348 // cmp rsi, 31
  10. JBE LBB0_3
  11. WORD $0x8949; BYTE $0xf1 // mov r9, rsi
  12. LONG $0xe0e18349 // and r9, -32
  13. JE LBB0_3
  14. LONG $0xe0418d4d // lea r8, [r9 - 32]
  15. WORD $0x8944; BYTE $0xc0 // mov eax, r8d
  16. WORD $0xe8c1; BYTE $0x05 // shr eax, 5
  17. WORD $0xc0ff // inc eax
  18. LONG $0x07e08348 // and rax, 7
  19. JE LBB0_8
  20. WORD $0xf748; BYTE $0xd8 // neg rax
  21. LONG $0xc0effdc5 // vpxor ymm0, ymm0, ymm0
  22. WORD $0xc931 // xor ecx, ecx
  23. LONG $0xc9eff5c5 // vpxor ymm1, ymm1, ymm1
  24. LONG $0xd2efedc5 // vpxor ymm2, ymm2, ymm2
  25. LONG $0xdbefe5c5 // vpxor ymm3, ymm3, ymm3
  26. LONG $0xe4efddc5 // vpxor ymm4, ymm4, ymm4
  27. LONG $0xedefd5c5 // vpxor ymm5, ymm5, ymm5
  28. LONG $0xf6efcdc5 // vpxor ymm6, ymm6, ymm6
  29. LONG $0xffefc5c5 // vpxor ymm7, ymm7, ymm7
  30. LBB0_10:
  31. LONG $0x04d4fdc5; BYTE $0xcf // vpaddq ymm0, ymm0, yword [rdi + 8*rcx]
  32. LONG $0x4cd4f5c5; WORD $0x20cf // vpaddq ymm1, ymm1, yword [rdi + 8*rcx + 32]
  33. LONG $0x54d4edc5; WORD $0x40cf // vpaddq ymm2, ymm2, yword [rdi + 8*rcx + 64]
  34. LONG $0x5cd4e5c5; WORD $0x60cf // vpaddq ymm3, ymm3, yword [rdi + 8*rcx + 96]
  35. QUAD $0x000080cfa4d4ddc5; BYTE $0x00 // vpaddq ymm4, ymm4, yword [rdi + 8*rcx + 128]
  36. QUAD $0x0000a0cfacd4d5c5; BYTE $0x00 // vpaddq ymm5, ymm5, yword [rdi + 8*rcx + 160]
  37. QUAD $0x0000c0cfb4d4cdc5; BYTE $0x00 // vpaddq ymm6, ymm6, yword [rdi + 8*rcx + 192]
  38. QUAD $0x0000e0cfbcd4c5c5; BYTE $0x00 // vpaddq ymm7, ymm7, yword [rdi + 8*rcx + 224]
  39. LONG $0x20c18348 // add rcx, 32
  40. WORD $0xff48; BYTE $0xc0 // inc rax
  41. JNE LBB0_10
  42. JMP LBB0_11
  43. LBB0_3:
  44. WORD $0x3145; BYTE $0xc9 // xor r9d, r9d
  45. WORD $0xc031 // xor eax, eax
  46. LBB0_4:
  47. LONG $0xcf0c8d4a // lea rcx, [rdi + 8*r9]
  48. WORD $0x294c; BYTE $0xce // sub rsi, r9
  49. LBB0_5:
  50. WORD $0x0348; BYTE $0x01 // add rax, qword [rcx]
  51. LONG $0x08c18348 // add rcx, 8
  52. WORD $0xff48; BYTE $0xce // dec rsi
  53. JNE LBB0_5
  54. JMP LBB0_15
  55. LBB0_1:
  56. WORD $0xc031 // xor eax, eax
  57. LBB0_15:
  58. WORD $0x8948; BYTE $0x02 // mov qword [rdx], rax
  59. VZEROUPPER
  60. RET
  61. LBB0_8:
  62. WORD $0xc931 // xor ecx, ecx
  63. LONG $0xc0effdc5 // vpxor ymm0, ymm0, ymm0
  64. LONG $0xc9eff5c5 // vpxor ymm1, ymm1, ymm1
  65. LONG $0xd2efedc5 // vpxor ymm2, ymm2, ymm2
  66. LONG $0xdbefe5c5 // vpxor ymm3, ymm3, ymm3
  67. LONG $0xe4efddc5 // vpxor ymm4, ymm4, ymm4
  68. LONG $0xedefd5c5 // vpxor ymm5, ymm5, ymm5
  69. LONG $0xf6efcdc5 // vpxor ymm6, ymm6, ymm6
  70. LONG $0xffefc5c5 // vpxor ymm7, ymm7, ymm7
  71. LBB0_11:
  72. LONG $0xe0f88149; WORD $0x0000; BYTE $0x00 // cmp r8, 224
  73. JB LBB0_14
  74. WORD $0x894c; BYTE $0xc8 // mov rax, r9
  75. WORD $0x2948; BYTE $0xc8 // sub rax, rcx
  76. QUAD $0x00000700cf8c8d48 // lea rcx, [rdi + 8*rcx + 1792]
  77. LBB0_13:
  78. QUAD $0xfffff9e0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 1568]
  79. QUAD $0xfffff9c0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 1600]
  80. QUAD $0xfffff9a0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 1632]
  81. QUAD $0xfffff980a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 1664]
  82. QUAD $0xfffff96099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 1696]
  83. QUAD $0xfffff94091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 1728]
  84. QUAD $0xfffff92089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 1760]
  85. QUAD $0xfffff90081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1792]
  86. QUAD $0xfffffa0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1536]
  87. QUAD $0xfffffa2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 1504]
  88. QUAD $0xfffffa4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 1472]
  89. QUAD $0xfffffa6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 1440]
  90. QUAD $0xfffffa80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 1408]
  91. QUAD $0xfffffaa0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 1376]
  92. QUAD $0xfffffac0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 1344]
  93. QUAD $0xfffffae0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 1312]
  94. QUAD $0xfffffbe0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 1056]
  95. QUAD $0xfffffbc0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 1088]
  96. QUAD $0xfffffba0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 1120]
  97. QUAD $0xfffffb80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 1152]
  98. QUAD $0xfffffb6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 1184]
  99. QUAD $0xfffffb4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 1216]
  100. QUAD $0xfffffb2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 1248]
  101. QUAD $0xfffffb0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1280]
  102. QUAD $0xfffffc0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 1024]
  103. QUAD $0xfffffc2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 992]
  104. QUAD $0xfffffc4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 960]
  105. QUAD $0xfffffc6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 928]
  106. QUAD $0xfffffc80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 896]
  107. QUAD $0xfffffca0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 864]
  108. QUAD $0xfffffcc0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 832]
  109. QUAD $0xfffffce0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 800]
  110. QUAD $0xfffffde0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 544]
  111. QUAD $0xfffffdc0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 576]
  112. QUAD $0xfffffda0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 608]
  113. QUAD $0xfffffd80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 640]
  114. QUAD $0xfffffd6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 672]
  115. QUAD $0xfffffd4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 704]
  116. QUAD $0xfffffd2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 736]
  117. QUAD $0xfffffd0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 768]
  118. QUAD $0xfffffe0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 512]
  119. QUAD $0xfffffe2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 480]
  120. QUAD $0xfffffe4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 448]
  121. QUAD $0xfffffe6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 416]
  122. QUAD $0xfffffe80a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx - 384]
  123. QUAD $0xfffffea0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx - 352]
  124. QUAD $0xfffffec0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx - 320]
  125. QUAD $0xfffffee0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx - 288]
  126. LONG $0x79d4c5c5; BYTE $0xe0 // vpaddq ymm7, ymm7, yword [rcx - 32]
  127. LONG $0x71d4cdc5; BYTE $0xc0 // vpaddq ymm6, ymm6, yword [rcx - 64]
  128. LONG $0x69d4d5c5; BYTE $0xa0 // vpaddq ymm5, ymm5, yword [rcx - 96]
  129. LONG $0x61d4ddc5; BYTE $0x80 // vpaddq ymm4, ymm4, yword [rcx - 128]
  130. QUAD $0xffffff6099d4e5c5 // vpaddq ymm3, ymm3, yword [rcx - 160]
  131. QUAD $0xffffff4091d4edc5 // vpaddq ymm2, ymm2, yword [rcx - 192]
  132. QUAD $0xffffff2089d4f5c5 // vpaddq ymm1, ymm1, yword [rcx - 224]
  133. QUAD $0xffffff0081d4fdc5 // vpaddq ymm0, ymm0, yword [rcx - 256]
  134. LONG $0x01d4fdc5 // vpaddq ymm0, ymm0, yword [rcx]
  135. LONG $0x49d4f5c5; BYTE $0x20 // vpaddq ymm1, ymm1, yword [rcx + 32]
  136. LONG $0x51d4edc5; BYTE $0x40 // vpaddq ymm2, ymm2, yword [rcx + 64]
  137. LONG $0x59d4e5c5; BYTE $0x60 // vpaddq ymm3, ymm3, yword [rcx + 96]
  138. QUAD $0x00000080a1d4ddc5 // vpaddq ymm4, ymm4, yword [rcx + 128]
  139. QUAD $0x000000a0a9d4d5c5 // vpaddq ymm5, ymm5, yword [rcx + 160]
  140. QUAD $0x000000c0b1d4cdc5 // vpaddq ymm6, ymm6, yword [rcx + 192]
  141. QUAD $0x000000e0b9d4c5c5 // vpaddq ymm7, ymm7, yword [rcx + 224]
  142. LONG $0x00c18148; WORD $0x0008; BYTE $0x00 // add rcx, 2048
  143. LONG $0xff000548; WORD $0xffff // add rax, -256
  144. JNE LBB0_13
  145. LBB0_14:
  146. LONG $0xcdd4f5c5 // vpaddq ymm1, ymm1, ymm5
  147. LONG $0xdfd4e5c5 // vpaddq ymm3, ymm3, ymm7
  148. LONG $0xc4d4fdc5 // vpaddq ymm0, ymm0, ymm4
  149. LONG $0xd6d4edc5 // vpaddq ymm2, ymm2, ymm6
  150. LONG $0xc2d4fdc5 // vpaddq ymm0, ymm0, ymm2
  151. LONG $0xcbd4f5c5 // vpaddq ymm1, ymm1, ymm3
  152. LONG $0xc1d4fdc5 // vpaddq ymm0, ymm0, ymm1
  153. LONG $0x397de3c4; WORD $0x01c1 // vextracti128 xmm1, ymm0, 1
  154. LONG $0xc1d4fdc5 // vpaddq ymm0, ymm0, ymm1
  155. LONG $0xc870f9c5; BYTE $0x4e // vpshufd xmm1, xmm0, 78
  156. LONG $0xc1d4fdc5 // vpaddq ymm0, ymm0, ymm1
  157. LONG $0x7ef9e1c4; BYTE $0xc0 // vmovq rax, xmm0
  158. WORD $0x3949; BYTE $0xf1 // cmp r9, rsi
  159. JNE LBB0_4
  160. JMP LBB0_15