...

Text file src/hash/crc32/crc32_arm64.s

Documentation: hash/crc32

     1// Copyright 2017 The Go Authors. All rights reserved.
     2// Use of this source code is governed by a BSD-style
     3// license that can be found in the LICENSE file.
     4
     5#include "textflag.h"
     6
     7// castagnoliUpdate updates the non-inverted crc with the given data.
     8
     9// func castagnoliUpdate(crc uint32, p []byte) uint32
    10TEXT ·castagnoliUpdate(SB),NOSPLIT,$0-36
    11	MOVWU	crc+0(FP), R9  // CRC value
    12	MOVD	p+8(FP), R13  // data pointer
    13	MOVD	p_len+16(FP), R11  // len(p)
    14
    15update:
    16	CMP	$16, R11
    17	BLT	less_than_16
    18	LDP.P	16(R13), (R8, R10)
    19	CRC32CX	R8, R9
    20	CRC32CX	R10, R9
    21	SUB	$16, R11
    22
    23	JMP	update
    24
    25less_than_16:
    26	TBZ	$3, R11, less_than_8
    27
    28	MOVD.P	8(R13), R10
    29	CRC32CX	R10, R9
    30
    31less_than_8:
    32	TBZ	$2, R11, less_than_4
    33
    34	MOVWU.P	4(R13), R10
    35	CRC32CW	R10, R9
    36
    37less_than_4:
    38	TBZ	$1, R11, less_than_2
    39
    40	MOVHU.P	2(R13), R10
    41	CRC32CH	R10, R9
    42
    43less_than_2:
    44	TBZ	$0, R11, done
    45
    46	MOVBU	(R13), R10
    47	CRC32CB	R10, R9
    48
    49done:
    50	MOVWU	R9, ret+32(FP)
    51	RET
    52
    53// ieeeUpdate updates the non-inverted crc with the given data.
    54
    55// func ieeeUpdate(crc uint32, p []byte) uint32
    56TEXT ·ieeeUpdate(SB),NOSPLIT,$0-36
    57	MOVWU	crc+0(FP), R9  // CRC value
    58	MOVD	p+8(FP), R13  // data pointer
    59	MOVD	p_len+16(FP), R11  // len(p)
    60
    61update:
    62	CMP	$16, R11
    63	BLT	less_than_16
    64	LDP.P	16(R13), (R8, R10)
    65	CRC32X	R8, R9
    66	CRC32X	R10, R9
    67	SUB	$16, R11
    68
    69	JMP	update
    70
    71less_than_16:
    72	TBZ $3, R11, less_than_8
    73
    74	MOVD.P	8(R13), R10
    75	CRC32X	R10, R9
    76
    77less_than_8:
    78	TBZ	$2, R11, less_than_4
    79
    80	MOVWU.P	4(R13), R10
    81	CRC32W	R10, R9
    82
    83less_than_4:
    84	TBZ	$1, R11, less_than_2
    85
    86	MOVHU.P	2(R13), R10
    87	CRC32H	R10, R9
    88
    89less_than_2:
    90	TBZ	$0, R11, done
    91
    92	MOVBU	(R13), R10
    93	CRC32B	R10, R9
    94
    95done:
    96	MOVWU	R9, ret+32(FP)
    97	RET

View as plain text