mirror of
https://github.com/muun/recovery.git
synced 2025-02-23 11:32:33 -05:00
66 lines
1.2 KiB
ArmAsm
66 lines
1.2 KiB
ArmAsm
|
// Copyright (c) 2017 Andreas Auernhammer. All rights reserved.
|
||
|
// Use of this source code is governed by a license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
// +build 386, !gccgo, !appengine
|
||
|
|
||
|
#define ROTL(n, t, v) \
|
||
|
MOVO v, t; \
|
||
|
PSLLQ $n, t; \
|
||
|
PSRLQ $(64-n), v; \
|
||
|
PXOR t, v
|
||
|
|
||
|
#define ROUND(v0, v1, v2, v3, t0, t1) \
|
||
|
PADDQ v1, v0; \
|
||
|
PADDQ v3, v2; \
|
||
|
ROTL(13, t0, v1); \
|
||
|
ROTL(16, t1, v3); \
|
||
|
PXOR v0, v1; \
|
||
|
PXOR v2, v3; \
|
||
|
PSHUFD $0xE1, v0, v0; \
|
||
|
PADDQ v1, v2; \
|
||
|
PADDQ v3, v0; \
|
||
|
ROTL(17, t0, v1); \
|
||
|
ROTL(21, t1, v3); \
|
||
|
PXOR v2, v1; \
|
||
|
PXOR v0, v3; \
|
||
|
PSHUFD $0xE1, v2, v2
|
||
|
|
||
|
// coreSSE2(hVal *[4]uint64, msg []byte)
|
||
|
TEXT ·coreSSE2(SB), 4, $0-16
|
||
|
MOVL hVal+0(FP), AX
|
||
|
MOVL msg_base+4(FP), SI
|
||
|
MOVL msg_len+8(FP), BX
|
||
|
MOVQ 0(AX), X0
|
||
|
MOVQ 8(AX), X1
|
||
|
MOVQ 16(AX), X2
|
||
|
MOVQ 24(AX), X3
|
||
|
PXOR X6, X6
|
||
|
ANDL $-8, BX
|
||
|
|
||
|
loop:
|
||
|
MOVQ 0(SI), X6
|
||
|
PXOR X6, X3
|
||
|
ROUND(X0, X1, X2, X3, X4, X5)
|
||
|
ROUND(X0, X1, X2, X3, X4, X5)
|
||
|
PXOR X6, X0
|
||
|
|
||
|
LEAL 8(SI), SI
|
||
|
SUBL $8, BX
|
||
|
JNZ loop
|
||
|
|
||
|
MOVQ X0, 0(AX)
|
||
|
MOVQ X1, 8(AX)
|
||
|
MOVQ X2, 16(AX)
|
||
|
MOVQ X3, 24(AX)
|
||
|
RET
|
||
|
|
||
|
// func supportsSSE2() bool
|
||
|
TEXT ·supportsSSE2(SB), 4, $0-1
|
||
|
MOVL $1, AX
|
||
|
CPUID
|
||
|
SHRL $26, DX
|
||
|
ANDL $1, DX // DX != 0 if support SSE2
|
||
|
MOVB DX, ret+0(FP)
|
||
|
RET
|