github.com/hxx258456/ccgo@v0.0.5-0.20230213014102-48b35f46f66f/internal/bytealg/equal_mipsx.s (about)

     1  // Copyright 2018 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  //go:build mips || mipsle
     6  // +build mips mipsle
     7  
     8  #include "go_asm.h"
     9  #include "textflag.h"
    10  
    11  #define	REGCTXT	R22
    12  
    13  // memequal(a, b unsafe.Pointer, size uintptr) bool
    14  TEXT runtime·memequal(SB),NOSPLIT,$0-13
    15  	MOVW	a+0(FP), R1
    16  	MOVW	b+4(FP), R2
    17  	BEQ	R1, R2, eq
    18  	MOVW	size+8(FP), R3
    19  	ADDU	R1, R3, R4
    20  loop:
    21  	BNE	R1, R4, test
    22  	MOVW	$1, R1
    23  	MOVB	R1, ret+12(FP)
    24  	RET
    25  test:
    26  	MOVBU	(R1), R6
    27  	ADDU	$1, R1
    28  	MOVBU	(R2), R7
    29  	ADDU	$1, R2
    30  	BEQ	R6, R7, loop
    31  
    32  	MOVB	R0, ret+12(FP)
    33  	RET
    34  eq:
    35  	MOVW	$1, R1
    36  	MOVB	R1, ret+12(FP)
    37  	RET
    38  
    39  // memequal_varlen(a, b unsafe.Pointer) bool
    40  TEXT runtime·memequal_varlen(SB),NOSPLIT,$0-9
    41  	MOVW	a+0(FP), R1
    42  	MOVW	b+4(FP), R2
    43  	BEQ	R1, R2, eq
    44  	MOVW	4(REGCTXT), R3	// compiler stores size at offset 4 in the closure
    45  	ADDU	R1, R3, R4
    46  loop:
    47  	BNE	R1, R4, test
    48  	MOVW	$1, R1
    49  	MOVB	R1, ret+8(FP)
    50  	RET
    51  test:
    52  	MOVBU	(R1), R6
    53  	ADDU	$1, R1
    54  	MOVBU	(R2), R7
    55  	ADDU	$1, R2
    56  	BEQ	R6, R7, loop
    57  
    58  	MOVB	R0, ret+8(FP)
    59  	RET
    60  eq:
    61  	MOVW	$1, R1
    62  	MOVB	R1, ret+8(FP)
    63  	RET