// File: 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 %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movl $0xff, %edx
callq 0x309a0
movzbl %al, %eax
andl $0xe0, %eax
movl %eax, -0x44(%rbp)
je 0x36d80
jmp 0x36c1d
movl -0x44(%rbp), %eax
subl $0x20, %eax
je 0x36de1
jmp 0x36c2b
movl -0x44(%rbp), %eax
subl $0xe0, %eax
jne 0x36e21
jmp 0x36c3b
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
movl $0xff, %edx
callq 0x310f0
movzbl %al, %ecx
movl %ecx, -0x48(%rbp)
subb $-0x7, %al
je 0x36c83
jmp 0x36c64
movl -0x48(%rbp), %eax
subl $0xfa, %eax
je 0x36ccb
jmp 0x36c70
movl -0x48(%rbp), %eax
subl $0xfb, %eax
je 0x36d13
jmp 0x36d5b
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x36e40
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x49(%rbp)
jne 0x36cbe
movq -0x18(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x31170
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x31190
movb %al, -0x49(%rbp)
movb -0x49(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x36e34
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x36eb0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x4a(%rbp)
jne 0x36d06
movq -0x18(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x31170
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x31190
movb %al, -0x4a(%rbp)
movb -0x4a(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x36e34
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x36f20
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x4b(%rbp)
jne 0x36d4e
movq -0x18(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x31170
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x31190
movb %al, -0x4b(%rbp)
movb -0x4b(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x36e34
movq -0x18(%rbp), %rdi
movq -0x30(%rbp), %rsi
callq 0x31170
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x31190
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x36e34
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
leaq -0x38(%rbp), %rdi
callq 0x31740
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x4c(%rbp)
jne 0x36da3
jmp 0x36dd7
movaps 0x8a266(%rip), %xmm1    # 0xc1010
movq -0x38(%rbp), %xmm0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x8a265(%rip), %xmm1    # 0xc1020
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0x10(%rbp), %rax
movsd %xmm0, (%rax)
movb $0x1, %al
movb %al, -0x4c(%rbp)
movb -0x4c(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x36e34
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
leaq -0x40(%rbp), %rdi
callq 0x321c0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x4d(%rbp)
jne 0x36e04
jmp 0x36e17
cvtsi2sdq -0x40(%rbp), %xmm0
movq -0x10(%rbp), %rax
movsd %xmm0, (%rax)
movb $0x1, %al
movb %al, -0x4d(%rbp)
movb -0x4d(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x36e34
movq -0x28(%rbp), %rdi
movl $0x5, %esi
callq 0x31190
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x50, %rsp
popq %rbp
retq
nop