...

Text file src/pkg/internal/bytealg/equal_s390x.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(a, b unsafe.Pointer, size uintptr) bool
     9	TEXT runtime·memequal(SB),NOSPLIT|NOFRAME,$0-25
    10		MOVD	a+0(FP), R3
    11		MOVD	b+8(FP), R5
    12		MOVD	size+16(FP), R6
    13		LA	ret+24(FP), R7
    14		BR	memeqbody<>(SB)
    15	
    16	// memequal_varlen(a, b unsafe.Pointer) bool
    17	TEXT runtime·memequal_varlen(SB),NOSPLIT|NOFRAME,$0-17
    18		MOVD	a+0(FP), R3
    19		MOVD	b+8(FP), R5
    20		MOVD	8(R12), R6    // compiler stores size at offset 8 in the closure
    21		LA	ret+16(FP), R7
    22		BR	memeqbody<>(SB)
    23	
    24	// input:
    25	//   R3 = a
    26	//   R5 = b
    27	//   R6 = len
    28	//   R7 = address of output byte (stores 0 or 1 here)
    29	//   a and b have the same length
    30	TEXT memeqbody<>(SB),NOSPLIT|NOFRAME,$0-0
    31		CMPBEQ	R3, R5, equal
    32	loop:
    33		CMPBEQ	R6, $0, equal
    34		CMPBLT	R6, $32, tiny
    35		CMP	R6, $256
    36		BLT	tail
    37		CLC	$256, 0(R3), 0(R5)
    38		BNE	notequal
    39		SUB	$256, R6
    40		LA	256(R3), R3
    41		LA	256(R5), R5
    42		BR	loop
    43	tail:
    44		SUB	$1, R6, R8
    45		EXRL	$memeqbodyclc<>(SB), R8
    46		BEQ	equal
    47	notequal:
    48		MOVB	$0, 0(R7)
    49		RET
    50	equal:
    51		MOVB	$1, 0(R7)
    52		RET
    53	tiny:
    54		MOVD	$0, R2
    55		CMPBLT	R6, $16, lt16
    56		MOVD	0(R3), R8
    57		MOVD	0(R5), R9
    58		CMPBNE	R8, R9, notequal
    59		MOVD	8(R3), R8
    60		MOVD	8(R5), R9
    61		CMPBNE	R8, R9, notequal
    62		LA	16(R2), R2
    63		SUB	$16, R6
    64	lt16:
    65		CMPBLT	R6, $8, lt8
    66		MOVD	0(R3)(R2*1), R8
    67		MOVD	0(R5)(R2*1), R9
    68		CMPBNE	R8, R9, notequal
    69		LA	8(R2), R2
    70		SUB	$8, R6
    71	lt8:
    72		CMPBLT	R6, $4, lt4
    73		MOVWZ	0(R3)(R2*1), R8
    74		MOVWZ	0(R5)(R2*1), R9
    75		CMPBNE	R8, R9, notequal
    76		LA	4(R2), R2
    77		SUB	$4, R6
    78	lt4:
    79	#define CHECK(n) \
    80		CMPBEQ	R6, $n, equal \
    81		MOVB	n(R3)(R2*1), R8 \
    82		MOVB	n(R5)(R2*1), R9 \
    83		CMPBNE	R8, R9, notequal
    84		CHECK(0)
    85		CHECK(1)
    86		CHECK(2)
    87		CHECK(3)
    88		BR	equal
    89	
    90	TEXT memeqbodyclc<>(SB),NOSPLIT|NOFRAME,$0-0
    91		CLC	$1, 0(R3), 0(R5)
    92		RET

View as plain text