github.com/dgraph-io/simdjson-go@v0.3.0/find_odd_backslash_sequences_amd64.s (about)

     1  //+build !noasm !appengine gc
     2  // AUTO-GENERATED BY C2GOASM -- DO NOT EDIT
     3  
     4  DATA LCDATA1<>+0x000(SB)/8, $0x5c5c5c5c5c5c5c5c
     5  DATA LCDATA1<>+0x008(SB)/8, $0x5c5c5c5c5c5c5c5c
     6  DATA LCDATA1<>+0x010(SB)/8, $0x5c5c5c5c5c5c5c5c
     7  DATA LCDATA1<>+0x018(SB)/8, $0x5c5c5c5c5c5c5c5c
     8  GLOBL LCDATA1<>(SB), 8, $32
     9  
    10  TEXT ·_find_odd_backslash_sequences(SB), $0-24
    11  
    12  	MOVQ p1+0(FP), DI
    13  	MOVQ p3+8(FP), DX
    14  
    15  	VMOVDQU (DI), Y8     // load low 32-bytes
    16  	VMOVDQU 0x20(DI), Y9 // load high 32-bytes
    17  
    18  	CALL ·__find_odd_backslash_sequences(SB)
    19  
    20  	VZEROUPPER
    21  	MOVQ AX, result+16(FP)
    22  	RET
    23  
    24  TEXT ·__find_odd_backslash_sequences(SB), $0
    25  	LEAQ      LCDATA1<>(SB), BP
    26  	VMOVDQA   (BP), Y0           // vmovdqa    ymm0, yword 0[rbp] /* [rip + LCPI0_0] */
    27  	VPCMPEQB  Y8/*(DI)*/, Y0, Y1 // vpcmpeqb    ymm1, ymm0, yword [rdi]
    28  	VPMOVMSKB Y1, CX             // vpmovmskb    ecx, ymm1
    29  	VPCMPEQB  Y9/*(SI)*/, Y0, Y0 // vpcmpeqb    ymm0, ymm0, yword [rsi]
    30  	VPMOVMSKB Y0, AX             // vpmovmskb    eax, ymm0
    31  	SHLQ      $32, AX            // shl    rax, 32
    32  	ORQ       CX, AX             // or    rax, rcx
    33  
    34  #define FIND_ODD_BACKSLASH_SEQUENCES \
    35  	LEAQ  (AX)(AX*1), CX           \ // lea    rcx, [rax + rax]
    36  	NOTQ  CX                       \ // not    rcx
    37  	ANDQ  AX, CX                   \ // and    rcx, rax
    38  	WORD  $0x8b4c; BYTE $0x0a      \ // mov    r9, qword [rdx]
    39  	MOVQ  $0x5555555555555555, R8  \ // mov    r8, 6148914691236517205
    40  	MOVQ  R9, SI                   \ // mov    rsi, r9
    41  	XORQ  R8, SI                   \ // xor    rsi, r8
    42  	ANDQ  CX, SI                   \ // and    rsi, rcx
    43  	MOVQ  $0xaaaaaaaaaaaaaaaa, R10 \ // mov    r10, -6148914691236517206
    44  	MOVQ  R9, DI                   \ // mov    rdi, r9
    45  	XORQ  R10, DI                  \ // xor    rdi, r10
    46  	ANDQ  CX, DI                   \ // and    rdi, rcx
    47  	ADDQ  AX, SI                   \ // add    rsi, rax
    48  	XORL  CX, CX                   \ // xor    ecx, ecx
    49  	ADDQ  AX, DI                   \ // add    rdi, rax
    50  	SETCS CX                       \ // setb    cl
    51  	ORQ   R9, DI                   \ // or    rdi, r9
    52  	MOVQ  CX, (DX)                 \ // mov    qword [rdx], rcx
    53  	NOTQ  AX                       \ // not    rax
    54  	ANDQ  AX, R10                  \ // and    r10, rax
    55  	ANDQ  SI, R10                  \ // and    r10, rsi
    56  	ANDQ  R8, AX                   \ // and    rax, r8
    57  	ANDQ  DI, AX                   \ // and    rax, rdi
    58  	ORQ   R10, AX                  // or    rax, r10
    59  
    60  	FIND_ODD_BACKSLASH_SEQUENCES
    61  	RET
    62  
    63  #define OBSS_CONST Z16
    64  
    65  TEXT ·_find_odd_backslash_sequences_avx512(SB), $0-24
    66  
    67  	MOVQ p1+0(FP), DI
    68  	MOVQ p3+8(FP), DX
    69  
    70  	VMOVDQU32 (DI), Z8
    71  
    72  	CALL ·__init_odd_backslash_sequences_avx512(SB)
    73  	CALL ·__find_odd_backslash_sequences_avx512(SB)
    74  
    75  	VZEROUPPER
    76  	MOVQ AX, result+16(FP)
    77  	RET
    78  
    79  TEXT ·__init_odd_backslash_sequences_avx512(SB), $0
    80  	MOVQ         $0x5c, AX
    81  	VPBROADCASTB AX, OBSS_CONST
    82  	RET
    83  
    84  TEXT ·__find_odd_backslash_sequences_avx512(SB), $0
    85  	VPCMPEQB Z8, OBSS_CONST, K1
    86  	KMOVQ    K1, AX
    87  	FIND_ODD_BACKSLASH_SEQUENCES
    88  	RET