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