...

Text file src/pkg/internal/bytealg/equal_wasm.s

     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	#include "go_asm.h"
     6	#include "textflag.h"
     7	
     8	// memequal(p, q unsafe.Pointer, size uintptr) bool
     9	TEXT runtime·memequal(SB), NOSPLIT, $0-25
    10		Get SP
    11		I64Load a+0(FP)
    12		I64Load b+8(FP)
    13		I64Load size+16(FP)
    14		Call memeqbody<>(SB)
    15		I64Store8 ret+24(FP)
    16		RET
    17	
    18	// memequal_varlen(a, b unsafe.Pointer) bool
    19	TEXT runtime·memequal_varlen(SB), NOSPLIT, $0-17
    20		Get SP
    21		I64Load a+0(FP)
    22		I64Load b+8(FP)
    23		I64Load 8(CTXT) // compiler stores size at offset 8 in the closure
    24		Call memeqbody<>(SB)
    25		I64Store8 ret+16(FP)
    26		RET
    27	
    28	// params: a, b, len
    29	// ret: 0/1
    30	TEXT memeqbody<>(SB), NOSPLIT, $0-0
    31		Get R0
    32		Get R1
    33		I64Eq
    34		If
    35			I64Const $1
    36			Return
    37		End
    38	
    39	loop:
    40		Loop
    41			Get R2
    42			I64Eqz
    43			If
    44				I64Const $1
    45				Return
    46			End
    47	
    48			Get R0
    49			I32WrapI64
    50			I64Load8U $0
    51			Get R1
    52			I32WrapI64
    53			I64Load8U $0
    54			I64Ne
    55			If
    56				I64Const $0
    57				Return
    58			End
    59	
    60			Get R0
    61			I64Const $1
    62			I64Add
    63			Set R0
    64	
    65			Get R1
    66			I64Const $1
    67			I64Add
    68			Set R1
    69	
    70			Get R2
    71			I64Const $1
    72			I64Sub
    73			Set R2
    74	
    75			Br loop
    76		End
    77		UNDEF

View as plain text