github.com/hikaru7719/go@v0.0.0-20181025140707-c8b2ac68906a/src/internal/bytealg/indexbyte_wasm.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  TEXT ·IndexByte(SB), NOSPLIT, $0-40
     9  	I64Load b_base+0(FP)
    10  	I32WrapI64
    11  	I32Load8U c+24(FP)
    12  	I64Load b_len+8(FP)
    13  	I32WrapI64
    14  	Call memchr<>(SB)
    15  	I64ExtendSI32
    16  	Set R0
    17  
    18  	Get SP
    19  	I64Const $-1
    20  	Get R0
    21  	I64Load b_base+0(FP)
    22  	I64Sub
    23  	Get R0
    24  	I64Eqz $0
    25  	Select
    26  	I64Store ret+32(FP)
    27  
    28  	RET
    29  
    30  TEXT ·IndexByteString(SB), NOSPLIT, $0-32
    31  	Get SP
    32  	I64Load s_base+0(FP)
    33  	I32WrapI64
    34  	I32Load8U c+16(FP)
    35  	I64Load s_len+8(FP)
    36  	I32WrapI64
    37  	Call memchr<>(SB)
    38  	I64ExtendSI32
    39  	Set R0
    40  
    41  	I64Const $-1
    42  	Get R0
    43  	I64Load s_base+0(FP)
    44  	I64Sub
    45  	Get R0
    46  	I64Eqz $0
    47  	Select
    48  	I64Store ret+24(FP)
    49  
    50  	RET
    51  
    52  TEXT bytes·IndexByte(SB), NOSPLIT, $0-40
    53  	FUNCDATA $0, ·IndexByte·args_stackmap(SB)
    54  	Get SP
    55  	I64Load b_base+0(FP)
    56  	I32WrapI64
    57  	I32Load8U c+24(FP)
    58  	I64Load b_len+8(FP)
    59  	I32WrapI64
    60  	Call memchr<>(SB)
    61  	I64ExtendSI32
    62  	Set R0
    63  
    64  	I64Const $-1
    65  	Get R0
    66  	I64Load b_base+0(FP)
    67  	I64Sub
    68  	Get R0
    69  	I64Eqz $0
    70  	Select
    71  	I64Store ret+32(FP)
    72  
    73  	RET
    74  
    75  TEXT strings·IndexByte(SB), NOSPLIT, $0-32
    76  	FUNCDATA $0, ·IndexByteString·args_stackmap(SB)
    77  	Get SP
    78  	I64Load s_base+0(FP)
    79  	I32WrapI64
    80  	I32Load8U c+16(FP)
    81  	I64Load s_len+8(FP)
    82  	I32WrapI64
    83  	Call memchr<>(SB)
    84  	I64ExtendSI32
    85  	Set R0
    86  
    87  	I64Const $-1
    88  	Get R0
    89  	I64Load s_base+0(FP)
    90  	I64Sub
    91  	Get R0
    92  	I64Eqz $0
    93  	Select
    94  	I64Store ret+24(FP)
    95  	RET
    96  
    97  // compiled with emscripten
    98  // params: s, c, len
    99  // ret: index
   100  TEXT memchr<>(SB), NOSPLIT, $0
   101  	Get R1
   102  	I32Const $255
   103  	I32And
   104  	Set R4
   105  	Block
   106  	Block
   107  	Get R2
   108  	I32Const $0
   109  	I32Ne
   110  	Tee R3
   111  	Get R0
   112  	I32Const $3
   113  	I32And
   114  	I32Const $0
   115  	I32Ne
   116  	I32And
   117  	If
   118  	Get R1
   119  	I32Const $255
   120  	I32And
   121  	Set R5
   122  	Loop
   123  	Get R0
   124  	I32Load8U $0
   125  	Get R5
   126  	I32Eq
   127  	BrIf $2
   128  	Get R2
   129  	I32Const $-1
   130  	I32Add
   131  	Tee R2
   132  	I32Const $0
   133  	I32Ne
   134  	Tee R3
   135  	Get R0
   136  	I32Const $1
   137  	I32Add
   138  	Tee R0
   139  	I32Const $3
   140  	I32And
   141  	I32Const $0
   142  	I32Ne
   143  	I32And
   144  	BrIf $0
   145  	End
   146  	End
   147  	Get R3
   148  	BrIf $0
   149  	I32Const $0
   150  	Set R1
   151  	Br $1
   152  	End
   153  	Get R0
   154  	I32Load8U $0
   155  	Get R1
   156  	I32Const $255
   157  	I32And
   158  	Tee R3
   159  	I32Eq
   160  	If
   161  	Get R2
   162  	Set R1
   163  	Else
   164  	Get R4
   165  	I32Const $16843009
   166  	I32Mul
   167  	Set R4
   168  	Block
   169  	Block
   170  	Get R2
   171  	I32Const $3
   172  	I32GtU
   173  	If
   174  	Get R2
   175  	Set R1
   176  	Loop
   177  	Get R0
   178  	I32Load $0
   179  	Get R4
   180  	I32Xor
   181  	Tee R2
   182  	I32Const $-2139062144
   183  	I32And
   184  	I32Const $-2139062144
   185  	I32Xor
   186  	Get R2
   187  	I32Const $-16843009
   188  	I32Add
   189  	I32And
   190  	I32Eqz
   191  	If
   192  	Get R0
   193  	I32Const $4
   194  	I32Add
   195  	Set R0
   196  	Get R1
   197  	I32Const $-4
   198  	I32Add
   199  	Tee R1
   200  	I32Const $3
   201  	I32GtU
   202  	BrIf $1
   203  	Br $3
   204  	End
   205  	End
   206  	Else
   207  	Get R2
   208  	Set R1
   209  	Br $1
   210  	End
   211  	Br $1
   212  	End
   213  	Get R1
   214  	I32Eqz
   215  	If
   216  	I32Const $0
   217  	Set R1
   218  	Br $3
   219  	End
   220  	End
   221  	Loop
   222  	Get R0
   223  	I32Load8U $0
   224  	Get R3
   225  	I32Eq
   226  	BrIf $2
   227  	Get R0
   228  	I32Const $1
   229  	I32Add
   230  	Set R0
   231  	Get R1
   232  	I32Const $-1
   233  	I32Add
   234  	Tee R1
   235  	BrIf $0
   236  	I32Const $0
   237  	Set R1
   238  	End
   239  	End
   240  	End
   241  	Get R0
   242  	I32Const $0
   243  	Get R1
   244  	Select
   245  	Return