mirror of
https://github.com/muun/recovery.git
synced 2025-02-23 03:22:31 -05:00
50 lines
899 B
ArmAsm
50 lines
899 B
ArmAsm
// Copyright (c) 2016 Andreas Auernhammer. All rights reserved.
|
|
// Use of this source code is governed by a license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// +build amd64, !gccgo, !appengine
|
|
|
|
#define ROUND(v0, v1, v2, v3) \
|
|
ADDQ v1, v0; \
|
|
ADDQ v3, v2; \
|
|
ROLQ $13, v1; \
|
|
ROLQ $16, v3; \
|
|
XORQ v0, v1; \
|
|
XORQ v2, v3; \
|
|
ROLQ $32, v0; \
|
|
ADDQ v1, v2; \
|
|
ADDQ v3, v0; \
|
|
ROLQ $17, v1; \
|
|
ROLQ $21, v3; \
|
|
XORQ v2, v1; \
|
|
XORQ v0, v3; \
|
|
ROLQ $32, v2
|
|
|
|
// core(hVal *[4]uint64, msg []byte)
|
|
TEXT ·core(SB), 4, $0-32
|
|
MOVQ hVal+0(FP), AX
|
|
MOVQ msg_base+8(FP), SI
|
|
MOVQ msg_len+16(FP), BX
|
|
MOVQ 0(AX), R9
|
|
MOVQ 8(AX), R10
|
|
MOVQ 16(AX), R11
|
|
MOVQ 24(AX), R12
|
|
ANDQ $-8, BX
|
|
|
|
loop:
|
|
MOVQ 0(SI), DX
|
|
XORQ DX, R12
|
|
ROUND(R9, R10, R11, R12)
|
|
ROUND(R9, R10, R11, R12)
|
|
XORQ DX, R9
|
|
|
|
LEAQ 8(SI), SI
|
|
SUBQ $8, BX
|
|
JNZ loop
|
|
|
|
MOVQ R9, 0(AX)
|
|
MOVQ R10, 8(AX)
|
|
MOVQ R11, 16(AX)
|
|
MOVQ R12, 24(AX)
|
|
RET
|