// Copyright 2018 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" TEXT ·Equal(SB), NOSPLIT, $0-49 MOVD a_len+8(FP), R0 MOVD b_len+32(FP), R1 Get R0 Get R1 I64Eq If Get SP I64Load a+0(FP) I64Load b+24(FP) Get R0 Call memeqbody<>(SB) I64Store8 ret+48(FP) Else Get SP I64Const $0 I64Store8 ret+48(FP) End RET // memequal(p, q unsafe.Pointer, size uintptr) bool TEXT runtime·memequal(SB), NOSPLIT, $0-25 Get SP I64Load a+0(FP) I64Load b+8(FP) I64Load size+16(FP) Call memeqbody<>(SB) I64Store8 ret+24(FP) RET // memequal_varlen(a, b unsafe.Pointer) bool TEXT runtime·memequal_varlen(SB), NOSPLIT, $0-17 Get SP I64Load a+0(FP) I64Load b+8(FP) I64Load 8(CTXT) // compiler stores size at offset 8 in the closure Call memeqbody<>(SB) I64Store8 ret+16(FP) RET // params: a, b, len // ret: 0/1 TEXT memeqbody<>(SB), NOSPLIT, $0-0 Get R0 Get R1 I64Eq If I64Const $1 Return End loop: Loop Get R2 I64Eqz If I64Const $1 Return End Get R0 I32WrapI64 I64Load8U $0 Get R1 I32WrapI64 I64Load8U $0 I64Ne If I64Const $0 Return End Get R0 I64Const $1 I64Add Set R0 Get R1 I64Const $1 I64Add Set R1 Get R2 I64Const $1 I64Sub Set R2 Br loop End UNDEF