github.com/hikaru7719/go@v0.0.0-20181025140707-c8b2ac68906a/src/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 // +build mips mipsle 6 7 #include "go_asm.h" 8 #include "textflag.h" 9 10 #define REGCTXT R22 11 12 TEXT ·Equal(SB),NOSPLIT,$0-25 13 MOVW a_len+4(FP), R3 14 MOVW b_len+16(FP), R4 15 BNE R3, R4, noteq // unequal lengths are not equal 16 17 MOVW a_base+0(FP), R1 18 MOVW b_base+12(FP), R2 19 ADDU R1, R3 // end 20 21 loop: 22 BEQ R1, R3, equal // reached the end 23 MOVBU (R1), R6 24 ADDU $1, R1 25 MOVBU (R2), R7 26 ADDU $1, R2 27 BEQ R6, R7, loop 28 29 noteq: 30 MOVB R0, ret+24(FP) 31 RET 32 33 equal: 34 MOVW $1, R1 35 MOVB R1, ret+24(FP) 36 RET 37 38 TEXT bytes·Equal(SB),NOSPLIT,$0-25 39 FUNCDATA $0, ·Equal·args_stackmap(SB) 40 JMP ·Equal(SB) 41 42 // memequal(a, b unsafe.Pointer, size uintptr) bool 43 TEXT runtime·memequal(SB),NOSPLIT,$0-13 44 MOVW a+0(FP), R1 45 MOVW b+4(FP), R2 46 BEQ R1, R2, eq 47 MOVW size+8(FP), R3 48 ADDU R1, R3, R4 49 loop: 50 BNE R1, R4, test 51 MOVW $1, R1 52 MOVB R1, ret+12(FP) 53 RET 54 test: 55 MOVBU (R1), R6 56 ADDU $1, R1 57 MOVBU (R2), R7 58 ADDU $1, R2 59 BEQ R6, R7, loop 60 61 MOVB R0, ret+12(FP) 62 RET 63 eq: 64 MOVW $1, R1 65 MOVB R1, ret+12(FP) 66 RET 67 68 // memequal_varlen(a, b unsafe.Pointer) bool 69 TEXT runtime·memequal_varlen(SB),NOSPLIT,$0-9 70 MOVW a+0(FP), R1 71 MOVW b+4(FP), R2 72 BEQ R1, R2, eq 73 MOVW 4(REGCTXT), R3 // compiler stores size at offset 4 in the closure 74 ADDU R1, R3, R4 75 loop: 76 BNE R1, R4, test 77 MOVW $1, R1 78 MOVB R1, ret+8(FP) 79 RET 80 test: 81 MOVBU (R1), R6 82 ADDU $1, R1 83 MOVBU (R2), R7 84 ADDU $1, R2 85 BEQ R6, R7, loop 86 87 MOVB R0, ret+8(FP) 88 RET 89 eq: 90 MOVW $1, R1 91 MOVB R1, ret+8(FP) 92 RET