// Copyright 2019 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 "go_asm.h" #include "textflag.h" #define CTXT S4 // func memequal(a, b unsafe.Pointer, size uintptr) bool TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25 MOV a+0(FP), A1 MOV b+8(FP), A2 BEQ A1, A2, eq MOV size+16(FP), A3 ADD A1, A3, A4 loop: BEQ A1, A4, eq MOVBU (A1), A6 ADD $1, A1 MOVBU (A2), A7 ADD $1, A2 BEQ A6, A7, loop MOVB ZERO, ret+24(FP) RET eq: MOV $1, A1 MOVB A1, ret+24(FP) RET // func memequal_varlen(a, b unsafe.Pointer) bool TEXT runtime·memequal_varlen(SB),NOSPLIT,$40-17 MOV a+0(FP), A1 MOV b+8(FP), A2 BEQ A1, A2, eq MOV 8(CTXT), A3 // compiler stores size at offset 8 in the closure MOV A1, 8(X2) MOV A2, 16(X2) MOV A3, 24(X2) CALL runtime·memequal(SB) MOVBU 32(X2), A1 MOVB A1, ret+16(FP) RET eq: MOV $1, A1 MOVB A1, ret+16(FP) RET