// File: /workspace/github_cpp_makefile_star2_O2/oknenavin[P]cxon/test/../src/cxon/lang/cbor/fundamental.hxx
// Function: bool cxon::cbor::imp::read_floating_point_<cxon::cbor::format_traits, double, char const*, cxon::context<cxon::CBOR<cxon::cbor::format_traits>, cxon::napa::imp::var<cxon::node::recursion_guard, unsigned int>>>(double&, char const*&, char const*, cxon::context<cxon::CBOR<cxon::cbor::format_traits>, cxon::napa::imp::var<cxon::node::recursion_guard, unsigned int>>&)
inline bool read_floating_point_(T& t, II& i, II e, Cx& cx) {
                switch (bio::peek(i, e) & X::mjr) {
                    case X::svn: {
                        II const o = i;
                        switch (bio::get(i, e)) {
                            case X::fp16:
                                return  (bio ::get<2>(t, i, e)) ||
                                        (bio::rewind(i, o), cx/cbor::read_error::floating_point_invalid)
                                ;
                            case X::fp32:
                                return  (bio ::get<4>(t, i, e)) ||
                                        (bio::rewind(i, o), cx/cbor::read_error::floating_point_invalid)
                                ;
                            case X::fp64:
                                return  (bio ::get<8>(t, i, e)) ||
                                        (bio::rewind(i, o), cx/cbor::read_error::floating_point_invalid)
                                ;
                            default:
                                return  (bio::rewind(i, o), cx/cbor::read_error::floating_point_invalid);
                        }
                        break;
                    }
                    // from integral
                    case X::pint: {
                        unsigned_type_<T> u;
                        return read_unsigned_<X>(u, i, e, cx) && (t = T(u), true);
                    }
                    case X::nint: {
                        signed_type_<T> u;
                        return read_signed_<X>(u, i, e, cx) && (t = T(u), true);
                    }
                    default:
                        return cx/cbor::read_error::floating_point_invalid;
                }
            }

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rsi, %r14
movq (%rsi), %r12
cmpq %rdx, %r12
je 0x12c5e
movq %rdi, %r15
movzbl (%r12), %eax
andl $0xe0, %eax
je 0x12bf9
cmpl $0x20, %eax
je 0x12bda
cmpl $0xe0, %eax
jne 0x12c61
leaq 0x1(%r12), %rax
movq %rax, (%r14)
movzbl (%r12), %eax
cmpl $0xfb, %eax
je 0x12c3f
cmpl $0xfa, %eax
je 0x12c32
cmpl $0xf9, %eax
jne 0x12c5e
movq %r15, %rdi
movq %r14, %rsi
callq 0x12c77
jmp 0x12c4a
movq %rsp, %rdi
movq %r14, %rsi
movq %rbx, %rcx
callq 0x115d0
testb %al, %al
je 0x12c52
cvtsi2sdq (%rsp), %xmm0
movsd %xmm0, (%r15)
jmp 0x12c52
movq %rsp, %rdi
movq %r14, %rsi
movq %rbx, %rcx
callq 0x11378
testb %al, %al
je 0x12c52
movsd (%rsp), %xmm0
unpcklps 0x28419(%rip), %xmm0    # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x28421(%rip), %xmm0    # 0x3b040
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movsd %xmm1, (%r15)
jmp 0x12c52
movq %r15, %rdi
movq %r14, %rsi
callq 0x12cb4
jmp 0x12c4a
movq %r15, %rdi
movq %r14, %rsi
callq 0x12cf1
movl %eax, %ecx
movb $0x1, %al
testb %cl, %cl
je 0x12c5e
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %r12, (%r14)
pushq $0x5
popq %rsi
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x11218