// The AES-NI, SHA and carry-less multiply round instructions as GOROOT's // crypto kernels spell them. Every result is folded back so no instruction // is dead. #include "textflag.h" // func aesround(blk, rk *byte) TEXT ·aesround(SB), NOSPLIT, $0-16 MOVQ blk+0(FP), SI MOVQ rk+8(FP), DI MOVOU (SI), X0 MOVOU (DI), X1 AESENC X1, X0 AESENCLAST X1, X0 AESDEC X1, X0 AESDECLAST X1, X0 AESIMC X1, X2 AESKEYGENASSIST $1, X1, X3 MOVOU X0, (SI) MOVOU X2, (DI) RET // func sha1block(p *byte, n int, h *[5]uint32) TEXT ·sha1block(SB), NOSPLIT, $0-24 MOVQ p+0(FP), SI MOVQ h+16(FP), DI MOVOU (SI), X0 MOVOU 16(SI), X1 SHA1RNDS4 $0, X1, X0 SHA1NEXTE X1, X0 SHA1MSG1 X1, X2 SHA1MSG2 X1, X2 MOVOU X0, (DI) RET // func sha256block(p *byte, n int, h *[8]uint32) TEXT ·sha256block(SB), NOSPLIT, $0-24 MOVQ p+0(FP), SI MOVQ h+16(FP), DI MOVOU (SI), X0 MOVOU 16(SI), X1 SHA256RNDS2 X0, X1, X0 SHA256MSG1 X1, X2 SHA256MSG2 X1, X2 MOVOU X0, (DI) RET // func pclmul(a, b *byte) TEXT ·pclmul(SB), NOSPLIT, $0-16 MOVQ a+0(FP), SI MOVQ b+8(FP), DI MOVOU (SI), X0 MOVOU (DI), X1 PCLMULQDQ $0, X1, X0 PCLMULQDQ $17, (DI), X0 MOVOU X0, (SI) RET