// File: FreeSlave[P]vhlt/hlrad/loadtextures.cpp
// Function: GetLight(dface_t*, int const*, double, double, float (&) [3])
static void GetLight (dface_t *face, const int texsize[2], double x, double y, vec3_t &light)
{
	int ix, iy;
	double dx, dy;
	ix = (int)floor (x);
	iy = (int)floor (y);
	dx = x - ix;
	dx = qmax (0, qmin (dx, 1));
	dy = y - iy;
	dy = qmax (0, qmin (dy, 1));
	
	// do bilinear interpolation
	vec3_t light00, light10, light01, light11;
	GetLightInt (face, texsize, ix, iy, light00);
	GetLightInt (face, texsize, ix + 1, iy, light10);
	GetLightInt (face, texsize, ix, iy + 1, light01);
	GetLightInt (face, texsize, ix + 1, iy + 1, light11);
	vec3_t light0, light1;
	VectorScale (light00, 1 - dy, light0);
	VectorMA (light0, dy, light01, light0);
	VectorScale (light10, 1 - dy, light1);
	VectorMA (light1, dy, light11, light1);
	VectorScale (light0, 1 - dx, light);
	VectorMA (light, dx, light1, light);
}

// Assembly:
subq $0xb8, %rsp
movq %rdi, 0xb0(%rsp)
movq %rsi, 0xa8(%rsp)
movsd %xmm0, 0xa0(%rsp)
movsd %xmm1, 0x98(%rsp)
movq %rdx, 0x90(%rsp)
movsd 0xa0(%rsp), %xmm0
callq 0x45a0
cvttsd2si %xmm0, %eax
movl %eax, 0x8c(%rsp)
movsd 0x98(%rsp), %xmm0
callq 0x45a0
cvttsd2si %xmm0, %eax
movl %eax, 0x88(%rsp)
movsd 0xa0(%rsp), %xmm0
cvtsi2sdl 0x8c(%rsp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x80(%rsp)
movsd 0x24fbe(%rip), %xmm0    # 0x6d1e8
ucomisd 0x80(%rsp), %xmm0
jbe 0x48246
movsd 0x80(%rsp), %xmm0
movsd %xmm0, 0x28(%rsp)
jmp 0x48256
movsd 0x24f9a(%rip), %xmm0    # 0x6d1e8
movsd %xmm0, 0x28(%rsp)
jmp 0x48256
movsd 0x28(%rsp), %xmm1
xorps %xmm0, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x48270
xorps %xmm0, %xmm0
movsd %xmm0, 0x20(%rsp)
jmp 0x482b0
movsd 0x24f70(%rip), %xmm0    # 0x6d1e8
ucomisd 0x80(%rsp), %xmm0
jbe 0x48294
movsd 0x80(%rsp), %xmm0
movsd %xmm0, 0x18(%rsp)
jmp 0x482a4
movsd 0x24f4c(%rip), %xmm0    # 0x6d1e8
movsd %xmm0, 0x18(%rsp)
jmp 0x482a4
movsd 0x18(%rsp), %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x20(%rsp), %xmm0
movsd %xmm0, 0x80(%rsp)
movsd 0x98(%rsp), %xmm0
cvtsi2sdl 0x88(%rsp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x78(%rsp)
movsd 0x24f05(%rip), %xmm0    # 0x6d1e8
ucomisd 0x78(%rsp), %xmm0
jbe 0x482f9
movsd 0x78(%rsp), %xmm0
movsd %xmm0, 0x10(%rsp)
jmp 0x48309
movsd 0x24ee7(%rip), %xmm0    # 0x6d1e8
movsd %xmm0, 0x10(%rsp)
jmp 0x48309
movsd 0x10(%rsp), %xmm1
xorps %xmm0, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x48323
xorps %xmm0, %xmm0
movsd %xmm0, 0x8(%rsp)
jmp 0x4835a
movsd 0x24ebd(%rip), %xmm0    # 0x6d1e8
ucomisd 0x78(%rsp), %xmm0
jbe 0x48340
movsd 0x78(%rsp), %xmm0
movsd %xmm0, (%rsp)
jmp 0x4834f
movsd 0x24ea0(%rip), %xmm0    # 0x6d1e8
movsd %xmm0, (%rsp)
jmp 0x4834f
movsd (%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
movsd 0x8(%rsp), %xmm0
movsd %xmm0, 0x78(%rsp)
movq 0xb0(%rsp), %rdi
movq 0xa8(%rsp), %rsi
movl 0x8c(%rsp), %edx
movl 0x88(%rsp), %ecx
leaq 0x6c(%rsp), %r8
callq 0x491e0
movq 0xb0(%rsp), %rdi
movq 0xa8(%rsp), %rsi
movl 0x8c(%rsp), %edx
addl $0x1, %edx
movl 0x88(%rsp), %ecx
leaq 0x60(%rsp), %r8
callq 0x491e0
movq 0xb0(%rsp), %rdi
movq 0xa8(%rsp), %rsi
movl 0x8c(%rsp), %edx
movl 0x88(%rsp), %ecx
addl $0x1, %ecx
leaq 0x54(%rsp), %r8
callq 0x491e0
movq 0xb0(%rsp), %rdi
movq 0xa8(%rsp), %rsi
movl 0x8c(%rsp), %edx
addl $0x1, %edx
movl 0x88(%rsp), %ecx
addl $0x1, %ecx
leaq 0x48(%rsp), %r8
callq 0x491e0
movss 0x6c(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24dc4(%rip), %xmm1    # 0x6d1e8
subsd 0x78(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x3c(%rsp)
movss 0x70(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24d9e(%rip), %xmm1    # 0x6d1e8
subsd 0x78(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x40(%rsp)
movss 0x74(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24d78(%rip), %xmm1    # 0x6d1e8
subsd 0x78(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x44(%rsp)
movss 0x3c(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x78(%rsp), %xmm0
movss 0x54(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x3c(%rsp)
movss 0x40(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x78(%rsp), %xmm0
movss 0x58(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x40(%rsp)
movss 0x44(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x78(%rsp), %xmm0
movss 0x5c(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x44(%rsp)
movss 0x60(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24cce(%rip), %xmm1    # 0x6d1e8
subsd 0x78(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x30(%rsp)
movss 0x64(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24ca8(%rip), %xmm1    # 0x6d1e8
subsd 0x78(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x34(%rsp)
movss 0x68(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24c82(%rip), %xmm1    # 0x6d1e8
subsd 0x78(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x38(%rsp)
movss 0x30(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x78(%rsp), %xmm0
movss 0x48(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x30(%rsp)
movss 0x34(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x78(%rsp), %xmm0
movss 0x4c(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x34(%rsp)
movss 0x38(%rsp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x78(%rsp), %xmm0
movss 0x50(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x38(%rsp)
movss 0x3c(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24bd8(%rip), %xmm1    # 0x6d1e8
subsd 0x80(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x90(%rsp), %rax
movss %xmm0, (%rax)
movss 0x40(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24ba9(%rip), %xmm1    # 0x6d1e8
subsd 0x80(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x90(%rsp), %rax
movss %xmm0, 0x4(%rax)
movss 0x44(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x24b79(%rip), %xmm1    # 0x6d1e8
subsd 0x80(%rsp), %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x90(%rsp), %rax
movss %xmm0, 0x8(%rax)
movq 0x90(%rsp), %rax
movss (%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x80(%rsp), %xmm0
movss 0x30(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x90(%rsp), %rax
movss %xmm0, (%rax)
movq 0x90(%rsp), %rax
movss 0x4(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x80(%rsp), %xmm0
movss 0x34(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x90(%rsp), %rax
movss %xmm0, 0x4(%rax)
movq 0x90(%rsp), %rax
movss 0x8(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x80(%rsp), %xmm0
movss 0x38(%rsp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movq 0x90(%rsp), %rax
movss %xmm0, 0x8(%rax)
addq $0xb8, %rsp
retq
nopw (%rax,%rax)