715 lines
17 KiB
ArmAsm
715 lines
17 KiB
ArmAsm
|
|
// Code generated by command: go run asm.go -out md5x16.s -stubs stub.go. DO NOT EDIT.
|
||
|
|
|
||
|
|
#include "textflag.h"
|
||
|
|
|
||
|
|
DATA consts<>+0(SB)/4, $0xd76aa478
|
||
|
|
DATA consts<>+4(SB)/4, $0xe8c7b756
|
||
|
|
DATA consts<>+8(SB)/4, $0x242070db
|
||
|
|
DATA consts<>+12(SB)/4, $0xc1bdceee
|
||
|
|
DATA consts<>+16(SB)/4, $0xf57c0faf
|
||
|
|
DATA consts<>+20(SB)/4, $0x4787c62a
|
||
|
|
DATA consts<>+24(SB)/4, $0xa8304613
|
||
|
|
DATA consts<>+28(SB)/4, $0xfd469501
|
||
|
|
DATA consts<>+32(SB)/4, $0x698098d8
|
||
|
|
DATA consts<>+36(SB)/4, $0x8b44f7af
|
||
|
|
DATA consts<>+40(SB)/4, $0xffff5bb1
|
||
|
|
DATA consts<>+44(SB)/4, $0x895cd7be
|
||
|
|
DATA consts<>+48(SB)/4, $0x6b901122
|
||
|
|
DATA consts<>+52(SB)/4, $0xfd987193
|
||
|
|
DATA consts<>+56(SB)/4, $0xa679438e
|
||
|
|
DATA consts<>+60(SB)/4, $0x49b40821
|
||
|
|
DATA consts<>+64(SB)/4, $0xf61e2562
|
||
|
|
DATA consts<>+68(SB)/4, $0xc040b340
|
||
|
|
DATA consts<>+72(SB)/4, $0x265e5a51
|
||
|
|
DATA consts<>+76(SB)/4, $0xe9b6c7aa
|
||
|
|
DATA consts<>+80(SB)/4, $0xd62f105d
|
||
|
|
DATA consts<>+84(SB)/4, $0x02441453
|
||
|
|
DATA consts<>+88(SB)/4, $0xd8a1e681
|
||
|
|
DATA consts<>+92(SB)/4, $0xe7d3fbc8
|
||
|
|
DATA consts<>+96(SB)/4, $0x21e1cde6
|
||
|
|
DATA consts<>+100(SB)/4, $0xc33707d6
|
||
|
|
DATA consts<>+104(SB)/4, $0xf4d50d87
|
||
|
|
DATA consts<>+108(SB)/4, $0x455a14ed
|
||
|
|
DATA consts<>+112(SB)/4, $0xa9e3e905
|
||
|
|
DATA consts<>+116(SB)/4, $0xfcefa3f8
|
||
|
|
DATA consts<>+120(SB)/4, $0x676f02d9
|
||
|
|
DATA consts<>+124(SB)/4, $0x8d2a4c8a
|
||
|
|
DATA consts<>+128(SB)/4, $0xfffa3942
|
||
|
|
DATA consts<>+132(SB)/4, $0x8771f681
|
||
|
|
DATA consts<>+136(SB)/4, $0x6d9d6122
|
||
|
|
DATA consts<>+140(SB)/4, $0xfde5380c
|
||
|
|
DATA consts<>+144(SB)/4, $0xa4beea44
|
||
|
|
DATA consts<>+148(SB)/4, $0x4bdecfa9
|
||
|
|
DATA consts<>+152(SB)/4, $0xf6bb4b60
|
||
|
|
DATA consts<>+156(SB)/4, $0xbebfbc70
|
||
|
|
DATA consts<>+160(SB)/4, $0x289b7ec6
|
||
|
|
DATA consts<>+164(SB)/4, $0xeaa127fa
|
||
|
|
DATA consts<>+168(SB)/4, $0xd4ef3085
|
||
|
|
DATA consts<>+172(SB)/4, $0x04881d05
|
||
|
|
DATA consts<>+176(SB)/4, $0xd9d4d039
|
||
|
|
DATA consts<>+180(SB)/4, $0xe6db99e5
|
||
|
|
DATA consts<>+184(SB)/4, $0x1fa27cf8
|
||
|
|
DATA consts<>+188(SB)/4, $0xc4ac5665
|
||
|
|
DATA consts<>+192(SB)/4, $0xf4292244
|
||
|
|
DATA consts<>+196(SB)/4, $0x432aff97
|
||
|
|
DATA consts<>+200(SB)/4, $0xab9423a7
|
||
|
|
DATA consts<>+204(SB)/4, $0xfc93a039
|
||
|
|
DATA consts<>+208(SB)/4, $0x655b59c3
|
||
|
|
DATA consts<>+212(SB)/4, $0x8f0ccc92
|
||
|
|
DATA consts<>+216(SB)/4, $0xffeff47d
|
||
|
|
DATA consts<>+220(SB)/4, $0x85845dd1
|
||
|
|
DATA consts<>+224(SB)/4, $0x6fa87e4f
|
||
|
|
DATA consts<>+228(SB)/4, $0xfe2ce6e0
|
||
|
|
DATA consts<>+232(SB)/4, $0xa3014314
|
||
|
|
DATA consts<>+236(SB)/4, $0x4e0811a1
|
||
|
|
DATA consts<>+240(SB)/4, $0xf7537e82
|
||
|
|
DATA consts<>+244(SB)/4, $0xbd3af235
|
||
|
|
DATA consts<>+248(SB)/4, $0x2ad7d2bb
|
||
|
|
DATA consts<>+252(SB)/4, $0xeb86d391
|
||
|
|
GLOBL consts<>(SB), RODATA|NOPTR, $256
|
||
|
|
|
||
|
|
// func block(h *[4][16]uint32, base uintptr, offsets *[16]uint32, mask uint16)
|
||
|
|
// Requires: AVX, AVX512F
|
||
|
|
TEXT ·block(SB), $0-26
|
||
|
|
MOVQ h+0(FP), AX
|
||
|
|
MOVQ base+8(FP), CX
|
||
|
|
MOVQ offsets+16(FP), DX
|
||
|
|
KMOVW mask+24(FP), K1
|
||
|
|
|
||
|
|
// Load offsets.
|
||
|
|
VMOVUPD (DX), Z0
|
||
|
|
|
||
|
|
// Load initial hash.
|
||
|
|
VMOVUPD (AX), Z1
|
||
|
|
VMOVUPD 64(AX), Z2
|
||
|
|
VMOVUPD 128(AX), Z3
|
||
|
|
VMOVUPD 192(AX), Z4
|
||
|
|
|
||
|
|
// Initialize registers.
|
||
|
|
VMOVUPD Z1, Z5
|
||
|
|
VMOVUPD Z2, Z6
|
||
|
|
VMOVUPD Z3, Z7
|
||
|
|
VMOVUPD Z4, Z8
|
||
|
|
|
||
|
|
// Round 0.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD (CX)(Z0*1), K2, Z9
|
||
|
|
VPADDD Z9, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+0(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z6, Z7, Z25
|
||
|
|
VPADDD Z25, Z5, Z5
|
||
|
|
VPROLD $0x07, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 1.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 4(CX)(Z0*1), K2, Z10
|
||
|
|
VPADDD Z10, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+4(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z5, Z6, Z25
|
||
|
|
VPADDD Z25, Z8, Z8
|
||
|
|
VPROLD $0x0c, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 2.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 8(CX)(Z0*1), K2, Z11
|
||
|
|
VPADDD Z11, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+8(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z8, Z5, Z25
|
||
|
|
VPADDD Z25, Z7, Z7
|
||
|
|
VPROLD $0x11, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 3.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 12(CX)(Z0*1), K2, Z12
|
||
|
|
VPADDD Z12, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+12(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z7, Z8, Z25
|
||
|
|
VPADDD Z25, Z6, Z6
|
||
|
|
VPROLD $0x16, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 4.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 16(CX)(Z0*1), K2, Z13
|
||
|
|
VPADDD Z13, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+16(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z6, Z7, Z25
|
||
|
|
VPADDD Z25, Z5, Z5
|
||
|
|
VPROLD $0x07, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 5.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 20(CX)(Z0*1), K2, Z14
|
||
|
|
VPADDD Z14, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+20(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z5, Z6, Z25
|
||
|
|
VPADDD Z25, Z8, Z8
|
||
|
|
VPROLD $0x0c, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 6.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 24(CX)(Z0*1), K2, Z15
|
||
|
|
VPADDD Z15, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+24(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z8, Z5, Z25
|
||
|
|
VPADDD Z25, Z7, Z7
|
||
|
|
VPROLD $0x11, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 7.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 28(CX)(Z0*1), K2, Z16
|
||
|
|
VPADDD Z16, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+28(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z7, Z8, Z25
|
||
|
|
VPADDD Z25, Z6, Z6
|
||
|
|
VPROLD $0x16, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 8.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 32(CX)(Z0*1), K2, Z17
|
||
|
|
VPADDD Z17, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+32(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z6, Z7, Z25
|
||
|
|
VPADDD Z25, Z5, Z5
|
||
|
|
VPROLD $0x07, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 9.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 36(CX)(Z0*1), K2, Z18
|
||
|
|
VPADDD Z18, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+36(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z5, Z6, Z25
|
||
|
|
VPADDD Z25, Z8, Z8
|
||
|
|
VPROLD $0x0c, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 10.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 40(CX)(Z0*1), K2, Z19
|
||
|
|
VPADDD Z19, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+40(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z8, Z5, Z25
|
||
|
|
VPADDD Z25, Z7, Z7
|
||
|
|
VPROLD $0x11, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 11.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 44(CX)(Z0*1), K2, Z20
|
||
|
|
VPADDD Z20, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+44(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z7, Z8, Z25
|
||
|
|
VPADDD Z25, Z6, Z6
|
||
|
|
VPROLD $0x16, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 12.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 48(CX)(Z0*1), K2, Z21
|
||
|
|
VPADDD Z21, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+48(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z6, Z7, Z25
|
||
|
|
VPADDD Z25, Z5, Z5
|
||
|
|
VPROLD $0x07, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 13.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 52(CX)(Z0*1), K2, Z22
|
||
|
|
VPADDD Z22, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+52(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z5, Z6, Z25
|
||
|
|
VPADDD Z25, Z8, Z8
|
||
|
|
VPROLD $0x0c, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 14.
|
||
|
|
KMOVW K1, K2
|
||
|
|
VPGATHERDD 56(CX)(Z0*1), K2, Z23
|
||
|
|
VPADDD Z23, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+56(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z25
|
||
|
|
VPTERNLOGD $0xd8, Z8, Z5, Z25
|
||
|
|
VPADDD Z25, Z7, Z7
|
||
|
|
VPROLD $0x11, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 15.
|
||
|
|
KMOVW K1, K1
|
||
|
|
VPGATHERDD 60(CX)(Z0*1), K1, Z24
|
||
|
|
VPADDD Z24, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+60(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0xd8, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x16, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 16.
|
||
|
|
VPADDD Z10, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+64(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0xac, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x05, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 17.
|
||
|
|
VPADDD Z15, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+68(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0xac, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x09, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 18.
|
||
|
|
VPADDD Z20, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+72(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0xac, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0e, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 19.
|
||
|
|
VPADDD Z9, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+76(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0xac, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x14, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 20.
|
||
|
|
VPADDD Z14, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+80(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0xac, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x05, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 21.
|
||
|
|
VPADDD Z19, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+84(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0xac, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x09, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 22.
|
||
|
|
VPADDD Z24, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+88(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0xac, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0e, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 23.
|
||
|
|
VPADDD Z13, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+92(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0xac, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x14, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 24.
|
||
|
|
VPADDD Z18, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+96(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0xac, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x05, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 25.
|
||
|
|
VPADDD Z23, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+100(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0xac, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x09, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 26.
|
||
|
|
VPADDD Z12, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+104(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0xac, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0e, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 27.
|
||
|
|
VPADDD Z17, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+108(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0xac, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x14, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 28.
|
||
|
|
VPADDD Z22, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+112(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0xac, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x05, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 29.
|
||
|
|
VPADDD Z11, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+116(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0xac, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x09, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 30.
|
||
|
|
VPADDD Z16, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+120(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0xac, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0e, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 31.
|
||
|
|
VPADDD Z21, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+124(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0xac, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x14, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 32.
|
||
|
|
VPADDD Z14, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+128(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x96, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x04, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 33.
|
||
|
|
VPADDD Z17, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+132(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x96, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0b, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 34.
|
||
|
|
VPADDD Z20, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+136(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x96, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x10, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 35.
|
||
|
|
VPADDD Z23, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+140(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x96, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x17, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 36.
|
||
|
|
VPADDD Z10, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+144(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x96, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x04, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 37.
|
||
|
|
VPADDD Z13, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+148(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x96, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0b, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 38.
|
||
|
|
VPADDD Z16, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+152(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x96, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x10, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 39.
|
||
|
|
VPADDD Z19, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+156(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x96, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x17, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 40.
|
||
|
|
VPADDD Z22, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+160(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x96, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x04, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 41.
|
||
|
|
VPADDD Z9, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+164(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x96, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0b, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 42.
|
||
|
|
VPADDD Z12, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+168(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x96, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x10, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 43.
|
||
|
|
VPADDD Z15, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+172(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x96, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x17, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 44.
|
||
|
|
VPADDD Z18, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+176(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x96, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x04, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 45.
|
||
|
|
VPADDD Z21, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+180(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x96, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0b, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 46.
|
||
|
|
VPADDD Z24, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+184(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x96, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x10, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 47.
|
||
|
|
VPADDD Z11, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+188(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x96, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x17, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 48.
|
||
|
|
VPADDD Z9, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+192(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x63, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x06, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 49.
|
||
|
|
VPADDD Z16, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+196(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x63, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0a, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 50.
|
||
|
|
VPADDD Z23, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+200(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x63, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0f, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 51.
|
||
|
|
VPADDD Z14, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+204(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x63, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x15, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 52.
|
||
|
|
VPADDD Z21, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+208(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x63, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x06, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 53.
|
||
|
|
VPADDD Z12, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+212(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x63, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0a, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 54.
|
||
|
|
VPADDD Z19, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+216(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x63, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0f, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 55.
|
||
|
|
VPADDD Z10, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+220(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x63, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x15, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 56.
|
||
|
|
VPADDD Z17, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+224(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x63, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x06, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 57.
|
||
|
|
VPADDD Z24, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+228(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x63, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0a, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 58.
|
||
|
|
VPADDD Z15, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+232(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x63, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0f, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 59.
|
||
|
|
VPADDD Z22, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+236(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x63, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x15, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Round 60.
|
||
|
|
VPADDD Z13, Z5, Z5
|
||
|
|
VPADDD.BCST consts<>+240(SB), Z5, Z5
|
||
|
|
VMOVUPD Z8, Z0
|
||
|
|
VPTERNLOGD $0x63, Z6, Z7, Z0
|
||
|
|
VPADDD Z0, Z5, Z5
|
||
|
|
VPROLD $0x06, Z5, Z5
|
||
|
|
VPADDD Z6, Z5, Z5
|
||
|
|
|
||
|
|
// Round 61.
|
||
|
|
VPADDD Z20, Z8, Z8
|
||
|
|
VPADDD.BCST consts<>+244(SB), Z8, Z8
|
||
|
|
VMOVUPD Z7, Z0
|
||
|
|
VPTERNLOGD $0x63, Z5, Z6, Z0
|
||
|
|
VPADDD Z0, Z8, Z8
|
||
|
|
VPROLD $0x0a, Z8, Z8
|
||
|
|
VPADDD Z5, Z8, Z8
|
||
|
|
|
||
|
|
// Round 62.
|
||
|
|
VPADDD Z11, Z7, Z7
|
||
|
|
VPADDD.BCST consts<>+248(SB), Z7, Z7
|
||
|
|
VMOVUPD Z6, Z0
|
||
|
|
VPTERNLOGD $0x63, Z8, Z5, Z0
|
||
|
|
VPADDD Z0, Z7, Z7
|
||
|
|
VPROLD $0x0f, Z7, Z7
|
||
|
|
VPADDD Z8, Z7, Z7
|
||
|
|
|
||
|
|
// Round 63.
|
||
|
|
VPADDD Z18, Z6, Z6
|
||
|
|
VPADDD.BCST consts<>+252(SB), Z6, Z6
|
||
|
|
VMOVUPD Z5, Z0
|
||
|
|
VPTERNLOGD $0x63, Z7, Z8, Z0
|
||
|
|
VPADDD Z0, Z6, Z6
|
||
|
|
VPROLD $0x15, Z6, Z6
|
||
|
|
VPADDD Z7, Z6, Z6
|
||
|
|
|
||
|
|
// Final add.
|
||
|
|
VPADDD Z5, Z1, Z1
|
||
|
|
VPADDD Z6, Z2, Z2
|
||
|
|
VPADDD Z7, Z3, Z3
|
||
|
|
VPADDD Z8, Z4, Z4
|
||
|
|
|
||
|
|
// Store results back.
|
||
|
|
VMOVUPD Z1, (AX)
|
||
|
|
VMOVUPD Z2, 64(AX)
|
||
|
|
VMOVUPD Z3, 128(AX)
|
||
|
|
VMOVUPD Z4, 192(AX)
|
||
|
|
VZEROUPPER
|
||
|
|
RET
|