...

Text file src/internal/bytealg/equal_s390x.s

Documentation: internal/bytealg

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

View as plain text