github.com/dgraph-io/simdjson-go@v0.3.0/parse_string_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  DATA LCDATA1<>+0x020(SB)/8, $0x2222222222222222
     9  DATA LCDATA1<>+0x028(SB)/8, $0x2222222222222222
    10  DATA LCDATA1<>+0x030(SB)/8, $0x2222222222222222
    11  DATA LCDATA1<>+0x038(SB)/8, $0x2222222222222222
    12  DATA LCDATA1<>+0x070(SB)/8, $0x0706050403020100
    13  DATA LCDATA1<>+0x078(SB)/8, $0xffffffffffff0908
    14  DATA LCDATA1<>+0x080(SB)/8, $0xff0f0e0d0c0b0aff
    15  DATA LCDATA1<>+0x088(SB)/8, $0xffffffffffffffff
    16  DATA LCDATA1<>+0x090(SB)/8, $0xffffffffffffffff
    17  DATA LCDATA1<>+0x098(SB)/8, $0xffffffffffffffff
    18  DATA LCDATA1<>+0x0a0(SB)/8, $0xff0f0e0d0c0b0aff
    19  DATA LCDATA1<>+0x0a8(SB)/8, $0xffffffffffffffff
    20  DATA LCDATA1<>+0x0b0(SB)/8, $0xffffffffffffffff
    21  DATA LCDATA1<>+0x0b8(SB)/8, $0xffffffffffffffff
    22  DATA LCDATA1<>+0x0c0(SB)/8, $0xffffffffffffffff
    23  DATA LCDATA1<>+0x0c8(SB)/8, $0xffffffffffffffff
    24  DATA LCDATA1<>+0x0d0(SB)/8, $0xffffffffffffffff
    25  DATA LCDATA1<>+0x0d8(SB)/8, $0xffffffffffffffff
    26  DATA LCDATA1<>+0x0e0(SB)/8, $0xffffffffffffffff
    27  DATA LCDATA1<>+0x0e8(SB)/8, $0xffffffffffffffff
    28  DATA LCDATA1<>+0x0f0(SB)/8, $0xffffffffffffffff
    29  DATA LCDATA1<>+0x0f8(SB)/8, $0xffffffffffffffff
    30  DATA LCDATA1<>+0x100(SB)/8, $0xffffffffffffffff
    31  DATA LCDATA1<>+0x108(SB)/8, $0xffffffffffffffff
    32  DATA LCDATA1<>+0x110(SB)/8, $0xffffffffffffffff
    33  DATA LCDATA1<>+0x118(SB)/8, $0xffffffffffffffff
    34  DATA LCDATA1<>+0x120(SB)/8, $0xffffffffffffffff
    35  DATA LCDATA1<>+0x128(SB)/8, $0xffffffffffffffff
    36  DATA LCDATA1<>+0x130(SB)/8, $0xffffffffffffffff
    37  DATA LCDATA1<>+0x138(SB)/8, $0xffffffffffffffff
    38  DATA LCDATA1<>+0x140(SB)/8, $0x0000000000000000
    39  DATA LCDATA1<>+0x148(SB)/8, $0x0000000000000000
    40  DATA LCDATA1<>+0x150(SB)/8, $0x0000000000000000
    41  DATA LCDATA1<>+0x158(SB)/8, $0x0000000000000000
    42  DATA LCDATA1<>+0x160(SB)/8, $0x0000000000220000
    43  DATA LCDATA1<>+0x168(SB)/8, $0x2f00000000000000
    44  DATA LCDATA1<>+0x170(SB)/8, $0x0000000000000000
    45  DATA LCDATA1<>+0x178(SB)/8, $0x0000000000000000
    46  DATA LCDATA1<>+0x180(SB)/8, $0x0000000000000000
    47  DATA LCDATA1<>+0x188(SB)/8, $0x0000000000000000
    48  DATA LCDATA1<>+0x190(SB)/8, $0x0000000000000000
    49  DATA LCDATA1<>+0x198(SB)/8, $0x0000005c00000000
    50  DATA LCDATA1<>+0x1a0(SB)/8, $0x000c000000080000
    51  DATA LCDATA1<>+0x1a8(SB)/8, $0x000a000000000000
    52  DATA LCDATA1<>+0x1b0(SB)/8, $0x00000009000d0000
    53  DATA LCDATA1<>+0x1b8(SB)/8, $0x0000000000000000
    54  DATA LCDATA1<>+0x1c0(SB)/8, $0x0000000000000000
    55  DATA LCDATA1<>+0x1c8(SB)/8, $0x0000000000000000
    56  DATA LCDATA1<>+0x1d0(SB)/8, $0x0000000000000000
    57  DATA LCDATA1<>+0x1d8(SB)/8, $0x0000000000000000
    58  DATA LCDATA1<>+0x1e0(SB)/8, $0x0000000000000000
    59  DATA LCDATA1<>+0x1e8(SB)/8, $0x0000000000000000
    60  DATA LCDATA1<>+0x1f0(SB)/8, $0x0000000000000000
    61  DATA LCDATA1<>+0x1f8(SB)/8, $0x0000000000000000
    62  DATA LCDATA1<>+0x200(SB)/8, $0x0000000000000000
    63  DATA LCDATA1<>+0x208(SB)/8, $0x0000000000000000
    64  DATA LCDATA1<>+0x210(SB)/8, $0x0000000000000000
    65  DATA LCDATA1<>+0x218(SB)/8, $0x0000000000000000
    66  DATA LCDATA1<>+0x220(SB)/8, $0x0000000000000000
    67  DATA LCDATA1<>+0x228(SB)/8, $0x0000000000000000
    68  DATA LCDATA1<>+0x230(SB)/8, $0x0000000000000000
    69  DATA LCDATA1<>+0x238(SB)/8, $0x0000000000000000
    70  GLOBL LCDATA1<>(SB), 8, $576
    71  
    72  TEXT ·_parse_string_validate_only(SB), $0-40
    73  
    74  	MOVQ src+0(FP), DI
    75  	MOVQ maxStringSize+8(FP), SI
    76  	MOVQ str_length+16(FP), DX
    77  	MOVQ dst_length+24(FP), CX
    78  	LEAQ LCDATA1<>(SB), BP
    79  
    80  	WORD $0x8b4c; BYTE $0x1e                   // mov    r11, qword [rsi]
    81  	WORD $0x854d; BYTE $0xdb                   // test    r11, r11
    82  	JE   LBB0_30
    83  	WORD $0xf631                               // xor    esi, esi
    84  	LONG $0x456ffdc5; BYTE $0x00               // vmovdqa    ymm0, yword 0[rbp] /* [rip + LCPI0_0] */
    85  	LONG $0x4d6ffdc5; BYTE $0x20               // vmovdqa    ymm1, yword 32[rbp] /* [rip + LCPI0_1] */
    86  	LONG $0x404d8d4c                           // lea    r9, 64[rbp] /* [rip + __ZL10digittoval] */
    87  	LONG $0x40958d4c; WORD $0x0001; BYTE $0x00 // lea    r10, 320[rbp] /* [rip + __ZL10escape_map] */
    88  	WORD $0x8949; BYTE $0xfd                   // mov    r13, rdi
    89  	WORD $0x3145; BYTE $0xf6                   // xor    r14d, r14d
    90  	WORD $0x8948; BYTE $0xf8                   // mov    rax, rdi
    91  
    92  LBB0_2:
    93  	LONG $0x106ffec5               // vmovdqu    ymm2, yword [rax]
    94  	LONG $0xd874edc5               // vpcmpeqb    ymm3, ymm2, ymm0
    95  	LONG $0xdbd7fdc5               // vpmovmskb    ebx, ymm3
    96  	LONG $0xd174edc5               // vpcmpeqb    ymm2, ymm2, ymm1
    97  	LONG $0xe2d77dc5               // vpmovmskb    r12d, ymm2
    98  	WORD $0x438d; BYTE $0xff       // lea    eax, [rbx - 1]
    99  	WORD $0x8544; BYTE $0xe0       // test    eax, r12d
   100  	JNE  LBB0_3
   101  	LONG $0x24448d41; BYTE $0xff   // lea    eax, [r12 - 1]
   102  	WORD $0xd885                   // test    eax, ebx
   103  	JE   LBB0_28
   104  	WORD $0xd889                   // mov    eax, ebx
   105  	LONG $0xbc0f4cf3; BYTE $0xf8   // tzcnt    r15, rax
   106  	LONG $0x74b60f43; WORD $0x013d // movzx    esi, byte [r13 + r15 + 1]
   107  	LONG $0x75fe8348               // cmp    rsi, 117
   108  	JNE  LBB0_26
   109  	WORD $0x8545; BYTE $0xe4       // test    r12d, r12d
   110  	JE   LBB0_8
   111  	WORD $0x8944; BYTE $0xe0       // mov    eax, r12d
   112  	LONG $0xbc0f48f3; BYTE $0xf0   // tzcnt    rsi, rax
   113  	WORD $0x2944; BYTE $0xfe       // sub    esi, r15d
   114  	WORD $0xfe83; BYTE $0x06       // cmp    esi, 6
   115  	JAE  LBB0_11
   116  	JMP  LBB0_30
   117  
   118  LBB0_28:
   119  	LONG $0x20c58349         // add    r13, 32
   120  	LONG $0x20c68349         // add    r14, 32
   121  	WORD $0x894c; BYTE $0xe8 // mov    rax, r13
   122  	JMP  LBB0_29
   123  
   124  LBB0_26:
   125  	LONG $0x163c8042; BYTE $0x00 // cmp    byte [rsi + r10], 0
   126  	JE   LBB0_30
   127  	LONG $0x3d448d4b; BYTE $0x02 // lea    rax, [r13 + r15 + 2]
   128  	WORD $0xff49; BYTE $0xc7     // inc    r15
   129  	WORD $0x014d; BYTE $0xfe     // add    r14, r15
   130  	JMP  LBB0_29
   131  
   132  LBB0_8:
   133  	LONG $0x000020be; BYTE $0x00               // mov    esi, 32
   134  	LONG $0x15ff8341                           // cmp    r15d, 21
   135  	JB   LBB0_10
   136  	LONG $0xec478d41                           // lea    eax, [r15 - 20]
   137  	LONG $0x7475c1c4; WORD $0x0554; BYTE $0x00 // vpcmpeqb    ymm2, ymm1, yword [r13 + rax]
   138  	LONG $0xc2d7fdc5                           // vpmovmskb    eax, ymm2
   139  	LONG $0xbc0f48f3; BYTE $0xf0               // tzcnt    rsi, rax
   140  	WORD $0xc085                               // test    eax, eax
   141  	LONG $0x000020b8; BYTE $0x00               // mov    eax, 32
   142  	WORD $0x440f; BYTE $0xf0                   // cmove    esi, eax
   143  	LONG $0x3e748d42; BYTE $0xec               // lea    esi, [rsi + r15 - 20]
   144  
   145  LBB0_10:
   146  	WORD $0x2944; BYTE $0xfe // sub    esi, r15d
   147  	WORD $0xfe83; BYTE $0x06 // cmp    esi, 6
   148  	JB   LBB0_30
   149  
   150  LBB0_11:
   151  	WORD $0x014d; BYTE $0xfd                   // add    r13, r15
   152  	LONG $0x45b60f41; BYTE $0x02               // movzx    eax, byte [r13 + 2]
   153  	LONG $0x04be0f46; BYTE $0x08               // movsx    r8d, byte [rax + r9]
   154  	LONG $0x5db60f41; BYTE $0x03               // movzx    ebx, byte [r13 + 3]
   155  	LONG $0x1cbe0f42; BYTE $0x0b               // movsx    ebx, byte [rbx + r9]
   156  	LONG $0x45b60f41; BYTE $0x04               // movzx    eax, byte [r13 + 4]
   157  	LONG $0x24be0f46; BYTE $0x08               // movsx    r12d, byte [rax + r9]
   158  	LONG $0x45b60f41; BYTE $0x05               // movzx    eax, byte [r13 + 5]
   159  	LONG $0x04be0f42; BYTE $0x08               // movsx    eax, byte [rax + r9]
   160  	LONG $0x0ce0c141                           // shl    r8d, 12
   161  	WORD $0xe3c1; BYTE $0x08                   // shl    ebx, 8
   162  	WORD $0x0944; BYTE $0xc3                   // or    ebx, r8d
   163  	LONG $0x04e4c141                           // shl    r12d, 4
   164  	WORD $0x0941; BYTE $0xc4                   // or    r12d, eax
   165  	WORD $0x0941; BYTE $0xdc                   // or    r12d, ebx
   166  	LONG $0x06458d49                           // lea    rax, [r13 + 6]
   167  	WORD $0x8944; BYTE $0xe3                   // mov    ebx, r12d
   168  	LONG $0xfc00e381; WORD $0xffff             // and    ebx, -1024
   169  	LONG $0xd800fb81; WORD $0x0000             // cmp    ebx, 55296
   170  	JE   LBB0_12
   171  	LONG $0x80fc8141; WORD $0x0000; BYTE $0x00 // cmp    r12d, 128
   172  	JAE  LBB0_19
   173  
   174  LBB0_18:
   175  	LONG $0x000001be; BYTE $0x00 // mov    esi, 1
   176  	JMP  LBB0_25
   177  
   178  LBB0_12:
   179  	WORD $0xfe83; BYTE $0x0c                   // cmp    esi, 12
   180  	JB   LBB0_30
   181  	WORD $0x3880; BYTE $0x5c                   // cmp    byte [rax], 92
   182  	JNE  LBB0_30
   183  	LONG $0x077d8041; BYTE $0x75               // cmp    byte [r13 + 7], 117
   184  	JNE  LBB0_30
   185  	LONG $0x45b60f41; BYTE $0x08               // movzx    eax, byte [r13 + 8]
   186  	LONG $0x04be0f46; BYTE $0x08               // movsx    r8d, byte [rax + r9]
   187  	LONG $0x75b60f41; BYTE $0x09               // movzx    esi, byte [r13 + 9]
   188  	LONG $0x1cbe0f42; BYTE $0x0e               // movsx    ebx, byte [rsi + r9]
   189  	LONG $0x75b60f41; BYTE $0x0a               // movzx    esi, byte [r13 + 10]
   190  	LONG $0x34be0f42; BYTE $0x0e               // movsx    esi, byte [rsi + r9]
   191  	LONG $0x45b60f41; BYTE $0x0b               // movzx    eax, byte [r13 + 11]
   192  	LONG $0x04be0f42; BYTE $0x08               // movsx    eax, byte [rax + r9]
   193  	LONG $0x0ce0c141                           // shl    r8d, 12
   194  	WORD $0xe3c1; BYTE $0x08                   // shl    ebx, 8
   195  	WORD $0x0944; BYTE $0xc3                   // or    ebx, r8d
   196  	WORD $0xe6c1; BYTE $0x04                   // shl    esi, 4
   197  	WORD $0xc609                               // or    esi, eax
   198  	WORD $0xde09                               // or    esi, ebx
   199  	WORD $0xf089                               // mov    eax, esi
   200  	WORD $0x0944; BYTE $0xe0                   // or    eax, r12d
   201  	LONG $0x00ffff3d; BYTE $0x00               // cmp    eax, 65535
   202  	JA   LBB0_30
   203  	LONG $0x0ae4c141                           // shl    r12d, 10
   204  	LONG $0x00c48141; WORD $0xa000; BYTE $0xfc // add    r12d, -56623104
   205  	LONG $0x2400c681; WORD $0xffff             // add    esi, -56320
   206  	WORD $0x0944; BYTE $0xe6                   // or    esi, r12d
   207  	LONG $0x0000c681; WORD $0x0001             // add    esi, 65536
   208  	LONG $0x0cc58349                           // add    r13, 12
   209  	WORD $0x894c; BYTE $0xe8                   // mov    rax, r13
   210  	WORD $0x8941; BYTE $0xf4                   // mov    r12d, esi
   211  	LONG $0x80fc8141; WORD $0x0000; BYTE $0x00 // cmp    r12d, 128
   212  	JB   LBB0_18
   213  
   214  LBB0_19:
   215  	LONG $0x00fc8141; WORD $0x0008; BYTE $0x00 // cmp    r12d, 2048
   216  	JAE  LBB0_21
   217  	LONG $0x000002be; BYTE $0x00               // mov    esi, 2
   218  	JMP  LBB0_25
   219  
   220  LBB0_21:
   221  	LONG $0x00fc8141; WORD $0x0100; BYTE $0x00 // cmp    r12d, 65536
   222  	JAE  LBB0_23
   223  	LONG $0x000003be; BYTE $0x00               // mov    esi, 3
   224  	JMP  LBB0_25
   225  
   226  LBB0_23:
   227  	LONG $0xfffc8141; WORD $0x10ff; BYTE $0x00 // cmp    r12d, 1114111
   228  	JA   LBB0_30
   229  	LONG $0x000004be; BYTE $0x00               // mov    esi, 4
   230  
   231  LBB0_25:
   232  	WORD $0x014d; BYTE $0xfe // add    r14, r15
   233  	WORD $0x0149; BYTE $0xf6 // add    r14, rsi
   234  
   235  LBB0_29:
   236  	WORD $0x8948; BYTE $0xc6 // mov    rsi, rax
   237  	WORD $0x2948; BYTE $0xfe // sub    rsi, rdi
   238  	WORD $0x8949; BYTE $0xc5 // mov    r13, rax
   239  	WORD $0x394c; BYTE $0xde // cmp    rsi, r11
   240  	JB   LBB0_2
   241  
   242  LBB0_30:
   243  	WORD $0xc031 // xor    eax, eax
   244  	JMP  LBB0_31
   245  
   246  LBB0_3:
   247  	WORD $0x8944; BYTE $0xe0     // mov    eax, r12d
   248  	LONG $0xbc0f48f3; BYTE $0xc0 // tzcnt    rax, rax
   249  	WORD $0x0148; BYTE $0xc6     // add    rsi, rax
   250  	WORD $0x8948; BYTE $0x32     // mov    qword [rdx], rsi
   251  	WORD $0x0149; BYTE $0xc6     // add    r14, rax
   252  	WORD $0x894c; BYTE $0x31     // mov    qword [rcx], r14
   253  	WORD $0x01b0                 // mov    al, 1
   254  
   255  LBB0_31:
   256  	VZEROUPPER
   257  	MOVQ AX, result+32(FP)
   258  	RET
   259  
   260  TEXT ·_parse_string(SB), $0-32
   261  
   262  	MOVQ src+0(FP), DI
   263  	MOVQ dst+8(FP), SI
   264  	MOVQ pcurrent_string_buf_loc+16(FP), DX
   265  	LEAQ LCDATA1<>(SB), BP
   266  
   267  	LONG $0x076ffec5             // vmovdqu    ymm0, yword [rdi]
   268  	LONG $0x067ffec5             // vmovdqu    yword [rsi], ymm0
   269  	LONG $0x4d74fdc5; BYTE $0x00 // vpcmpeqb    ymm1, ymm0, yword 0[rbp] /* [rip + LCPI0_0] */
   270  	LONG $0xc9d7fdc5             // vpmovmskb    ecx, ymm1
   271  	LONG $0x4574fdc5; BYTE $0x20 // vpcmpeqb    ymm0, ymm0, yword 32[rbp] /* [rip + LCPI0_1] */
   272  	LONG $0xf0d77dc5             // vpmovmskb    r14d, ymm0
   273  	WORD $0x418d; BYTE $0xff     // lea    eax, [rcx - 1]
   274  	WORD $0x8544; BYTE $0xf0     // test    eax, r14d
   275  	JE   LBB0_3
   276  
   277  LBB0_1:
   278  	WORD $0x8944; BYTE $0xf0     // mov    eax, r14d
   279  	LONG $0xbc0f48f3; BYTE $0xc0 // tzcnt    rax, rax
   280  	WORD $0x0148; BYTE $0xf0     // add    rax, rsi
   281  	WORD $0x8948; BYTE $0x02     // mov    qword [rdx], rax
   282  	LONG $0x000001b8; BYTE $0x00 // mov    eax, 1
   283  
   284  LBB0_2:
   285  	VZEROUPPER
   286  	MOVQ AX, res+24(FP)
   287  	RET
   288  
   289  LBB0_3:
   290  	LONG $0x456ffdc5; BYTE $0x00               // vmovdqa    ymm0, yword 0[rbp] /* [rip + LCPI0_0] */
   291  	LONG $0x4d6ffdc5; BYTE $0x20               // vmovdqa    ymm1, yword 32[rbp] /* [rip + LCPI0_1] */
   292  	WORD $0xc031                               // xor    eax, eax
   293  	LONG $0x40658d4c                           // lea    r12, 64[rbp] /* [rip + __ZL10digittoval] */
   294  	LONG $0x0001b941; WORD $0x0000             // mov    r9d, 1
   295  	LONG $0x0002ba41; WORD $0x0000             // mov    r10d, 2
   296  	LONG $0x40bd8d4c; WORD $0x0001; BYTE $0x00 // lea    r15, 320[rbp] /* [rip + __ZL10escape_map] */
   297  	JMP  LBB0_4
   298  
   299  LBB0_24:
   300  	LONG $0xfff88141; WORD $0x00ff; BYTE $0x00 // cmp    r8d, 65535
   301  	JA   LBB0_26
   302  	WORD $0x8944; BYTE $0xc1                   // mov    ecx, r8d
   303  	WORD $0xe9c1; BYTE $0x0c                   // shr    ecx, 12
   304  	LONG $0x00e0c181; WORD $0x0000             // add    ecx, 224
   305  	WORD $0x0e88                               // mov    byte [rsi], cl
   306  	WORD $0x8944; BYTE $0xc1                   // mov    ecx, r8d
   307  	WORD $0xe9c1; BYTE $0x06                   // shr    ecx, 6
   308  	WORD $0xe180; BYTE $0x3f                   // and    cl, 63
   309  	WORD $0xc980; BYTE $0x80                   // or    cl, -128
   310  	WORD $0x4e88; BYTE $0x01                   // mov    byte [rsi + 1], cl
   311  	LONG $0x3fe08041                           // and    r8b, 63
   312  	LONG $0x80c88041                           // or    r8b, -128
   313  	LONG $0x02468844                           // mov    byte [rsi + 2], r8b
   314  	LONG $0x000003b9; BYTE $0x00               // mov    ecx, 3
   315  	JMP  LBB0_28
   316  
   317  LBB0_26:
   318  	LONG $0xfff88141; WORD $0x10ff; BYTE $0x00 // cmp    r8d, 1114111
   319  	JA   LBB0_2
   320  	WORD $0x8944; BYTE $0xc1                   // mov    ecx, r8d
   321  	WORD $0xe9c1; BYTE $0x12                   // shr    ecx, 18
   322  	LONG $0x00f0c181; WORD $0x0000             // add    ecx, 240
   323  	WORD $0x0e88                               // mov    byte [rsi], cl
   324  	WORD $0x8944; BYTE $0xc1                   // mov    ecx, r8d
   325  	WORD $0xe9c1; BYTE $0x0c                   // shr    ecx, 12
   326  	WORD $0xe180; BYTE $0x3f                   // and    cl, 63
   327  	WORD $0xc980; BYTE $0x80                   // or    cl, -128
   328  	WORD $0x4e88; BYTE $0x01                   // mov    byte [rsi + 1], cl
   329  	WORD $0x8944; BYTE $0xc1                   // mov    ecx, r8d
   330  	WORD $0xe9c1; BYTE $0x06                   // shr    ecx, 6
   331  	WORD $0xe180; BYTE $0x3f                   // and    cl, 63
   332  	WORD $0xc980; BYTE $0x80                   // or    cl, -128
   333  	WORD $0x4e88; BYTE $0x02                   // mov    byte [rsi + 2], cl
   334  	LONG $0x3fe08041                           // and    r8b, 63
   335  	LONG $0x80c88041                           // or    r8b, -128
   336  	LONG $0x03468844                           // mov    byte [rsi + 3], r8b
   337  	LONG $0x000004b9; BYTE $0x00               // mov    ecx, 4
   338  	JMP  LBB0_28
   339  
   340  LBB0_4:
   341  	LONG $0xff5e8d41               // lea    ebx, [r14 - 1]
   342  	WORD $0xcb85                   // test    ebx, ecx
   343  	JE   LBB0_8
   344  	WORD $0xc989                   // mov    ecx, ecx
   345  	LONG $0xbc0f4cf3; BYTE $0xd9   // tzcnt    r11, rcx
   346  	LONG $0x4cb60f42; WORD $0x011f // movzx    ecx, byte [rdi + r11 + 1]
   347  	LONG $0x75f98348               // cmp    rcx, 117
   348  	JNE  LBB0_9
   349  	WORD $0x8545; BYTE $0xf6       // test    r14d, r14d
   350  	JE   LBB0_11
   351  	WORD $0x8944; BYTE $0xf1       // mov    ecx, r14d
   352  	LONG $0xbc0f4cf3; BYTE $0xf1   // tzcnt    r14, rcx
   353  	WORD $0x2945; BYTE $0xde       // sub    r14d, r11d
   354  	LONG $0x06fe8341               // cmp    r14d, 6
   355  	JAE  LBB0_14
   356  	JMP  LBB0_2
   357  
   358  LBB0_8:
   359  	LONG $0x20c78348         // add    rdi, 32
   360  	LONG $0x20c68348         // add    rsi, 32
   361  	WORD $0x8949; BYTE $0xfd // mov    r13, rdi
   362  	JMP  LBB0_29
   363  
   364  LBB0_9:
   365  	LONG $0x0cb60f42; BYTE $0x39 // movzx    ecx, byte [rcx + r15]
   366  	WORD $0xc984                 // test    cl, cl
   367  	JE   LBB0_2
   368  	LONG $0x1e0c8842             // mov    byte [rsi + r11], cl
   369  	LONG $0x1f6c8d4e; BYTE $0x02 // lea    r13, [rdi + r11 + 2]
   370  	LONG $0x014b8d49             // lea    rcx, [r11 + 1]
   371  
   372  LBB0_28:
   373  	WORD $0x0148; BYTE $0xce // add    rsi, rcx
   374  	JMP  LBB0_29
   375  
   376  LBB0_11:
   377  	LONG $0x0020be41; WORD $0x0000 // mov    r14d, 32
   378  	LONG $0x15fb8341               // cmp    r11d, 21
   379  	JB   LBB0_13
   380  	LONG $0xec4b8d41               // lea    ecx, [r11 - 20]
   381  	LONG $0x1474f5c5; BYTE $0x0f   // vpcmpeqb    ymm2, ymm1, yword [rdi + rcx]
   382  	LONG $0xcad7fdc5               // vpmovmskb    ecx, ymm2
   383  	LONG $0xbc0f48f3; BYTE $0xd9   // tzcnt    rbx, rcx
   384  	WORD $0xc985                   // test    ecx, ecx
   385  	LONG $0x000020b9; BYTE $0x00   // mov    ecx, 32
   386  	WORD $0x440f; BYTE $0xd9       // cmove    ebx, ecx
   387  	LONG $0x1b748d46; BYTE $0xec   // lea    r14d, [rbx + r11 - 20]
   388  
   389  LBB0_13:
   390  	WORD $0x2945; BYTE $0xde // sub    r14d, r11d
   391  	LONG $0x06fe8341         // cmp    r14d, 6
   392  	JB   LBB0_2
   393  
   394  LBB0_14:
   395  	WORD $0x014c; BYTE $0xdf                   // add    rdi, r11
   396  	LONG $0x024fb60f                           // movzx    ecx, byte [rdi + 2]
   397  	LONG $0x2cbe0f46; BYTE $0x21               // movsx    r13d, byte [rcx + r12]
   398  	LONG $0x035fb60f                           // movzx    ebx, byte [rdi + 3]
   399  	LONG $0x1cbe0f42; BYTE $0x23               // movsx    ebx, byte [rbx + r12]
   400  	LONG $0x044fb60f                           // movzx    ecx, byte [rdi + 4]
   401  	LONG $0x04be0f46; BYTE $0x21               // movsx    r8d, byte [rcx + r12]
   402  	LONG $0x054fb60f                           // movzx    ecx, byte [rdi + 5]
   403  	LONG $0x0cbe0f42; BYTE $0x21               // movsx    ecx, byte [rcx + r12]
   404  	LONG $0x0ce5c141                           // shl    r13d, 12
   405  	WORD $0xe3c1; BYTE $0x08                   // shl    ebx, 8
   406  	WORD $0x0944; BYTE $0xeb                   // or    ebx, r13d
   407  	LONG $0x04e0c141                           // shl    r8d, 4
   408  	WORD $0x0941; BYTE $0xc8                   // or    r8d, ecx
   409  	WORD $0x0941; BYTE $0xd8                   // or    r8d, ebx
   410  	LONG $0x066f8d4c                           // lea    r13, [rdi + 6]
   411  	WORD $0x8944; BYTE $0xc1                   // mov    ecx, r8d
   412  	LONG $0xfc00e181; WORD $0xffff             // and    ecx, -1024
   413  	LONG $0xd800f981; WORD $0x0000             // cmp    ecx, 55296
   414  	JNE  LBB0_20
   415  	LONG $0x0cfe8341                           // cmp    r14d, 12
   416  	JB   LBB0_2
   417  	LONG $0x007d8041; BYTE $0x5c               // cmp    byte [r13], 92
   418  	JNE  LBB0_2
   419  	LONG $0x75077f80                           // cmp    byte [rdi + 7], 117
   420  	JNE  LBB0_2
   421  	LONG $0x084fb60f                           // movzx    ecx, byte [rdi + 8]
   422  	LONG $0x34be0f46; BYTE $0x21               // movsx    r14d, byte [rcx + r12]
   423  	LONG $0x094fb60f                           // movzx    ecx, byte [rdi + 9]
   424  	LONG $0x2cbe0f46; BYTE $0x21               // movsx    r13d, byte [rcx + r12]
   425  	LONG $0x0a4fb60f                           // movzx    ecx, byte [rdi + 10]
   426  	LONG $0x0cbe0f42; BYTE $0x21               // movsx    ecx, byte [rcx + r12]
   427  	LONG $0x0b5fb60f                           // movzx    ebx, byte [rdi + 11]
   428  	LONG $0x1cbe0f42; BYTE $0x23               // movsx    ebx, byte [rbx + r12]
   429  	LONG $0x0ce6c141                           // shl    r14d, 12
   430  	LONG $0x08e5c141                           // shl    r13d, 8
   431  	WORD $0x0945; BYTE $0xf5                   // or    r13d, r14d
   432  	WORD $0xe1c1; BYTE $0x04                   // shl    ecx, 4
   433  	WORD $0xd909                               // or    ecx, ebx
   434  	WORD $0x0944; BYTE $0xe9                   // or    ecx, r13d
   435  	WORD $0xcb89                               // mov    ebx, ecx
   436  	WORD $0x0944; BYTE $0xc3                   // or    ebx, r8d
   437  	LONG $0xfffffb81; WORD $0x0000             // cmp    ebx, 65535
   438  	JA   LBB0_2
   439  	LONG $0x0ae0c141                           // shl    r8d, 10
   440  	LONG $0x00c08141; WORD $0xa000; BYTE $0xfc // add    r8d, -56623104
   441  	LONG $0x2400c181; WORD $0xffff             // add    ecx, -56320
   442  	WORD $0x0944; BYTE $0xc1                   // or    ecx, r8d
   443  	LONG $0x0000c181; WORD $0x0001             // add    ecx, 65536
   444  	LONG $0x0cc78348                           // add    rdi, 12
   445  	WORD $0x8949; BYTE $0xfd                   // mov    r13, rdi
   446  	WORD $0x8941; BYTE $0xc8                   // mov    r8d, ecx
   447  
   448  LBB0_20:
   449  	WORD $0x014c; BYTE $0xde // add    rsi, r11
   450  	LONG $0x7ff88341         // cmp    r8d, 127
   451  	JA   LBB0_22
   452  	WORD $0x8844; BYTE $0x06 // mov    byte [rsi], r8b
   453  	WORD $0x014c; BYTE $0xce // add    rsi, r9
   454  	JMP  LBB0_29
   455  
   456  LBB0_22:
   457  	LONG $0xfff88141; WORD $0x0007; BYTE $0x00 // cmp    r8d, 2047
   458  	JA   LBB0_24
   459  	WORD $0x8944; BYTE $0xc1                   // mov    ecx, r8d
   460  	WORD $0xe9c1; BYTE $0x06                   // shr    ecx, 6
   461  	LONG $0x00c0c181; WORD $0x0000             // add    ecx, 192
   462  	WORD $0x0e88                               // mov    byte [rsi], cl
   463  	LONG $0x3fe08041                           // and    r8b, 63
   464  	LONG $0x80c88041                           // or    r8b, -128
   465  	LONG $0x01468844                           // mov    byte [rsi + 1], r8b
   466  	WORD $0x014c; BYTE $0xd6                   // add    rsi, r10
   467  
   468  LBB0_29:
   469  	LONG $0x6f7ec1c4; WORD $0x0055 // vmovdqu    ymm2, yword [r13]
   470  	LONG $0x167ffec5               // vmovdqu    yword [rsi], ymm2
   471  	LONG $0xd874edc5               // vpcmpeqb    ymm3, ymm2, ymm0
   472  	LONG $0xcbd7fdc5               // vpmovmskb    ecx, ymm3
   473  	LONG $0xd174edc5               // vpcmpeqb    ymm2, ymm2, ymm1
   474  	LONG $0xf2d77dc5               // vpmovmskb    r14d, ymm2
   475  	WORD $0x598d; BYTE $0xff       // lea    ebx, [rcx - 1]
   476  	WORD $0x894c; BYTE $0xef       // mov    rdi, r13
   477  	WORD $0x8544; BYTE $0xf3       // test    ebx, r14d
   478  	JE   LBB0_4
   479  	JMP  LBB0_1