35 lines
917 B
ArmAsm
35 lines
917 B
ArmAsm
|
// Copyright 2016 The Go Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style
|
||
|
// license that can be found in the LICENSE file.
|
||
|
|
||
|
#include "textflag.h"
|
||
|
|
||
|
// func featureCheck() bool
|
||
|
TEXT ·featureCheck(SB),NOSPLIT,$16-1
|
||
|
LA tmp-16(SP), R1
|
||
|
XOR R0, R0 // query function code is 0
|
||
|
WORD $0xB93E0006 // KIMD (R6 is ignored)
|
||
|
MOVBZ tmp-16(SP), R4 // get the first byte
|
||
|
AND $0x20, R4 // bit 2 (big endian) for SHA256
|
||
|
CMPBEQ R4, $0, nosha256
|
||
|
MOVB $1, ret+0(FP)
|
||
|
RET
|
||
|
nosha256:
|
||
|
MOVB $0, ret+0(FP)
|
||
|
RET
|
||
|
|
||
|
// func block(dig *digest, p []byte)
|
||
|
TEXT ·block(SB),NOSPLIT,$0-32
|
||
|
MOVBZ ·useAsm(SB), R4
|
||
|
LMG dig+0(FP), R1, R3 // R2 = &p[0], R3 = len(p)
|
||
|
CMPBNE R4, $1, generic
|
||
|
MOVBZ $2, R0 // SHA256 function code
|
||
|
loop:
|
||
|
WORD $0xB93E0002 // KIMD R2
|
||
|
BVS loop // continue if interrupted
|
||
|
done:
|
||
|
XOR R0, R0 // restore R0
|
||
|
RET
|
||
|
generic:
|
||
|
BR ·blockGeneric(SB)
|