mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-05-04 18:14:53 -05:00
96042752bb
Fixes: #1774
98 lines
1.7 KiB
ArmAsm
98 lines
1.7 KiB
ArmAsm
// Copyright 2017 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"
|
|
|
|
// castagnoliUpdate updates the non-inverted crc with the given data.
|
|
|
|
// func castagnoliUpdate(crc uint32, p []byte) uint32
|
|
TEXT ·castagnoliUpdate(SB), NOSPLIT, $0-36
|
|
MOVWU crc+0(FP), R9 // CRC value
|
|
MOVD p+8(FP), R13 // data pointer
|
|
MOVD p_len+16(FP), R11 // len(p)
|
|
|
|
update:
|
|
CMP $16, R11
|
|
BLT less_than_16
|
|
LDP.P 16(R13), (R8, R10)
|
|
CRC32CX R8, R9
|
|
CRC32CX R10, R9
|
|
SUB $16, R11
|
|
|
|
JMP update
|
|
|
|
less_than_16:
|
|
TBZ $3, R11, less_than_8
|
|
|
|
MOVD.P 8(R13), R10
|
|
CRC32CX R10, R9
|
|
|
|
less_than_8:
|
|
TBZ $2, R11, less_than_4
|
|
|
|
MOVWU.P 4(R13), R10
|
|
CRC32CW R10, R9
|
|
|
|
less_than_4:
|
|
TBZ $1, R11, less_than_2
|
|
|
|
MOVHU.P 2(R13), R10
|
|
CRC32CH R10, R9
|
|
|
|
less_than_2:
|
|
TBZ $0, R11, done
|
|
|
|
MOVBU (R13), R10
|
|
CRC32CB R10, R9
|
|
|
|
done:
|
|
MOVWU R9, ret+32(FP)
|
|
RET
|
|
|
|
// ieeeUpdate updates the non-inverted crc with the given data.
|
|
|
|
// func ieeeUpdate(crc uint32, p []byte) uint32
|
|
TEXT ·ieeeUpdate(SB), NOSPLIT, $0-36
|
|
MOVWU crc+0(FP), R9 // CRC value
|
|
MOVD p+8(FP), R13 // data pointer
|
|
MOVD p_len+16(FP), R11 // len(p)
|
|
|
|
update:
|
|
CMP $16, R11
|
|
BLT less_than_16
|
|
LDP.P 16(R13), (R8, R10)
|
|
CRC32X R8, R9
|
|
CRC32X R10, R9
|
|
SUB $16, R11
|
|
|
|
JMP update
|
|
|
|
less_than_16:
|
|
TBZ $3, R11, less_than_8
|
|
|
|
MOVD.P 8(R13), R10
|
|
CRC32X R10, R9
|
|
|
|
less_than_8:
|
|
TBZ $2, R11, less_than_4
|
|
|
|
MOVWU.P 4(R13), R10
|
|
CRC32W R10, R9
|
|
|
|
less_than_4:
|
|
TBZ $1, R11, less_than_2
|
|
|
|
MOVHU.P 2(R13), R10
|
|
CRC32H R10, R9
|
|
|
|
less_than_2:
|
|
TBZ $0, R11, done
|
|
|
|
MOVBU (R13), R10
|
|
CRC32B R10, R9
|
|
|
|
done:
|
|
MOVWU R9, ret+32(FP)
|
|
RET
|