// 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