// File: /workspace/github_cpp_makefile_star2_O3/jkingan[P]ladyheather/heathmsc.cpp
// Function: add_chc_adev_point(double, int)
void add_chc_adev_point(double val, int phase)
{
   if(chc_adev_period <= 0.0) return;
   if(adev_q_allocated == 0) {
      alloc_adev();
   }

   if(phase) chc_phase = val;
   else      chc_phase += val;  // convert time interval to phase

   if(chc_adev_q_count == 0) {
      chc_resid = 0.0;
      chc_adev_jd0 = jd_utc;
   }
   else chc_resid = (float) ((val-last_chc_resid));
   last_chc_resid = val;

   calc_resids(CHC, chc_phase, chc_adev_period);

   if((have_chc_base == 0) && (subtract_base_value == 1) && (chc_adev_q_count <= 1)) {  // aaaaa
      chc_base_value = chc_phase;
      have_chc_base = 1;
   }

   if(chc_adev_q) chc_adev_q[chc_adev_q_in] = (OFS_SIZE) (chc_phase - chc_base_value);

   if(++chc_adev_q_in >= adev_q_size) {  // queue has wrapped
      chc_adev_q_in = 0;
   }

   if(chc_adev_q_in == chc_adev_q_out) {  // queue is full
      ++chc_adev_q_out;               // drop oldest entry from the queue
      chc_adev_q_overflow += 1.0;
      incr_chc_overflow();        // tweek counts in the adev bins

      // Once the adev queue fills up,  the adev results begin to get stale
      // because the incremental adevs are based upon all the points seen in
      // the past.  To keep the adev numbers fresh, we preiodically reset
      // the incremental adev bins.  This causes the adevs to be
      // recalculated from just the values stored in the queue.
      if(chc_adev_q_overflow >= adev_q_size) {  // !!!! wrap >= was >0 
         if(keep_adevs_fresh) {
            reset_chc_bins();              
            adev_freshened = 1;
         }
      }
   }
   else ++chc_adev_q_count;   // keep count of number of entries in the adev queue
   if(chc_adev_q_out >= adev_q_size) chc_adev_q_out = 0;

   // incrementally update the adev bin values with the new data point
   do_incr_chc_adevs();    // recalculate all the adevs from the queued data

   if(adev_freshened) {
      show_adev_info(3);
      adev_freshened = 0;
   }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
leaq 0x13c184(%rip), %r14    # 0x23cd10
xorpd %xmm1, %xmm1
ucomisd (%r14), %xmm1
jae 0x100dc6
movl %edi, %ebx
leaq 0x13c13c(%rip), %rax    # 0x23cce0
cmpl $0x0, (%rax)
jne 0x100bb8
movsd %xmm0, -0x20(%rbp)
callq 0x10802
movsd -0x20(%rbp), %xmm0
leaq 0x20bc59(%rip), %rax    # 0x30c818
testl %ebx, %ebx
je 0x100bc9
movapd %xmm0, %xmm3
jmp 0x100bd1
movsd (%rax), %xmm3
addsd %xmm0, %xmm3
movsd %xmm3, (%rax)
leaq 0x13bffc(%rip), %rax    # 0x23cbd8
movq (%rax), %rcx
testq %rcx, %rcx
je 0x100bfd
leaq 0x13c015(%rip), %rdx    # 0x23cc00
movapd %xmm0, %xmm1
subsd (%rdx), %xmm1
cvtsd2ss %xmm1, %xmm1
cvtss2sd %xmm1, %xmm1
jmp 0x100c16
leaq 0x20c92c(%rip), %rdx    # 0x30d530
movsd (%rdx), %xmm1
leaq 0x13c099(%rip), %rdx    # 0x23cca8
movsd %xmm1, (%rdx)
xorps %xmm1, %xmm1
leaq 0x23ec33(%rip), %rdx    # 0x33f850
movsd 0x2b8(%rdx), %xmm2
addsd 0x8443(%rip), %xmm2     # 0x109070
movsd %xmm2, 0x2b8(%rdx)
mulsd (%r14), %xmm2
leaq 0x13bfb7(%rip), %rsi    # 0x23cbf8
movsd %xmm1, (%rsi)
leaq 0x13bfb4(%rip), %rsi    # 0x23cc00
movsd 0x280(%rdx), %xmm1
addsd %xmm2, %xmm1
movsd %xmm1, 0x280(%rdx)
movsd 0x288(%rdx), %xmm1
addsd %xmm3, %xmm1
movsd %xmm1, 0x288(%rdx)
movapd %xmm2, %xmm1
mulsd %xmm2, %xmm1
addsd 0x290(%rdx), %xmm1
movsd %xmm0, (%rsi)
movsd %xmm1, 0x290(%rdx)
movapd %xmm3, %xmm1
mulsd %xmm3, %xmm1
addsd 0x298(%rdx), %xmm1
movsd %xmm1, 0x298(%rdx)
mulsd %xmm3, %xmm2
addsd 0x2a0(%rdx), %xmm2
movsd %xmm2, 0x2a0(%rdx)
cmpq $0x1, %rcx
jg 0x100ceb
leaq 0x12280f(%rip), %rdx    # 0x2234d8
cmpl $0x0, (%rdx)
jne 0x100ceb
leaq 0x12280b(%rip), %rsi    # 0x2234e0
cmpb $0x1, (%rsi)
jne 0x100ceb
leaq 0x1227df(%rip), %rsi    # 0x2234c0
movsd %xmm3, (%rsi)
movl $0x1, (%rdx)
leaq 0x13bece(%rip), %rdx    # 0x23cbc0
movq (%rdx), %rdx
leaq 0x13becc(%rip), %rsi    # 0x23cbc8
movq (%rsi), %rdi
testq %rdx, %rdx
je 0x100d15
leaq 0x1227b5(%rip), %r8     # 0x2234c0
subsd (%r8), %xmm3
movsd %xmm3, (%rdx,%rdi,8)
incq %rdi
leaq 0x13bfb9(%rip), %r14    # 0x23ccd8
movq (%r14), %rdx
xorl %r8d, %r8d
cmpq %rdx, %rdi
cmovlq %rdi, %r8
movq %r8, (%rsi)
leaq 0x13be9a(%rip), %rbx    # 0x23cbd0
cmpq (%rbx), %r8
jne 0x100d98
incq %r8
movq %r8, (%rbx)
leaq 0x13be98(%rip), %r15    # 0x23cbe0
movsd (%r15), %xmm0
addsd 0x831b(%rip), %xmm0     # 0x109070
movsd %xmm0, (%r15)
callq 0x100262
movsd (%r15), %xmm0
movq (%r14), %rdx
xorps %xmm1, %xmm1
cvtsi2sd %rdx, %xmm1
ucomisd %xmm1, %xmm0
jb 0x100d9e
leaq 0x13bfc0(%rip), %rax    # 0x23cd3c
cmpb $0x0, (%rax)
je 0x100d9e
callq 0xfeb6d
leaq 0x13beeb(%rip), %rax    # 0x23cc78
movl $0x1, (%rax)
movq (%r14), %rdx
jmp 0x100d9e
incq %rcx
movq %rcx, (%rax)
cmpq %rdx, (%rbx)
jl 0x100daa
movq $0x0, (%rbx)
callq 0x1000a9
leaq 0x13bec2(%rip), %rbx    # 0x23cc78
cmpl $0x0, (%rbx)
je 0x100dc6
callq 0x100623
movl $0x0, (%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq