// File: /workspace/github_cpp_makefile_star2_O2/jkingan[P]ladyheather/heathmsc.cpp
// Function: incr_hdev(unsigned char, BIN*)
void incr_hdev(u08 id, struct BIN *bins)
{
S32 b;
S32 t1,t2,t3;
struct BIN *B;
double v;
int vis_bins;
long adev_q_count;
double adev_q_overflow;

   if     (id == PPS_HDEV) { adev_q_count = pps_adev_q_count; adev_q_overflow = pps_adev_q_overflow; }
   else if(id == OSC_HDEV) { adev_q_count = osc_adev_q_count; adev_q_overflow = osc_adev_q_overflow; }
   else if(id == CHC_HDEV) { adev_q_count = chc_adev_q_count; adev_q_overflow = chc_adev_q_overflow; }
   else if(id == CHD_HDEV) { adev_q_count = chd_adev_q_count; adev_q_overflow = chd_adev_q_overflow; }
   else return;

   vis_bins = 0;

   for(b=0; b<n_bins; b++) {
      B = &bins[b];
      if(B->n < 0) break;

      t1 = B->m;
      t2 = t1 + t1;
      t3 = t1 + t1 + t1;

      if((B->n+t3) >= adev_q_count) break;

      while((B->n+t3) < adev_q_count) {
         v =  get_adev_point(id, B->n+t3);
         v -= get_adev_point(id, B->n+t2) * 3.0;
         v += get_adev_point(id, B->n+t1) * 3.0;
         v -= get_adev_point(id, B->n);

         B->sum += (v * v);
         B->n++;
         adev_mouse();
      }

      if(B->n >= min_points_per_bin) {
         if(B->n && B->tau) {
            B->value = sqrt(B->sum / (6.0 * ((double) B->n + adev_q_overflow))) / B->tau;
            ++vis_bins;
         }
      }
   }

   if(vis_bins > max_adev_rows) max_adev_rows = vis_bins;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rsi, %r15
cmpl $0x10, %edi
je 0xe9811
cmpl $0x6, %edi
je 0xe97f1
cmpl $0xb, %edi
je 0xe9801
cmpl $0x1, %edi
jne 0xe99af
leaq 0x13d3a8(%rip), %rax    # 0x226b90
leaq 0x13d399(%rip), %rcx    # 0x226b88
jmp 0xe981f
leaq 0x13d348(%rip), %rax    # 0x226b40
leaq 0x13d339(%rip), %rcx    # 0x226b38
jmp 0xe981f
leaq 0x13d3d8(%rip), %rax    # 0x226be0
leaq 0x13d3c9(%rip), %rcx    # 0x226bd8
jmp 0xe981f
leaq 0x13d418(%rip), %rax    # 0x226c30
leaq 0x13d409(%rip), %rcx    # 0x226c28
movsd (%rax), %xmm0
movsd %xmm0, -0x58(%rbp)
movq (%rcx), %rax
movq %rax, -0x50(%rbp)
xorl %edx, %edx
movzbl %dil, %r14d
movl $0x0, -0x34(%rbp)
movq %r15, -0x40(%rbp)
leaq 0x13d479(%rip), %rax    # 0x226cc0
movslq (%rax), %rax
cmpq %rax, %rdx
jge 0xe999f
imulq $0x38, %rdx, %r13
movslq 0x4(%r15,%r13), %rax
testq %rax, %rax
js 0xe999f
addq %r15, %r13
movslq (%r13), %rbx
leaq (%rbx,%rbx,2), %r12
leaq (%r12,%rax), %rcx
cmpq %rcx, -0x50(%rbp)
jle 0xe999f
movq %rdx, -0x48(%rbp)
leaq (%rbx,%rbx), %r15
leal (%rax,%r12), %ecx
movslq %ecx, %rsi
cmpq %rsi, -0x50(%rbp)
jle 0xe9925
movl %r14d, %edi
callq 0xead56
movsd %xmm0, -0x30(%rbp)
movslq 0x4(%r13), %rsi
addq %r15, %rsi
movl %r14d, %edi
callq 0xead56
movsd 0xc1c5(%rip), %xmm1     # 0xf5a80
mulsd %xmm1, %xmm0
movsd -0x30(%rbp), %xmm1
subsd %xmm0, %xmm1
movsd %xmm1, -0x30(%rbp)
movslq 0x4(%r13), %rsi
addq %rbx, %rsi
movl %r14d, %edi
callq 0xead56
mulsd 0xc19c(%rip), %xmm0     # 0xf5a80
addsd -0x30(%rbp), %xmm0
movsd %xmm0, -0x30(%rbp)
movslq 0x4(%r13), %rsi
movl %r14d, %edi
callq 0xead56
movsd -0x30(%rbp), %xmm1
subsd %xmm0, %xmm1
mulsd %xmm1, %xmm1
addsd 0x8(%r13), %xmm1
movsd %xmm1, 0x8(%r13)
incl 0x4(%r13)
callq 0xe9548
movl 0x4(%r13), %eax
jmp 0xe9886
testl %eax, %eax
movq -0x48(%rbp), %rdx
je 0xe9979
leaq 0x13d388(%rip), %rcx    # 0x226cbc
cmpl (%rcx), %eax
movq -0x40(%rbp), %r15
jl 0xe9997
xorpd %xmm1, %xmm1
movsd 0x18(%r13), %xmm0
ucomisd %xmm1, %xmm0
jne 0xe994e
jnp 0xe9997
xorpd %xmm2, %xmm2
movsd 0x8(%r13), %xmm0
cvtsi2sd %eax, %xmm1
addsd -0x58(%rbp), %xmm1
mulsd 0x1edaf(%rip), %xmm1    # 0x108718
divsd %xmm1, %xmm0
ucomisd %xmm2, %xmm0
jb 0xe997f
sqrtsd %xmm0, %xmm0
jmp 0xe9988
movq -0x40(%rbp), %r15
jmp 0xe9997
callq 0x9260
movq -0x48(%rbp), %rdx
divsd 0x18(%r13), %xmm0
movsd %xmm0, 0x10(%r13)
incl -0x34(%rbp)
incq %rdx
jmp 0xe9840
leaq 0x1255da(%rip), %rax    # 0x20ef80
movl -0x34(%rbp), %ecx
cmpl (%rax), %ecx
jle 0xe99af
movl %ecx, (%rax)
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq