// File: /workspace/github_c_makefile_star2_O2/ggerganov[P]font-rasterizer/./stb_truetype.h
// Function: stbtt__v_prefilter
static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width)
{
   unsigned char buffer[STBTT_MAX_OVERSAMPLE];
   int safe_h = h - kernel_width;
   int j;
   STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze
   for (j=0; j < w; ++j) {
      int i;
      unsigned int total;
      STBTT_memset(buffer, 0, kernel_width);

      total = 0;

      // make kernel_width a constant in common cases so compiler can optimize out the divide
      switch (kernel_width) {
         case 2:
            for (i=0; i <= safe_h; ++i) {
               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
               pixels[i*stride_in_bytes] = (unsigned char) (total / 2);
            }
            break;
         case 3:
            for (i=0; i <= safe_h; ++i) {
               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
               pixels[i*stride_in_bytes] = (unsigned char) (total / 3);
            }
            break;
         case 4:
            for (i=0; i <= safe_h; ++i) {
               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
               pixels[i*stride_in_bytes] = (unsigned char) (total / 4);
            }
            break;
         case 5:
            for (i=0; i <= safe_h; ++i) {
               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
               pixels[i*stride_in_bytes] = (unsigned char) (total / 5);
            }
            break;
         default:
            for (i=0; i <= safe_h; ++i) {
               total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
               buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
               pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
            }
            break;
      }

      for (; i < h; ++i) {
         STBTT_assert(pixels[i*stride_in_bytes] == 0);
         total -= buffer[i & STBTT__OVER_MASK];
         pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
      }

      pixels += 1;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movl %r8d, %ebx
movslq %edx, %r12
leaq -0x30(%rbp), %rax
andq $0x0, (%rax)
subl %r8d, %edx
movl %r8d, %r10d
movslq %edx, %r14
movslq %ecx, %r15
xorl %eax, %eax
testl %esi, %esi
cmovlel %eax, %esi
movl %esi, -0x3c(%rbp)
leal -0x2(%rbx), %r11d
movq %r10, -0x38(%rbp)
cmpl -0x3c(%rbp), %eax
je 0x6a35
movl %eax, -0x40(%rbp)
movq %rdi, -0x48(%rbp)
leaq -0x30(%rbp), %rdi
xorl %esi, %esi
movq %r10, %rdx
movq %r11, %r13
callq 0x10d0
movq %r13, %r11
cmpl $0x3, %r11d
ja 0x69b3
leaq 0x57e9(%rip), %rcx      # 0xc07c
movslq (%rcx,%r11,4), %rax
addq %rcx, %rax
movq -0x48(%rbp), %rdi
pushq $0x3
popq %r13
jmpq *%rax
xorl %esi, %esi
movq %rdi, %rax
xorl %ecx, %ecx
movq -0x38(%rbp), %r10
cmpq %r14, %rsi
jg 0x69f7
movzbl (%rax), %edx
movl %esi, %r8d
andl $0x7, %r8d
movzbl -0x30(%rbp,%r8), %r9d
leal 0x2(%rsi), %r8d
andl $0x7, %r8d
movb %dl, -0x30(%rbp,%r8)
subl %r9d, %edx
addl %edx, %ecx
movl %ecx, %edx
shrl %edx
movb %dl, (%rax)
incq %rsi
addq %r15, %rax
jmp 0x68af
xorl %esi, %esi
movq %rdi, %rax
xorl %ecx, %ecx
movq -0x38(%rbp), %r10
cmpq %r14, %rsi
jg 0x69f7
movzbl (%rax), %edx
movl %esi, %r9d
andl $0x7, %r9d
movzbl -0x30(%rbp,%r9), %r8d
xorq $0x4, %r9
movb %dl, -0x30(%rbp,%r9)
subl %r8d, %edx
addl %edx, %ecx
movl %ecx, %edx
shrl $0x2, %edx
movb %dl, (%rax)
incq %rsi
addq %r15, %rax
jmp 0x68f3
xorl %esi, %esi
movq %rdi, %r9
xorl %ecx, %ecx
movq -0x38(%rbp), %r10
pushq $0x5
popq %r13
cmpq %r14, %rsi
jg 0x69f7
movzbl (%r9), %eax
movl %esi, %edx
andl $0x7, %edx
movzbl -0x30(%rbp,%rdx), %edx
leal 0x5(%rsi), %r8d
andl $0x7, %r8d
movb %al, -0x30(%rbp,%r8)
subl %edx, %eax
addl %eax, %ecx
movl %ecx, %eax
xorl %edx, %edx
divl %r13d
movb %al, (%r9)
incq %rsi
addq %r15, %r9
jmp 0x6938
xorl %esi, %esi
movq %rdi, %r9
xorl %ecx, %ecx
movq -0x38(%rbp), %r10
cmpq %r14, %rsi
jg 0x69f7
movzbl (%r9), %eax
movl %esi, %edx
andl $0x7, %edx
movzbl -0x30(%rbp,%rdx), %edx
leal 0x3(%rsi), %r8d
andl $0x7, %r8d
movb %al, -0x30(%rbp,%r8)
subl %edx, %eax
addl %eax, %ecx
movl %ecx, %eax
xorl %edx, %edx
divl %r13d
movb %al, (%r9)
incq %rsi
addq %r15, %r9
jmp 0x697d
xorl %esi, %esi
movq -0x48(%rbp), %rdi
movq %rdi, %r9
xorl %ecx, %ecx
movq -0x38(%rbp), %r10
cmpq %r14, %rsi
jg 0x69f7
movzbl (%r9), %eax
movl %esi, %edx
andl $0x7, %edx
movzbl -0x30(%rbp,%rdx), %edx
leal (%r10,%rsi), %r8d
andl $0x7, %r8d
movb %al, -0x30(%rbp,%r8)
subl %edx, %eax
addl %eax, %ecx
movl %ecx, %eax
xorl %edx, %edx
divl %ebx
movb %al, (%r9)
incq %rsi
addq %r15, %r9
jmp 0x69c2
movl %esi, %r8d
imulq %r15, %rsi
addq %rdi, %rsi
cmpq %r12, %r8
jge 0x6a28
cmpb $0x0, (%rsi)
jne 0x6a44
movl %r8d, %eax
andl $0x7, %eax
movzbl -0x30(%rbp,%rax), %eax
subl %eax, %ecx
movl %ecx, %eax
xorl %edx, %edx
divl %ebx
movb %al, (%rsi)
incq %r8
addq %r15, %rsi
jmp 0x6a01
incq %rdi
movl -0x40(%rbp), %eax
incl %eax
jmp 0x685e
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x7b12(%rip), %rdi      # 0xe55d
leaq 0x7216(%rip), %rsi      # 0xdc68
leaq 0x7b23(%rip), %rcx      # 0xe57c
movl $0xf6a, %edx            # imm = 0xF6A
callq 0x10c0