github.com/sandwichdev/go-internals@v0.0.0-20210605002614-12311ac6b2c5/bytealg/equal_s390x.s (about) 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