// File: devernay[P]vlpovutils/./vlpov.hpp
// Function: VLPovImage<double>::linear_at(double, double) const
const T linear_at(double fx, double fy) const {
        const double nfx = fx<0?0:(fx>_width-1?_width-1:fx);
        const double nfy = fy<0?0:(fy>_height-1?_height-1:fy);
        const unsigned int x = (unsigned int)nfx;
        const unsigned int y = (unsigned int)nfy;
        const double dx = nfx - x;
        const double dy = nfy - y;
        const unsigned int nx = dx>0?x+1:x;
        const unsigned int ny = dy>0?y+1:y;
        const T Icc = (*this)(x,y);
        const T Inc = (*this)(nx,y);
        const T Icn = (*this)(x,ny);
        const T Inn = (*this)(nx,ny);
        return Icc + dx*(Inc-Icc + dy*(Icc+Inn-Icn-Inc)) + dy*(Icn-Icc);
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movsd %xmm0, -0x10(%rbp)
movsd %xmm1, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x70(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x10(%rbp), %xmm0
jbe 0xa055
xorps %xmm0, %xmm0
movsd %xmm0, -0x78(%rbp)
jmp 0xa095
movq -0x70(%rbp), %rax
movsd -0x10(%rbp), %xmm0
movl (%rax), %eax
subl $0x1, %eax
cvtsi2sd %eax, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xa081
movq -0x70(%rbp), %rax
movl (%rax), %eax
subl $0x1, %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x80(%rbp)
jmp 0xa08b
movsd -0x10(%rbp), %xmm0
movsd %xmm0, -0x80(%rbp)
movsd -0x80(%rbp), %xmm0
movsd %xmm0, -0x78(%rbp)
movsd -0x78(%rbp), %xmm0
movsd %xmm0, -0x20(%rbp)
xorps %xmm0, %xmm0
ucomisd -0x18(%rbp), %xmm0
jbe 0xa0b6
xorps %xmm0, %xmm0
movsd %xmm0, -0x88(%rbp)
jmp 0xa104
movq -0x70(%rbp), %rax
movsd -0x18(%rbp), %xmm0
movl 0x4(%rax), %eax
subl $0x1, %eax
cvtsi2sd %eax, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xa0e7
movq -0x70(%rbp), %rax
movl 0x4(%rax), %eax
subl $0x1, %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0x90(%rbp)
jmp 0xa0f4
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x90(%rbp)
movsd -0x90(%rbp), %xmm0
movsd %xmm0, -0x88(%rbp)
movsd -0x88(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
cvttsd2si -0x20(%rbp), %rax
movl %eax, -0x2c(%rbp)
cvttsd2si -0x28(%rbp), %rax
movl %eax, -0x30(%rbp)
movsd -0x20(%rbp), %xmm0
movl -0x2c(%rbp), %eax
cvtsi2sd %rax, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movsd -0x28(%rbp), %xmm0
movl -0x30(%rbp), %eax
cvtsi2sd %rax, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x40(%rbp)
movsd -0x38(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xa16b
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0xa174
movl -0x2c(%rbp), %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
movl %eax, -0x44(%rbp)
movsd -0x40(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0xa199
movl -0x30(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x98(%rbp)
jmp 0xa1a2
movl -0x30(%rbp), %eax
movl %eax, -0x98(%rbp)
movq -0x70(%rbp), %rdi
movl -0x98(%rbp), %eax
movl %eax, -0x48(%rbp)
movl -0x2c(%rbp), %esi
movl -0x30(%rbp), %edx
callq 0x7860
movq -0x70(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x50(%rbp)
movl -0x44(%rbp), %esi
movl -0x30(%rbp), %edx
callq 0x7860
movq -0x70(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x58(%rbp)
movl -0x2c(%rbp), %esi
movl -0x48(%rbp), %edx
callq 0x7860
movq -0x70(%rbp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, -0x60(%rbp)
movl -0x44(%rbp), %esi
movl -0x48(%rbp), %edx
callq 0x7860
movsd (%rax), %xmm0
movsd %xmm0, -0x68(%rbp)
movsd -0x50(%rbp), %xmm0
movsd -0x38(%rbp), %xmm1
movsd -0x58(%rbp), %xmm3
subsd -0x50(%rbp), %xmm3
movsd -0x40(%rbp), %xmm2
movsd -0x50(%rbp), %xmm4
addsd -0x68(%rbp), %xmm4
subsd -0x60(%rbp), %xmm4
subsd -0x58(%rbp), %xmm4
mulsd %xmm4, %xmm2
addsd %xmm3, %xmm2
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd -0x40(%rbp), %xmm0
movsd -0x60(%rbp), %xmm2
subsd -0x50(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
addq $0xa0, %rsp
popq %rbp
retq
nopl (%rax,%rax)