// File: /workspace/github_cpp_makefile_star2_O2/jkingan[P]ladyheather/heather.cpp
// Function: forward_filter(long)
struct PLOT_Q forward_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;
long f_count;
int j;

   // average the next "filter_count" queue entries
   avg = get_plot_q(point);
   filter_jd = avg.q_jd;
   filter_flags = avg.sat_flags;
   count = 1.0F;

   if(point == plot_q_in) return avg;

   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];
         }
      }
   }

   f_count = disp_filter_size();
   for(i=1; i<f_count; i++) {
      if(++point == plot_q_in) {  // at the end of the plot data
         break;
      }
      while(point >= plot_q_size) point -= plot_q_size;

      q = get_plot_q(point);
      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 %r13
pushq %r12
pushq %rbx
subq $0x1f8, %rsp            # imm = 0x1F8
movq %rsi, %r14
movq %rdi, %rbx
callq 0xf9c7
movsd 0x8(%rbx), %xmm0
movsd %xmm0, 0x318f78(%rip)   # 0x32a250
movzwl (%rbx), %eax
movw %ax, 0x318f76(%rip)     # 0x32a258
cmpq %r14, 0x1f403f(%rip)    # 0x205328
jne 0x11300
movq %rbx, %rax
addq $0x1f8, %rsp            # imm = 0x1F8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl 0x1f4171(%rip), %r13d   # 0x205478
cmpl $0x50, %r13d
jne 0x11338
xorl %eax, %eax
cmpq $0xe, %rax
je 0x11333
cmpq $0x14, %rax
je 0x11338
movsd 0x10(%rbx,%rax,8), %xmm0
movsd %xmm0, -0xd0(%rbp,%rax,8)
movsd %xmm0, -0x170(%rbp,%rax,8)
incq %rax
jmp 0x1130f
pushq $0x1
popq %r12
callq 0x10e43
movq %rax, %r15
movsd 0xe1d24(%rip), %xmm5    # 0xf3070
cmpq %r15, %r12
jge 0x11413
leaq 0x1(%r14), %rax
cmpq 0x1f3fc8(%rip), %rax    # 0x205328
je 0x11413
movsd %xmm5, -0x30(%rbp)
movq 0x1f3fae(%rip), %rax    # 0x205320
addq %rax, %r14
incq %r14
subq %rax, %r14
cmpq %rax, %r14
jge 0x11378
leaq -0x220(%rbp), %rdi
movq %r14, %rsi
callq 0xf9c7
movzwl -0x220(%rbp), %eax
orw %ax, 0x318ebb(%rip)     # 0x32a258
movl 0x1f40d4(%rip), %r13d   # 0x205478
xorl %eax, %eax
movsd -0x30(%rbp), %xmm5
cmpq $0xe, %rax
je 0x113fe
cmpq $0x14, %rax
je 0x11403
movsd -0x210(%rbp,%rax,8), %xmm0
cmpl $0x50, %r13d
jne 0x113f2
ucomisd -0x170(%rbp,%rax,8), %xmm0
jbe 0x113da
movsd %xmm0, -0x170(%rbp,%rax,8)
movsd -0xd0(%rbp,%rax,8), %xmm1
ucomisd %xmm0, %xmm1
jbe 0x113f2
movsd %xmm0, -0xd0(%rbp,%rax,8)
addsd 0x10(%rbx,%rax,8), %xmm0
movsd %xmm0, 0x10(%rbx,%rax,8)
incq %rax
jmp 0x113ab
addsd 0xe1c65(%rip), %xmm5    # 0xf3070
incq %r12
jmp 0x1134c
xorl %eax, %eax
movapd 0xe1d73(%rip), %xmm0    # 0xf3190
cmpq $0xe, %rax
je 0x11473
cmpq $0x14, %rax
je 0x112eb
cmpl $0x50, %r13d
jne 0x11463
movsd -0x170(%rbp,%rax,8), %xmm1
movapd %xmm1, %xmm3
andpd %xmm0, %xmm3
movsd -0xd0(%rbp,%rax,8), %xmm2
movapd %xmm2, %xmm4
andpd %xmm0, %xmm4
ucomisd %xmm4, %xmm3
jae 0x1146d
movsd %xmm2, 0x10(%rbx,%rax,8)
jmp 0x11473
movsd 0x10(%rbx,%rax,8), %xmm1
divsd %xmm5, %xmm1
movsd %xmm1, 0x10(%rbx,%rax,8)
incq %rax
jmp 0x1141d