// File: /workspace/github_cpp_makefile_star2_O1/jkingan[P]ladyheather/heather.cpp
// Function: back_filter(long)
struct PLOT_Q back_filter(long point)
{
struct PLOT_Q avg;
struct PLOT_Q q;
DATA_SIZE count;
DATA_SIZE max[NUM_PLOTS+DERIVED_PLOTS];
DATA_SIZE min[NUM_PLOTS+DERIVED_PLOTS];
long i;
int j;

   // average the previous "filter_count" queue entries

   if(plot_q_count < filter_count) i = plot_q_count;
   else                            i = disp_filter_size();

   point -= i;
   if(point < 0) point += plot_q_size;
//   if(point >= plot_q_count) point = 0;

   avg = get_plot_q(point);
   filter_jd = avg.q_jd;
   filter_flags = avg.sat_flags;
   count = 1.0F;

   if(disp_filter_type == 'P') {  // min/max filter
      for(j=0; j<NUM_PLOTS+DERIVED_PLOTS; j++) {
         if(j != FFT) {
            max[j] = min[j] = avg.data[j];
         }
      }
   }

   while(--i > 0) {
      ++point;
      while(point >= plot_q_size) point -= plot_q_size;

      q = get_plot_q(point);
      filter_jd = q.q_jd;
      filter_flags |= q.sat_flags;
      count += (DATA_SIZE) 1.0;

      for(j=0; j<NUM_PLOTS+DERIVED_PLOTS; j++) {
         if(j != FFT) {
            if(disp_filter_type == 'P') {
               if(q.data[j] > max[j]) max[j] = q.data[j];
               if(q.data[j] < min[j]) min[j] = q.data[j];
            }

            avg.data[j] += q.data[j];
         }
      }
   }

   for(j=0; j<NUM_PLOTS+DERIVED_PLOTS; j++) {  // derived_plots OK
      if(j != FFT) {
         if(disp_filter_type == 'P') {
            if(fabs(max[j]) >= fabs(min[j])) avg.data[j] = max[j];
            else                             avg.data[j] = min[j];
         }
         else {
            avg.data[j] /= count;
         }
      }
   }

   return avg;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x200, %rsp            # imm = 0x200
movq %rsi, %r12
movq %rdi, %rbx
movq 0x209cc6(%rip), %r14    # 0x21b338
cmpq 0x209df7(%rip), %r14    # 0x21b470
jl 0x11683
callq 0x115ca
movq %rax, %r14
subq %r14, %r12
movq %r12, %r15
sarq $0x3f, %r15
andq 0x209c8c(%rip), %r15    # 0x21b320
addq %r12, %r15
movq %rbx, %rdi
movq %r15, %rsi
callq 0x10141
movsd 0x8(%rbx), %xmm0
movsd %xmm0, 0x32eba1(%rip)   # 0x340250
movzwl (%rbx), %eax
movw %ax, 0x32eb9f(%rip)     # 0x340258
cmpl $0x50, 0x209db8(%rip)   # 0x21b478
jne 0x116eb
xorl %eax, %eax
cmpq $0xe, %rax
je 0x116e2
movsd 0x10(%rbx,%rax,8), %xmm0
movsd %xmm0, -0x180(%rbp,%rax,8)
movsd %xmm0, -0x220(%rbp,%rax,8)
incq %rax
cmpq $0x14, %rax
jne 0x116c4
movsd 0xf797d(%rip), %xmm5    # 0x109070
cmpq $0x2, %r14
jl 0x117cf
leaq -0xd8(%rbp), %r12
movsd %xmm5, -0x28(%rbp)
movq 0x209c10(%rip), %rax    # 0x21b320
addq %rax, %r15
incq %r15
subq %rax, %r15
cmpq %rax, %r15
jge 0x11716
movq %r12, %rdi
movq %r15, %rsi
callq 0x10141
movzwl -0xd8(%rbp), %eax
orw %ax, 0x32eb21(%rip)     # 0x340258
movsd -0xd0(%rbp), %xmm0
movsd %xmm0, 0x32eb09(%rip)   # 0x340250
movl 0x209d2b(%rip), %eax    # 0x21b478
xorl %ecx, %ecx
movsd -0x28(%rbp), %xmm5
cmpq $0x70, %rcx
je 0x117a9
cmpl $0x50, %eax
jne 0x11794
movsd -0xc8(%rbp,%rcx), %xmm0
ucomisd -0x220(%rbp,%rcx), %xmm0
jbe 0x1177c
movsd %xmm0, -0x220(%rbp,%rcx)
movsd -0x180(%rbp,%rcx), %xmm1
ucomisd %xmm0, %xmm1
jbe 0x11794
movsd %xmm0, -0x180(%rbp,%rcx)
movsd -0xc8(%rbp,%rcx), %xmm0
addsd 0x10(%rbx,%rcx), %xmm0
movsd %xmm0, 0x10(%rbx,%rcx)
addq $0x8, %rcx
cmpq $0xa0, %rcx
jne 0x11754
leaq -0x1(%r14), %rax
addsd 0xf78ae(%rip), %xmm5    # 0x109070
cmpq $0x2, %r14
movq %rax, %r14
jg 0x11704
movl 0x209ca3(%rip), %eax    # 0x21b478
xorl %ecx, %ecx
movapd 0xf79a1(%rip), %xmm0    # 0x109180
cmpq $0xe, %rcx
je 0x1182a
cmpl $0x50, %eax
jne 0x1181a
movsd -0x220(%rbp,%rcx,8), %xmm1
movapd %xmm1, %xmm3
andpd %xmm0, %xmm3
movsd -0x180(%rbp,%rcx,8), %xmm2
movapd %xmm2, %xmm4
andpd %xmm0, %xmm4
ucomisd %xmm4, %xmm3
jae 0x11824
movsd %xmm2, 0x10(%rbx,%rcx,8)
jmp 0x1182a
movsd 0x10(%rbx,%rcx,8), %xmm1
divsd %xmm5, %xmm1
movsd %xmm1, 0x10(%rbx,%rcx,8)
incq %rcx
cmpq $0x14, %rcx
jne 0x117df
movq %rbx, %rax
addq $0x200, %rsp            # imm = 0x200
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq