Created
July 14, 2020 01:14
-
-
Save alexcrichton/f9f10a1e2ce56c246fb449df45c3f113 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn hex_encode_fallback<'a>(src: &[u8], dst: &'a mut [u8]) -> Result<&'a str, usize> { | |
fn hex(byte: u8) -> u8 { | |
static TABLE: &[u8] = b"0123456789abcdef"; | |
TABLE[byte as usize] | |
} | |
for (byte, slots) in src.iter().zip(dst.chunks_mut(2)) { | |
slots[0] = hex((*byte >> 4) & 0xf); | |
slots[1] = hex(*byte & 0xf); | |
} | |
unsafe { Ok(str::from_utf8_unchecked(&dst[..src.len() * 2])) } | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
000000000000d247 <_wasm_function_86>: | |
d247: 48 8b 07 mov (%rdi),%rax | |
d24a: 48 8b 00 mov (%rax),%rax | |
d24d: 48 83 c0 18 add $0x18,%rax | |
d251: 48 39 e0 cmp %rsp,%rax | |
d254: 72 02 jb d258 <_wasm_function_86+0x11> | |
d256: 0f 0b ud2 | |
d258: 40 55 rex push %rbp | |
d25a: 48 89 e5 mov %rsp,%rbp | |
d25d: 40 53 rex push %rbx | |
d25f: 41 54 push %r12 | |
d261: 41 55 push %r13 | |
d263: 41 56 push %r14 | |
d265: 41 57 push %r15 | |
d267: 48 83 ec 18 sub $0x18,%rsp | |
d26b: 48 89 bc 24 00 00 00 mov %rdi,0x0(%rsp) | |
d272: 00 | |
d273: 40 89 94 24 14 00 00 rex mov %edx,0x14(%rsp) | |
d27a: 00 | |
d27b: 40 89 8c 24 10 00 00 rex mov %ecx,0x10(%rsp) | |
d282: 00 | |
d283: 40 b8 00 00 00 00 rex mov $0x0,%eax | |
d289: 40 b9 01 00 00 00 rex mov $0x1,%ecx | |
d28f: 44 8b bc 24 50 00 00 mov 0x50(%rsp),%r15d | |
d296: 00 | |
d297: 41 c1 ef 01 shr $0x1,%r15d | |
d29b: 44 8b b4 24 50 00 00 mov 0x50(%rsp),%r14d | |
d2a2: 00 | |
d2a3: 41 83 e6 01 and $0x1,%r14d | |
d2a7: 44 89 fa mov %r15d,%edx | |
d2aa: 44 01 f2 add %r14d,%edx | |
d2ad: 44 8b bc 24 50 00 00 mov 0x50(%rsp),%r15d | |
d2b4: 00 | |
d2b5: 45 85 ff test %r15d,%r15d | |
d2b8: 75 02 jne d2bc <_wasm_function_86+0x75> | |
d2ba: 89 c2 mov %eax,%edx | |
d2bc: 44 39 c2 cmp %r8d,%edx | |
d2bf: 40 72 03 rex jb d2c5 <_wasm_function_86+0x7e> | |
d2c2: 44 89 c2 mov %r8d,%edx | |
d2c5: 40 85 d2 rex test %edx,%edx | |
d2c8: 0f 84 df 00 00 00 je d3ad <_wasm_function_86+0x166> | |
d2ce: 4c 8b bc 24 00 00 00 mov 0x0(%rsp),%r15 | |
d2d5: 00 | |
d2d6: 49 8b 9f d4 01 00 00 mov 0x1d4(%r15),%rbx | |
d2dd: 89 c6 mov %eax,%esi | |
d2df: 89 c7 mov %eax,%edi | |
d2e1: eb 0c jmp d2ef <_wasm_function_86+0xa8> | |
d2e3: 44 89 d7 mov %r10d,%edi | |
d2e6: 41 89 fb mov %edi,%r11d | |
d2e9: 40 89 f7 rex mov %esi,%edi | |
d2ec: 44 89 de mov %r11d,%esi | |
d2ef: 41 89 f2 mov %esi,%r10d | |
d2f2: 41 83 c2 02 add $0x2,%r10d | |
d2f6: 44 8b bc 24 50 00 00 mov 0x50(%rsp),%r15d | |
d2fd: 00 | |
d2fe: 45 39 fa cmp %r15d,%r10d | |
d301: 40 77 08 rex ja d30c <_wasm_function_86+0xc5> | |
d304: 45 89 d3 mov %r10d,%r11d | |
d307: 45 89 df mov %r11d,%r15d | |
d30a: eb 00 jmp d30c <_wasm_function_86+0xc5> | |
d30c: 41 39 f2 cmp %esi,%r10d | |
d30f: 40 72 02 rex jb d314 <_wasm_function_86+0xcd> | |
d312: eb 08 jmp d31c <_wasm_function_86+0xd5> | |
d314: 44 8b bc 24 50 00 00 mov 0x50(%rsp),%r15d | |
d31b: 00 | |
d31c: 41 39 f7 cmp %esi,%r15d | |
d31f: 0f 84 e6 00 00 00 je d40b <_wasm_function_86+0x1c4> | |
d325: 45 89 cb mov %r9d,%r11d | |
d328: 41 01 f3 add %esi,%r11d | |
d32b: 44 8b b4 24 10 00 00 mov 0x10(%rsp),%r14d | |
d332: 00 | |
d333: 41 01 fe add %edi,%r14d | |
d336: 45 89 f4 mov %r14d,%r12d | |
d339: 46 0f b6 24 23 movzbl (%rbx,%r12,1),%r12d | |
d33e: 45 89 e5 mov %r12d,%r13d | |
d341: 41 c1 ed 04 shr $0x4,%r13d | |
d345: 41 81 c5 64 10 10 00 add $0x101064,%r13d | |
d34c: 45 89 ed mov %r13d,%r13d | |
d34f: 46 0f b6 2c 2b movzbl (%rbx,%r13,1),%r13d | |
d354: 45 89 de mov %r11d,%r14d | |
d357: 44 89 ac 24 0c 00 00 mov %r13d,0xc(%rsp) | |
d35e: 00 | |
d35f: 49 89 dd mov %rbx,%r13 | |
d362: 40 8b 9c 24 0c 00 00 rex mov 0xc(%rsp),%ebx | |
d369: 00 | |
d36a: 43 88 5c 35 00 mov %bl,0x0(%r13,%r14,1) | |
d36f: 41 83 c7 ff add $0xffffffff,%r15d | |
d373: 41 39 f7 cmp %esi,%r15d | |
d376: 0f 84 c6 00 00 00 je d442 <_wasm_function_86+0x1fb> | |
d37c: 41 83 c3 01 add $0x1,%r11d | |
d380: 41 83 e4 0f and $0xf,%r12d | |
d384: 41 81 c4 64 10 10 00 add $0x101064,%r12d | |
d38b: 44 89 e3 mov %r12d,%ebx | |
d38e: 41 0f b6 5c 1d 00 movzbl 0x0(%r13,%rbx,1),%ebx | |
d394: 44 89 de mov %r11d,%esi | |
d397: 41 88 5c 35 00 mov %bl,0x0(%r13,%rsi,1) | |
d39c: 40 89 fe rex mov %edi,%esi | |
d39f: 83 c6 01 add $0x1,%esi | |
d3a2: 39 d6 cmp %edx,%esi | |
d3a4: 4c 89 eb mov %r13,%rbx | |
d3a7: 0f 82 36 ff ff ff jb d2e3 <_wasm_function_86+0x9c> | |
d3ad: 44 89 c1 mov %r8d,%ecx | |
d3b0: c1 e1 01 shl $0x1,%ecx | |
d3b3: 44 8b bc 24 50 00 00 mov 0x50(%rsp),%r15d | |
d3ba: 00 | |
d3bb: 44 39 f9 cmp %r15d,%ecx | |
d3be: 0f 87 b2 00 00 00 ja d476 <_wasm_function_86+0x22f> | |
d3c4: 44 8b bc 24 14 00 00 mov 0x14(%rsp),%r15d | |
d3cb: 00 | |
d3cc: 44 89 fa mov %r15d,%edx | |
d3cf: 4c 8b bc 24 00 00 00 mov 0x0(%rsp),%r15 | |
d3d6: 00 | |
d3d7: 49 8b 9f d4 01 00 00 mov 0x1d4(%r15),%rbx | |
d3de: 44 89 4c 13 04 mov %r9d,0x4(%rbx,%rdx,1) | |
d3e3: 40 89 04 13 rex mov %eax,(%rbx,%rdx,1) | |
d3e7: 44 8b bc 24 14 00 00 mov 0x14(%rsp),%r15d | |
d3ee: 00 | |
d3ef: 41 83 c7 08 add $0x8,%r15d | |
d3f3: 44 89 f8 mov %r15d,%eax | |
d3f6: 40 89 0c 03 rex mov %ecx,(%rbx,%rax,1) | |
d3fa: 48 83 c4 18 add $0x18,%rsp | |
d3fe: 41 5f pop %r15 | |
d400: 41 5e pop %r14 | |
d402: 41 5d pop %r13 | |
d404: 41 5c pop %r12 | |
d406: 40 5b rex pop %rbx | |
d408: 40 5d rex pop %rbp | |
d40a: c3 retq | |
d40b: 40 b9 34 10 10 00 rex mov $0x101034,%ecx | |
d411: 48 ba 00 00 00 00 00 movabs $0x0,%rdx | |
d418: 00 00 00 | |
d41b: 4c 8b bc 24 00 00 00 mov 0x0(%rsp),%r15 | |
d422: 00 | |
d423: 89 c3 mov %eax,%ebx | |
d425: 4d 89 fe mov %r15,%r14 | |
d428: 4c 89 f7 mov %r14,%rdi | |
d42b: 4c 89 fe mov %r15,%rsi | |
d42e: 41 89 c8 mov %ecx,%r8d | |
d431: 40 89 d9 rex mov %ebx,%ecx | |
d434: 40 89 c3 rex mov %eax,%ebx | |
d437: 48 89 d0 mov %rdx,%rax | |
d43a: 40 89 da rex mov %ebx,%edx | |
d43d: 40 ff d0 rex callq *%rax | |
d440: 0f 0b ud2 | |
d442: 40 b8 44 10 10 00 rex mov $0x101044,%eax | |
d448: 48 ba 00 00 00 00 00 movabs $0x0,%rdx | |
d44f: 00 00 00 | |
d452: 4c 8b bc 24 00 00 00 mov 0x0(%rsp),%r15 | |
d459: 00 | |
d45a: 89 cb mov %ecx,%ebx | |
d45c: 4d 89 fe mov %r15,%r14 | |
d45f: 4c 89 f7 mov %r14,%rdi | |
d462: 4c 89 fe mov %r15,%rsi | |
d465: 41 89 c0 mov %eax,%r8d | |
d468: 48 89 d0 mov %rdx,%rax | |
d46b: 40 89 ca rex mov %ecx,%edx | |
d46e: 40 89 d9 rex mov %ebx,%ecx | |
d471: 40 ff d0 rex callq *%rax | |
d474: 0f 0b ud2 | |
d476: 40 b8 54 10 10 00 rex mov $0x101054,%eax | |
d47c: 48 ba 00 00 00 00 00 movabs $0x0,%rdx | |
d483: 00 00 00 | |
d486: 4c 8b bc 24 00 00 00 mov 0x0(%rsp),%r15 | |
d48d: 00 | |
d48e: 4d 89 fe mov %r15,%r14 | |
d491: 44 8b ac 24 50 00 00 mov 0x50(%rsp),%r13d | |
d498: 00 | |
d499: 4c 89 f7 mov %r14,%rdi | |
d49c: 4c 89 fe mov %r15,%rsi | |
d49f: 41 89 c0 mov %eax,%r8d | |
d4a2: 48 89 d0 mov %rdx,%rax | |
d4a5: 40 89 ca rex mov %ecx,%edx | |
d4a8: 44 89 e9 mov %r13d,%ecx | |
d4ab: 40 ff d0 rex callq *%rax | |
d4ae: 0f 0b ud2 | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(func $_ZN3hex19hex_encode_fallback17hd0bdd788dfc43606E (type 3) (param i32 i32 i32 i32 i32) | |
(local i32 i32 i32 i32 i32 i32 i32) | |
i32.const 0 | |
local.set 5 | |
block ;; label = @1 | |
block ;; label = @2 | |
block ;; label = @3 | |
block ;; label = @4 | |
local.get 4 | |
i32.const 1 | |
i32.shr_u | |
local.get 4 | |
i32.const 1 | |
i32.and | |
i32.add | |
i32.const 0 | |
local.get 4 | |
select | |
local.tee 6 | |
local.get 2 | |
local.get 6 | |
local.get 2 | |
i32.lt_u | |
select | |
local.tee 7 | |
i32.eqz | |
br_if 0 (;@4;) | |
i32.const 0 | |
local.set 8 | |
loop ;; label = @5 | |
local.get 4 | |
local.get 4 | |
local.get 5 | |
i32.const 2 | |
i32.add | |
local.tee 6 | |
local.get 6 | |
local.get 4 | |
i32.gt_u | |
select | |
local.get 6 | |
local.get 5 | |
i32.lt_u | |
select | |
local.tee 9 | |
local.get 5 | |
i32.eq | |
br_if 2 (;@3;) | |
local.get 3 | |
local.get 5 | |
i32.add | |
local.tee 10 | |
local.get 1 | |
local.get 8 | |
i32.add | |
i32.load8_u | |
local.tee 11 | |
i32.const 4 | |
i32.shr_u | |
i32.const 1052772 | |
i32.add | |
i32.load8_u | |
i32.store8 | |
local.get 9 | |
i32.const -1 | |
i32.add | |
local.get 5 | |
i32.eq | |
br_if 3 (;@2;) | |
local.get 10 | |
i32.const 1 | |
i32.add | |
local.get 11 | |
i32.const 15 | |
i32.and | |
i32.const 1052772 | |
i32.add | |
i32.load8_u | |
i32.store8 | |
local.get 6 | |
local.set 5 | |
local.get 8 | |
i32.const 1 | |
i32.add | |
local.tee 8 | |
local.get 7 | |
i32.lt_u | |
br_if 0 (;@5;) | |
end | |
end | |
local.get 2 | |
i32.const 1 | |
i32.shl | |
local.tee 5 | |
local.get 4 | |
i32.gt_u | |
br_if 2 (;@1;) | |
local.get 0 | |
local.get 3 | |
i32.store offset=4 | |
local.get 0 | |
i32.const 0 | |
i32.store | |
local.get 0 | |
i32.const 8 | |
i32.add | |
local.get 5 | |
i32.store | |
return | |
end | |
i32.const 0 | |
i32.const 0 | |
i32.const 1052724 | |
call $_ZN4core9panicking18panic_bounds_check17h0784e4ee1da54c15E | |
unreachable | |
end | |
i32.const 1 | |
i32.const 1 | |
i32.const 1052740 | |
call $_ZN4core9panicking18panic_bounds_check17h0784e4ee1da54c15E | |
unreachable | |
end | |
local.get 5 | |
local.get 4 | |
i32.const 1052756 | |
call $_ZN4core5slice20slice_index_len_fail17h65581a7544c92eb9E | |
unreachable) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
unsafe fn hex_encode_simd128<'a>(mut src: &[u8], dst: &'a mut [u8]) -> Result<&'a str, usize> { | |
use core_arch::arch::wasm32::*; | |
let ascii_zero = i8x16_splat(b'0' as i8); | |
let nines = i8x16_splat(9); | |
let ascii_a = i8x16_splat((b'a' - 9 - 1) as i8); | |
let and4bits = i8x16_splat(0xf); | |
let mut i = 0_isize; | |
while src.len() >= 16 { | |
let invec = v128_load(src.as_ptr() as *const _); | |
let masked1 = v128_and(invec, and4bits); | |
let masked2 = v128_and(i8x16_shr_u(invec, 4), and4bits); | |
// return 0xff corresponding to the elements > 9, or 0x00 otherwise | |
let cmpmask1 = i8x16_gt_u(masked1, nines); | |
let cmpmask2 = i8x16_gt_u(masked2, nines); | |
// add '0' or the offset depending on the masks | |
let masked1 = i8x16_add(masked1, v128_bitselect(ascii_a, ascii_zero, cmpmask1)); | |
let masked2 = i8x16_add(masked2, v128_bitselect(ascii_a, ascii_zero, cmpmask2)); | |
// Next we need to shuffle around masked{1,2} to get back to the | |
// original source text order. The first element (res1) we'll store uses | |
// all the low bytes from the 2 masks and the second element (res2) uses | |
// all the upper bytes. | |
let res1 = v8x16_shuffle!( | |
masked2, masked1, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23, | |
); | |
let res2 = v8x16_shuffle!( | |
masked2, masked1, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31, | |
); | |
v128_store(dst.as_mut_ptr().offset(i * 2) as *mut _, res1); | |
v128_store(dst.as_mut_ptr().offset(i * 2 + 16) as *mut _, res2); | |
src = &src[16..]; | |
i += 16; | |
} | |
let i = i as usize; | |
let _ = hex_encode_fallback(src, &mut dst[i * 2..]); | |
Ok(str::from_utf8_unchecked(&dst[..src.len() * 2 + i * 2])) | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
000000000000cd90 <_wasm_function_85>: | |
cd90: 48 8b 07 mov (%rdi),%rax | |
cd93: 48 8b 00 mov (%rax),%rax | |
cd96: 48 83 c0 28 add $0x28,%rax | |
cd9a: 48 39 e0 cmp %rsp,%rax | |
cd9d: 72 02 jb cda1 <_wasm_function_85+0x11> | |
cd9f: 0f 0b ud2 | |
cda1: 40 55 rex push %rbp | |
cda3: 48 89 e5 mov %rsp,%rbp | |
cda6: 40 53 rex push %rbx | |
cda8: 41 54 push %r12 | |
cdaa: 41 55 push %r13 | |
cdac: 41 56 push %r14 | |
cdae: 41 57 push %r15 | |
cdb0: 48 83 ec 28 sub $0x28,%rsp | |
cdb4: 48 89 bc 24 08 00 00 mov %rdi,0x8(%rsp) | |
cdbb: 00 | |
cdbc: 40 89 94 24 24 00 00 rex mov %edx,0x24(%rsp) | |
cdc3: 00 | |
cdc4: 44 89 84 24 10 00 00 mov %r8d,0x10(%rsp) | |
cdcb: 00 | |
cdcc: 44 89 8c 24 20 00 00 mov %r9d,0x20(%rsp) | |
cdd3: 00 | |
cdd4: 40 b8 00 00 00 00 rex mov $0x0,%eax | |
cdda: 40 89 84 24 1c 00 00 rex mov %eax,0x1c(%rsp) | |
cde1: 00 | |
cde2: 66 0f ef c0 pxor %xmm0,%xmm0 | |
cde6: 49 89 ff mov %rdi,%r15 | |
cde9: 41 8b 87 f0 01 00 00 mov 0x1f0(%r15),%eax | |
cdf0: 40 89 84 24 18 00 00 rex mov %eax,0x18(%rsp) | |
cdf7: 00 | |
cdf8: 41 89 c7 mov %eax,%r15d | |
cdfb: 44 89 f8 mov %r15d,%eax | |
cdfe: 83 c0 f0 add $0xfffffff0,%eax | |
ce01: 49 89 ff mov %rdi,%r15 | |
ce04: 41 89 87 f0 01 00 00 mov %eax,0x1f0(%r15) | |
ce0b: 45 89 c7 mov %r8d,%r15d | |
ce0e: 41 83 ff 10 cmp $0x10,%r15d | |
ce12: 0f 82 09 02 00 00 jb d021 <_wasm_function_85+0x291> | |
ce18: 40 ba 57 00 00 00 rex mov $0x57,%edx | |
ce1e: 66 0f 6e ca movd %edx,%xmm1 | |
ce22: 66 0f 38 00 c8 pshufb %xmm0,%xmm1 | |
ce27: 40 ba 30 00 00 00 rex mov $0x30,%edx | |
ce2d: 66 0f 6e d2 movd %edx,%xmm2 | |
ce31: 66 0f 38 00 d0 pshufb %xmm0,%xmm2 | |
ce36: 49 89 ff mov %rdi,%r15 | |
ce39: 49 8b 97 d4 01 00 00 mov 0x1d4(%r15),%rdx | |
ce40: 40 bb 9f ff ff ff rex mov $0xffffff9f,%ebx | |
ce46: 66 0f 6e db movd %ebx,%xmm3 | |
ce4a: 66 0f 38 00 d8 pshufb %xmm0,%xmm3 | |
ce4f: 66 0f 74 e4 pcmpeqb %xmm4,%xmm4 | |
ce53: 40 bb 04 00 00 00 rex mov $0x4,%ebx | |
ce59: 83 e3 07 and $0x7,%ebx | |
ce5c: 66 0f 6e eb movd %ebx,%xmm5 | |
ce60: 48 8d 35 20 03 00 00 lea 0x320(%rip),%rsi # d187 <_wasm_function_85+0x3f7> | |
ce67: c1 e3 04 shl $0x4,%ebx | |
ce6a: 40 bf 0f 00 00 00 rex mov $0xf,%edi | |
ce70: 66 0f 6e f7 movd %edi,%xmm6 | |
ce74: 66 0f 38 00 f0 pshufb %xmm0,%xmm6 | |
ce79: 40 bf 09 00 00 00 rex mov $0x9,%edi | |
ce7f: 66 0f 6e ff movd %edi,%xmm7 | |
ce83: 66 0f 38 00 f8 pshufb %xmm0,%xmm7 | |
ce88: 0f 10 05 78 03 00 00 movups 0x378(%rip),%xmm0 # d207 <_wasm_function_85+0x477> | |
ce8f: 44 0f 10 05 80 03 00 movups 0x380(%rip),%xmm8 # d217 <_wasm_function_85+0x487> | |
ce96: 00 | |
ce97: 44 0f 10 0d 88 03 00 movups 0x388(%rip),%xmm9 # d227 <_wasm_function_85+0x497> | |
ce9e: 00 | |
ce9f: 44 0f 10 15 90 03 00 movups 0x390(%rip),%xmm10 # d237 <_wasm_function_85+0x4a7> | |
cea6: 00 | |
cea7: 44 8b bc 24 1c 00 00 mov 0x1c(%rsp),%r15d | |
ceae: 00 | |
ceaf: 44 89 bc 24 14 00 00 mov %r15d,0x14(%rsp) | |
ceb6: 00 | |
ceb7: 45 89 c7 mov %r8d,%r15d | |
ceba: eb 03 jmp cebf <_wasm_function_85+0x12f> | |
cebc: 41 89 ff mov %edi,%r15d | |
cebf: 44 8b b4 24 20 00 00 mov 0x20(%rsp),%r14d | |
cec6: 00 | |
cec7: 44 8b ac 24 14 00 00 mov 0x14(%rsp),%r13d | |
cece: 00 | |
cecf: 45 01 ee add %r13d,%r14d | |
ced2: 44 89 f7 mov %r14d,%edi | |
ced5: 83 c7 10 add $0x10,%edi | |
ced8: 41 89 c8 mov %ecx,%r8d | |
cedb: 46 0f 10 1c 02 movups (%rdx,%r8,1),%xmm11 | |
cee0: 45 0f 28 e3 movaps %xmm11,%xmm12 | |
cee4: 66 44 0f de e3 pmaxub %xmm3,%xmm12 | |
cee9: 66 44 0f 74 e3 pcmpeqb %xmm3,%xmm12 | |
ceee: 44 0f 28 ec movaps %xmm4,%xmm13 | |
cef2: 66 45 0f ef ec pxor %xmm12,%xmm13 | |
cef7: 44 0f 28 e2 movaps %xmm2,%xmm12 | |
cefb: 44 0f 28 f0 movaps %xmm0,%xmm14 | |
ceff: 41 0f 28 c5 movaps %xmm13,%xmm0 | |
cf03: 45 0f 28 ee movaps %xmm14,%xmm13 | |
cf07: 66 44 0f 38 10 e1 pblendvb %xmm0,%xmm1,%xmm12 | |
cf0d: 41 0f 28 c3 movaps %xmm11,%xmm0 | |
cf11: 66 0f d1 c5 psrlw %xmm5,%xmm0 | |
cf15: 44 0f 10 34 1e movups (%rsi,%rbx,1),%xmm14 | |
cf1a: 66 41 0f db c6 pand %xmm14,%xmm0 | |
cf1f: 66 44 0f fc e0 paddb %xmm0,%xmm12 | |
cf24: 66 44 0f db de pand %xmm6,%xmm11 | |
cf29: 41 0f 28 c3 movaps %xmm11,%xmm0 | |
cf2d: 66 0f de c7 pmaxub %xmm7,%xmm0 | |
cf31: 66 0f 74 c7 pcmpeqb %xmm7,%xmm0 | |
cf35: 44 0f 28 f4 movaps %xmm4,%xmm14 | |
cf39: 66 44 0f ef f0 pxor %xmm0,%xmm14 | |
cf3e: 40 0f 28 c2 rex movaps %xmm2,%xmm0 | |
cf42: 44 0f 28 f8 movaps %xmm0,%xmm15 | |
cf46: 41 0f 28 c6 movaps %xmm14,%xmm0 | |
cf4a: 45 0f 28 f7 movaps %xmm15,%xmm14 | |
cf4e: 66 44 0f 38 10 f1 pblendvb %xmm0,%xmm1,%xmm14 | |
cf54: 66 45 0f fc f3 paddb %xmm11,%xmm14 | |
cf59: 41 0f 28 c4 movaps %xmm12,%xmm0 | |
cf5d: 66 41 0f 38 00 c5 pshufb %xmm13,%xmm0 | |
cf63: 45 0f 28 de movaps %xmm14,%xmm11 | |
cf67: 66 45 0f 38 00 d8 pshufb %xmm8,%xmm11 | |
cf6d: 66 41 0f eb c3 por %xmm11,%xmm0 | |
cf72: 40 89 ff rex mov %edi,%edi | |
cf75: 40 0f 11 04 3a rex movups %xmm0,(%rdx,%rdi,1) | |
cf7a: 66 45 0f 38 00 e1 pshufb %xmm9,%xmm12 | |
cf80: 66 45 0f 38 00 f2 pshufb %xmm10,%xmm14 | |
cf86: 66 45 0f eb e6 por %xmm14,%xmm12 | |
cf8b: 44 89 f7 mov %r14d,%edi | |
cf8e: 44 0f 11 24 3a movups %xmm12,(%rdx,%rdi,1) | |
cf93: 45 89 ee mov %r13d,%r14d | |
cf96: 41 83 c6 20 add $0x20,%r14d | |
cf9a: 44 89 b4 24 14 00 00 mov %r14d,0x14(%rsp) | |
cfa1: 00 | |
cfa2: 83 c1 10 add $0x10,%ecx | |
cfa5: 44 89 ff mov %r15d,%edi | |
cfa8: 83 c7 f0 add $0xfffffff0,%edi | |
cfab: 83 ff 0f cmp $0xf,%edi | |
cfae: 41 0f 28 c5 movaps %xmm13,%xmm0 | |
cfb2: 0f 87 04 ff ff ff ja cebc <_wasm_function_85+0x12c> | |
cfb8: 45 89 f7 mov %r14d,%r15d | |
cfbb: 44 8b b4 24 60 00 00 mov 0x60(%rsp),%r14d | |
cfc2: 00 | |
cfc3: 45 39 f7 cmp %r14d,%r15d | |
cfc6: 40 77 16 rex ja cfdf <_wasm_function_85+0x24f> | |
cfc9: 44 8b bc 24 10 00 00 mov 0x10(%rsp),%r15d | |
cfd0: 00 | |
cfd1: 41 83 e7 0f and $0xf,%r15d | |
cfd5: 44 89 bc 24 10 00 00 mov %r15d,0x10(%rsp) | |
cfdc: 00 | |
cfdd: eb 52 jmp d031 <_wasm_function_85+0x2a1> | |
cfdf: 40 b8 14 10 10 00 rex mov $0x101014,%eax | |
cfe5: 48 b9 00 00 00 00 00 movabs $0x0,%rcx | |
cfec: 00 00 00 | |
cfef: 4c 8b bc 24 08 00 00 mov 0x8(%rsp),%r15 | |
cff6: 00 | |
cff7: 4d 89 fe mov %r15,%r14 | |
cffa: 44 8b ac 24 14 00 00 mov 0x14(%rsp),%r13d | |
d001: 00 | |
d002: 44 8b a4 24 60 00 00 mov 0x60(%rsp),%r12d | |
d009: 00 | |
d00a: 4c 89 f7 mov %r14,%rdi | |
d00d: 4c 89 fe mov %r15,%rsi | |
d010: 44 89 ea mov %r13d,%edx | |
d013: 41 89 c0 mov %eax,%r8d | |
d016: 48 89 c8 mov %rcx,%rax | |
d019: 44 89 e1 mov %r12d,%ecx | |
d01c: 40 ff d0 rex callq *%rax | |
d01f: 0f 0b ud2 | |
d021: 44 8b bc 24 1c 00 00 mov 0x1c(%rsp),%r15d | |
d028: 00 | |
d029: 44 89 bc 24 14 00 00 mov %r15d,0x14(%rsp) | |
d030: 00 | |
d031: 44 8b bc 24 20 00 00 mov 0x20(%rsp),%r15d | |
d038: 00 | |
d039: 44 8b b4 24 14 00 00 mov 0x14(%rsp),%r14d | |
d040: 00 | |
d041: 45 01 f7 add %r14d,%r15d | |
d044: 44 8b b4 24 60 00 00 mov 0x60(%rsp),%r14d | |
d04b: 00 | |
d04c: 44 8b ac 24 14 00 00 mov 0x14(%rsp),%r13d | |
d053: 00 | |
d054: 45 29 ee sub %r13d,%r14d | |
d057: 44 89 b4 24 00 00 00 mov %r14d,0x0(%rsp) | |
d05e: 00 | |
d05f: 48 ba 00 00 00 00 00 movabs $0x0,%rdx | |
d066: 00 00 00 | |
d069: 4c 8b b4 24 08 00 00 mov 0x8(%rsp),%r14 | |
d070: 00 | |
d071: 4d 89 f5 mov %r14,%r13 | |
d074: 44 8b a4 24 10 00 00 mov 0x10(%rsp),%r12d | |
d07b: 00 | |
d07c: 4c 89 ef mov %r13,%rdi | |
d07f: 4c 89 f6 mov %r14,%rsi | |
d082: 45 89 e0 mov %r12d,%r8d | |
d085: 45 89 f9 mov %r15d,%r9d | |
d088: 48 89 d3 mov %rdx,%rbx | |
d08b: 40 89 c2 rex mov %eax,%edx | |
d08e: 48 89 d8 mov %rbx,%rax | |
d091: 40 ff d0 rex callq *%rax | |
d094: 44 8b bc 24 10 00 00 mov 0x10(%rsp),%r15d | |
d09b: 00 | |
d09c: 41 c1 e7 01 shl $0x1,%r15d | |
d0a0: 44 8b b4 24 14 00 00 mov 0x14(%rsp),%r14d | |
d0a7: 00 | |
d0a8: 44 89 f8 mov %r15d,%eax | |
d0ab: 44 01 f0 add %r14d,%eax | |
d0ae: 44 8b bc 24 60 00 00 mov 0x60(%rsp),%r15d | |
d0b5: 00 | |
d0b6: 44 39 f8 cmp %r15d,%eax | |
d0b9: 40 77 6e rex ja d12a <_wasm_function_85+0x39a> | |
d0bc: 44 8b bc 24 24 00 00 mov 0x24(%rsp),%r15d | |
d0c3: 00 | |
d0c4: 44 89 f9 mov %r15d,%ecx | |
d0c7: 4c 8b bc 24 08 00 00 mov 0x8(%rsp),%r15 | |
d0ce: 00 | |
d0cf: 49 8b 97 d4 01 00 00 mov 0x1d4(%r15),%rdx | |
d0d6: 44 8b bc 24 20 00 00 mov 0x20(%rsp),%r15d | |
d0dd: 00 | |
d0de: 44 89 7c 0a 04 mov %r15d,0x4(%rdx,%rcx,1) | |
d0e3: 44 8b bc 24 1c 00 00 mov 0x1c(%rsp),%r15d | |
d0ea: 00 | |
d0eb: 44 89 3c 0a mov %r15d,(%rdx,%rcx,1) | |
d0ef: 44 8b bc 24 24 00 00 mov 0x24(%rsp),%r15d | |
d0f6: 00 | |
d0f7: 41 83 c7 08 add $0x8,%r15d | |
d0fb: 44 89 f9 mov %r15d,%ecx | |
d0fe: 40 89 04 0a rex mov %eax,(%rdx,%rcx,1) | |
d102: 44 8b bc 24 18 00 00 mov 0x18(%rsp),%r15d | |
d109: 00 | |
d10a: 4c 8b b4 24 08 00 00 mov 0x8(%rsp),%r14 | |
d111: 00 | |
d112: 45 89 be f0 01 00 00 mov %r15d,0x1f0(%r14) | |
d119: 48 83 c4 28 add $0x28,%rsp | |
d11d: 41 5f pop %r15 | |
d11f: 41 5e pop %r14 | |
d121: 41 5d pop %r13 | |
d123: 41 5c pop %r12 | |
d125: 40 5b rex pop %rbx | |
d127: 40 5d rex pop %rbp | |
d129: c3 retq | |
d12a: 40 b9 24 10 10 00 rex mov $0x101024,%ecx | |
d130: 48 ba 00 00 00 00 00 movabs $0x0,%rdx | |
d137: 00 00 00 | |
d13a: 4c 8b bc 24 08 00 00 mov 0x8(%rsp),%r15 | |
d141: 00 | |
d142: 4d 89 fe mov %r15,%r14 | |
d145: 44 8b ac 24 60 00 00 mov 0x60(%rsp),%r13d | |
d14c: 00 | |
d14d: 4c 89 f7 mov %r14,%rdi | |
d150: 4c 89 fe mov %r15,%rsi | |
d153: 41 89 c8 mov %ecx,%r8d | |
d156: 44 89 e9 mov %r13d,%ecx | |
d159: 40 89 c3 rex mov %eax,%ebx | |
d15c: 48 89 d0 mov %rdx,%rax | |
d15f: 40 89 da rex mov %ebx,%edx | |
d162: 40 ff d0 rex callq *%rax | |
d165: 0f 0b ud2 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(func $_ZN3hex18hex_encode_simd12817h4f12557b8a63e54bE.llvm.16065377372865039489 (type 3) (param i32 i32 i32 i32 i32) | |
(local i32 i32 i32 i32 v128 v128 v128 v128) | |
global.get 0 | |
i32.const 16 | |
i32.sub | |
local.tee 5 | |
global.set 0 | |
block ;; label = @1 | |
block ;; label = @2 | |
local.get 2 | |
i32.const 16 | |
i32.lt_u | |
br_if 0 (;@2;) | |
i32.const 0 | |
local.set 6 | |
local.get 2 | |
local.set 7 | |
loop ;; label = @3 | |
local.get 3 | |
local.get 6 | |
i32.add | |
local.tee 8 | |
i32.const 16 | |
i32.add | |
i32.const 87 | |
i8x16.splat | |
local.tee 9 | |
i32.const 48 | |
i8x16.splat | |
local.tee 10 | |
local.get 1 | |
v128.load | |
local.tee 11 | |
i32.const -97 | |
i8x16.splat | |
i8x16.gt_u | |
v128.bitselect | |
local.get 11 | |
i32.const 4 | |
i8x16.shr_u | |
i8x16.add | |
local.tee 12 | |
local.get 9 | |
local.get 10 | |
local.get 11 | |
i32.const 15 | |
i8x16.splat | |
v128.and | |
local.tee 11 | |
i32.const 9 | |
i8x16.splat | |
i8x16.gt_u | |
v128.bitselect | |
local.get 11 | |
i8x16.add | |
local.tee 11 | |
v8x16.shuffle 8 24 9 25 10 26 11 27 12 28 13 29 14 30 15 31 | |
v128.store | |
local.get 8 | |
local.get 12 | |
local.get 11 | |
v8x16.shuffle 0 16 1 17 2 18 3 19 4 20 5 21 6 22 7 23 | |
v128.store | |
local.get 6 | |
i32.const 32 | |
i32.add | |
local.set 6 | |
local.get 1 | |
i32.const 16 | |
i32.add | |
local.set 1 | |
local.get 7 | |
i32.const -16 | |
i32.add | |
local.tee 7 | |
i32.const 15 | |
i32.gt_u | |
br_if 0 (;@3;) | |
end | |
block ;; label = @3 | |
local.get 6 | |
local.get 4 | |
i32.gt_u | |
br_if 0 (;@3;) | |
local.get 2 | |
i32.const 15 | |
i32.and | |
local.set 2 | |
br 2 (;@1;) | |
end | |
local.get 6 | |
local.get 4 | |
i32.const 1052692 | |
call $_ZN4core5slice22slice_index_order_fail17hd01473f25d361774E | |
unreachable | |
end | |
i32.const 0 | |
local.set 6 | |
end | |
local.get 5 | |
local.get 1 | |
local.get 2 | |
local.get 3 | |
local.get 6 | |
i32.add | |
local.get 4 | |
local.get 6 | |
i32.sub | |
call $_ZN3hex19hex_encode_fallback17hd0bdd788dfc43606E | |
block ;; label = @1 | |
local.get 2 | |
i32.const 1 | |
i32.shl | |
local.get 6 | |
i32.add | |
local.tee 6 | |
local.get 4 | |
i32.gt_u | |
br_if 0 (;@1;) | |
local.get 0 | |
local.get 3 | |
i32.store offset=4 | |
local.get 0 | |
i32.const 0 | |
i32.store | |
local.get 0 | |
i32.const 8 | |
i32.add | |
local.get 6 | |
i32.store | |
local.get 5 | |
i32.const 16 | |
i32.add | |
global.set 0 | |
return | |
end | |
local.get 6 | |
local.get 4 | |
i32.const 1052708 | |
call $_ZN4core5slice20slice_index_len_fail17h65581a7544c92eb9E | |
unreachable) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment