// File: /workspace/github_cpp_makefile_star2_O3/lunasorcery[P]brailify/main.cpp
// Function: getPixel(rgba8888_t*, int, int, int, int)
float getPixel(rgba8888_t* data, int w, int h, int x, int y)
{
	if (x < 0 || y < 0 || x >= w || y >= h) {
		return -1;
	}

	rgba8888_t const pixel = data[(y*w)+x];

	uint8_t const r8 = flagInvert ? (255-pixel.r) : pixel.r;
	uint8_t const g8 = flagInvert ? (255-pixel.g) : pixel.g;
	uint8_t const b8 = flagInvert ? (255-pixel.b) : pixel.b;

	float const a = pixel.a / 255.f;

	if (useThreshold) {
		float const luma = ((0.2126 * r8) + (0.7152 * g8) + (0.0722 * b8)) * a;
		return luma - threshold;
	} else {
		float const r = powf(r8 / 255.f, kgamma);
		float const g = powf(g8 / 255.f, kgamma);
		float const b = powf(b8 / 255.f, kgamma);
		float const luma = ((0.2126 * r) + (0.7152 * g) + (0.0722 * b)) * a;
		float const ditherThreshold = (ditherTable[(y % ditherHeight) * ditherWidth + (x % ditherWidth)] + .5f) * ditherScale;
		return luma - ditherThreshold;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movss 0x119d8(%rip), %xmm0    # 0x16010
cmpl %edx, %r8d
jge 0x47d5
movl %ecx, %r14d
cmpl %esi, %ecx
jge 0x47d5
movl %r8d, %ebx
movl %r8d, %eax
orl %r14d, %eax
js 0x47d5
imull %ebx, %esi
addl %r14d, %esi
xorl %r15d, %r15d
subb 0x17b69(%rip), %r15b    # 0x1c1d4
movb (%rdi,%rsi,4), %al
xorb %r15b, %al
movb 0x1(%rdi,%rsi,4), %r12b
xorb %r15b, %r12b
xorb 0x2(%rdi,%rsi,4), %r15b
movzbl 0x3(%rdi,%rsi,4), %ecx
cvtsi2ss %ecx, %xmm3
divss 0x11975(%rip), %xmm3    # 0x16004
cmpb $0x1, 0x17b3f(%rip)     # 0x1c1d5
jne 0x46f5
movzbl %al, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movzbl %r12b, %eax
cvtsi2sd %eax, %xmm1
mulsd 0x1268e(%rip), %xmm1    # 0x16d40
mulsd 0x1268e(%rip), %xmm0    # 0x16d48
movzbl %r15b, %eax
cvtsi2sd %eax, %xmm2
addsd %xmm1, %xmm0
mulsd 0x12682(%rip), %xmm2    # 0x16d50
addsd %xmm0, %xmm2
xorps %xmm0, %xmm0
cvtss2sd %xmm3, %xmm0
mulsd %xmm2, %xmm0
cvtsd2ss %xmm0, %xmm0
xorps %xmm1, %xmm1
cvtsi2ssl 0x17a14(%rip), %xmm1 # 0x1c100
subss %xmm1, %xmm0
jmp 0x47d5
movzbl %al, %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
divss 0x118fd(%rip), %xmm0    # 0x16004
movss 0x11905(%rip), %xmm1    # 0x16014
movss %xmm3, -0x2c(%rbp)
callq 0x1180
movss %xmm0, -0x28(%rbp)
movzbl %r12b, %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
divss 0x118d3(%rip), %xmm0    # 0x16004
movss 0x118db(%rip), %xmm1    # 0x16014
callq 0x1180
movss %xmm0, -0x24(%rbp)
movzbl %r15b, %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
divss 0x118ae(%rip), %xmm0    # 0x16004
movss 0x118b6(%rip), %xmm1    # 0x16014
callq 0x1180
xorps %xmm1, %xmm1
cvtss2sd -0x28(%rbp), %xmm1
cvtss2sd -0x24(%rbp), %xmm2
mulsd 0x125c8(%rip), %xmm2    # 0x16d40
mulsd 0x125c8(%rip), %xmm1    # 0x16d48
cvtss2sd %xmm0, %xmm0
mulsd 0x125c4(%rip), %xmm0    # 0x16d50
addsd %xmm2, %xmm1
addsd %xmm1, %xmm0
xorps %xmm1, %xmm1
cvtss2sd -0x2c(%rbp), %xmm1
mulsd %xmm0, %xmm1
andl $0x7, %ebx
andl $0x7, %r14d
leal (%r14,%rbx,8), %eax
leaq 0x11bee(%rip), %rcx     # 0x163a0
movsbl (%rax,%rcx), %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
cvtsd2ss %xmm1, %xmm1
addss 0x11843(%rip), %xmm0    # 0x1600c
mulss 0x11847(%rip), %xmm0    # 0x16018
addss %xmm1, %xmm0
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq