Skip to content

Instantly share code, notes, and snippets.

@alexcrichton
Created July 14, 2020 01:14
Show Gist options
  • Save alexcrichton/f9f10a1e2ce56c246fb449df45c3f113 to your computer and use it in GitHub Desktop.
Save alexcrichton/f9f10a1e2ce56c246fb449df45c3f113 to your computer and use it in GitHub Desktop.
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])) }
}
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
(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)
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]))
}
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
(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