// File: /workspace/github_cpp_makefile_star2_O1/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 0x12a8b(%rip), %xmm0    # 0x17010
cmpl %edx, %r8d
jge 0x4722
movl %ecx, %r14d
cmpl %esi, %ecx
jge 0x4722
movl %r8d, %ebx
movl %r8d, %eax
orl %r14d, %eax
js 0x4722
imull %ebx, %esi
addl %r14d, %esi
xorl %r15d, %r15d
subb 0x18c3c(%rip), %r15b    # 0x1d1f4
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 0x12a28(%rip), %xmm3    # 0x17004
cmpb $0x1, 0x18c12(%rip)     # 0x1d1f5
jne 0x4642
movzbl %al, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movzbl %r12b, %eax
cvtsi2sd %eax, %xmm1
mulsd 0x13741(%rip), %xmm1    # 0x17d40
mulsd 0x13741(%rip), %xmm0    # 0x17d48
movzbl %r15b, %eax
cvtsi2sd %eax, %xmm2
addsd %xmm1, %xmm0
mulsd 0x13735(%rip), %xmm2    # 0x17d50
addsd %xmm0, %xmm2
xorps %xmm0, %xmm0
cvtss2sd %xmm3, %xmm0
mulsd %xmm2, %xmm0
cvtsd2ss %xmm0, %xmm0
xorps %xmm1, %xmm1
cvtsi2ssl 0x18ac7(%rip), %xmm1 # 0x1d100
subss %xmm1, %xmm0
jmp 0x4722
movzbl %al, %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
divss 0x129b0(%rip), %xmm0    # 0x17004
movss 0x129b8(%rip), %xmm1    # 0x17014
movss %xmm3, -0x2c(%rbp)
callq 0x1180
movss %xmm0, -0x28(%rbp)
movzbl %r12b, %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
divss 0x12986(%rip), %xmm0    # 0x17004
movss 0x1298e(%rip), %xmm1    # 0x17014
callq 0x1180
movss %xmm0, -0x24(%rbp)
movzbl %r15b, %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
divss 0x12961(%rip), %xmm0    # 0x17004
movss 0x12969(%rip), %xmm1    # 0x17014
callq 0x1180
xorps %xmm1, %xmm1
cvtss2sd -0x28(%rbp), %xmm1
cvtss2sd -0x24(%rbp), %xmm2
mulsd 0x1367b(%rip), %xmm2    # 0x17d40
mulsd 0x1367b(%rip), %xmm1    # 0x17d48
cvtss2sd %xmm0, %xmm0
mulsd 0x13677(%rip), %xmm0    # 0x17d50
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 0x12ca1(%rip), %rcx     # 0x173a0
movsbl (%rax,%rcx), %eax
xorps %xmm0, %xmm0
cvtsi2ss %eax, %xmm0
cvtsd2ss %xmm1, %xmm1
addss 0x128f6(%rip), %xmm0    # 0x1700c
mulss 0x128fa(%rip), %xmm0    # 0x17018
addss %xmm1, %xmm0
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq