// File: oknenavin[P]cxon/test/../src/cxon/lang/common/cio/char.hxx
// Function: std::enable_if<!cxon::JSON<input_iterator_no_validate_string_encoding_traits>::validate_string_encoding, char32_t>::type cxon::cio::chr::imp::utf8_to_utf32_<cxon::JSON<input_iterator_no_validate_string_encoding_traits>, cxon::test::force_input_iterator<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, cxon::context<cxon::JSON<input_iterator_no_validate_string_encoding_traits>>>(cxon::test::force_input_iterator<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, cxon::test::force_input_iterator<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>, cxon::context<cxon::JSON<input_iterator_no_validate_string_encoding_traits>>&)
inline auto utf8_to_utf32_(II& i, II e, Cx& cx)
                    -> enable_if_t<!X::validate_string_encoding, char32_t>
                {   static_assert(is_char_8<typename std::iterator_traits<II>::value_type>::value, "unexpected");
                    CXON_ASSERT(i != e, "unexpected");
                    char32_t const  c0 = (unsigned char)*i;
                    char32_t        c1, c2, c3;
                    if ((c0 & 0x80) == 0)
                        return ++i, c0;
                    if ((c0 & 0xE0) == 0xC0) {
                        c1 = head_(i, e);       CXON_EXPECT((c1 & 0xC0) == 0x80);
                        return ++i, ((c0 & 0x1F) << 6) | (c1 & 0x3F);
                    }
                    if ((c0 & 0xF0) == 0xE0) {
                        c1 = head_(i, e);       CXON_EXPECT((c1 & 0xC0) == 0x80);
                        c2 = tail_(i, e);       CXON_EXPECT((c2 & 0xC0) == 0x80);
                        return ++i, ((c0 & 0x0F) << 12) | ((c1 & 0x3F) << 6) | (c2 & 0x3F);
                    }
                    if ((c0 & 0xF8) == 0xF0) {
                        c1 = head_(i, e);       CXON_EXPECT((c1 & 0xC0) == 0x80);
                        c2 = tail_(i, e);       CXON_EXPECT((c2 & 0xC0) == 0x80);
                        c3 = tail_(i, e);       CXON_EXPECT((c3 & 0xC0) == 0x80);
                        return ++i, ((c0 & 0x07) << 18) | ((c1 & 0x3F) << 12) | ((c2 & 0x3F) << 6) | (c3 & 0x3F);
                    }
                    CXON_EXPECT(false);
                }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rsi, -0x68(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
callq 0x21a6c0
movq -0x10(%rbp), %rdi
callq 0x21a720
movzbl (%rax), %eax
movl %eax, -0x24(%rbp)
movl -0x24(%rbp), %eax
andl $0x80, %eax
cmpl $0x0, %eax
jne 0x21f284
movq -0x10(%rbp), %rdi
callq 0x21a740
movl -0x24(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0x21f547
movl -0x24(%rbp), %eax
andl $0xe0, %eax
cmpl $0xc0, %eax
jne 0x21f306
movq -0x68(%rbp), %rsi
movq -0x10(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x21a220
movq -0x70(%rbp), %rdi
leaq -0x38(%rbp), %rsi
callq 0x21bc40
movzbl %al, %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
andl $0xc0, %eax
cmpl $0x80, %eax
je 0x21f2e4
movq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x21e6f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x21f547
movq -0x10(%rbp), %rdi
callq 0x21a740
movl -0x24(%rbp), %eax
andl $0x1f, %eax
shll $0x6, %eax
movl -0x28(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x21f547
movl -0x24(%rbp), %eax
andl $0xf0, %eax
cmpl $0xe0, %eax
jne 0x21f3e8
movq -0x68(%rbp), %rsi
movq -0x10(%rbp), %rax
movq %rax, -0x78(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x21a220
movq -0x78(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x21bc40
movzbl %al, %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
andl $0xc0, %eax
cmpl $0x80, %eax
je 0x21f36a
movq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x21e6f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x21f547
movq -0x68(%rbp), %rsi
movq -0x10(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x21a220
movq -0x80(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x21bc80
movzbl %al, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
andl $0xc0, %eax
cmpl $0x80, %eax
je 0x21f3bb
movq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x21e6f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x21f547
movq -0x10(%rbp), %rdi
callq 0x21a740
movl -0x24(%rbp), %eax
andl $0xf, %eax
shll $0xc, %eax
movl -0x28(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x2c(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x21f547
movl -0x24(%rbp), %eax
andl $0xf8, %eax
cmpl $0xf0, %eax
jne 0x21f532
movq -0x68(%rbp), %rsi
movq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x21a220
movq -0x88(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x21bc40
movzbl %al, %eax
movl %eax, -0x28(%rbp)
movl -0x28(%rbp), %eax
andl $0xc0, %eax
cmpl $0x80, %eax
je 0x21f452
movq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x21e6f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x21f547
movq -0x68(%rbp), %rsi
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x21a220
movq -0x90(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x21bc80
movzbl %al, %eax
movl %eax, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
andl $0xc0, %eax
cmpl $0x80, %eax
je 0x21f4a9
movq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x21e6f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x21f547
movq -0x68(%rbp), %rsi
movq -0x10(%rbp), %rax
movq %rax, -0x98(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x21a220
movq -0x98(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x21bc80
movzbl %al, %eax
movl %eax, -0x30(%rbp)
movl -0x30(%rbp), %eax
andl $0xc0, %eax
cmpl $0x80, %eax
je 0x21f4fd
movq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x21e6f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x21f547
movq -0x10(%rbp), %rdi
callq 0x21a740
movl -0x24(%rbp), %eax
andl $0x7, %eax
shll $0x12, %eax
movl -0x28(%rbp), %ecx
andl $0x3f, %ecx
shll $0xc, %ecx
orl %ecx, %eax
movl -0x2c(%rbp), %ecx
andl $0x3f, %ecx
shll $0x6, %ecx
orl %ecx, %eax
movl -0x30(%rbp), %ecx
andl $0x3f, %ecx
orl %ecx, %eax
movl %eax, -0x4(%rbp)
jmp 0x21f547
movq -0x20(%rbp), %rdi
movl $0x2, %esi
callq 0x21e6f0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl -0x4(%rbp), %eax
addq $0xa0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)