// File: jkingan[P]ladyheather/heathmsc.cpp
// Function: osc_pid_filter()
void osc_pid_filter()
{
double dac_ctrl;
double pps_tweak;
double osc_PID_val;
int i;

   if(0 && osc_prefilter) {
      if(rcvr_type == X72_RCVR) {
         osc_osc_q[opq_in] = osc_offset;
         osc_pps_q[opq_in] = pps_offset * 1.0E-9;
      }
      else {
         osc_osc_q[opq_in] = osc_offset;
         osc_pps_q[opq_in] = pps_offset;
      }
      if(++opq_in >= osc_prefilter) opq_in = 0;
      if(++opq_count > osc_prefilter) opq_count = osc_prefilter;

      pps_bin_count = 0;
      avg_pps = avg_osc = 0.0;
      for(i=0; i<opq_count; i++) {  // !!! we should calc this more efficiently by tracking what is in the queue
         avg_osc += osc_osc_q[i];
         avg_pps += osc_pps_q[i];
         ++pps_bin_count;
      }
      avg_osc /= (double) pps_bin_count;
      avg_pps /= (double) pps_bin_count;
   }
   else if(rcvr_type == X72_RCVR) {
      avg_osc = x72_xxx_dds(pps_offset);
sprintf(debug_text4, "avg osc1:%g  count:%d", avg_osc, x72_dds_count);
      avg_osc = avg_osc * (1.0 + (((double) (x72_dds_count - x72_tc_val)) / (2.0*(double) x72_tc_val)) );
sprintf(debug_text3, "avg osc2:%g", avg_osc);
      if(x72_dds_count) avg_osc /= x72_dds_count;
      avg_osc /= x72_osc;
      if(x72_dds_count < 60) avg_osc = last_x72_dds;
sprintf(debug_text2, "avg osc3:%g", avg_osc);
      avg_pps = pps_offset * 1.0E-9;
   }
   else {
      avg_osc = osc_offset;
      avg_pps = pps_offset;
   }

   if(osc_rampup && (osc_rampup < OSC_I_TC)) {
      calc_osc_k_factors();
   }

   #ifdef DEBUG_OSC_CONTROL
      if(osc_pid_debug) {
         show_osc_pid_values();
      }
   #endif

   last_osc_PID_error = osc_PID_error;

   // osc_PID_error is the curent oscillator error 
   // Negative values indicate the osc is too high and needs to be 
   // lowered.  Positive values indicate the osc too high and needs
   // to be raised.
   //
   // OSC_FILTER_OFFSET is a offset constant: negative values raise 
   // the osc curve,  positive values lower it
// pps_tweak = ((float) pps_offset) * OSC_FILTER_OFFSET * (OSC_P_GAIN/1000.0F);
// osc_PID_error = ((float) osc_offset) + pps_tweak;  // OSC_FILTER_OFFSET;
   pps_tweak = avg_pps * OSC_FILTER_OFFSET * (OSC_P_GAIN/1000.0);
   osc_PID_error = avg_osc + pps_tweak;  // OSC_FILTER_OFFSET;

   // osc_integral_step is the clipped osc error
   osc_integral_step = osc_PID_error; 
   if(osc_integral_step > OSC_MAX_INTEGRAL) osc_integral_step = OSC_MAX_INTEGRAL;  
   else if(osc_integral_step < (-OSC_MAX_INTEGRAL)) osc_integral_step = (-OSC_MAX_INTEGRAL);

   if((osc_PID_out >= OSC_MAX_PID) && (osc_integral_step > 0.0)) osc_integral_step *= (-osc_integrator_reset);
   else if((osc_PID_out <= (-OSC_MAX_PID)) && (osc_integral_step < 0.0)) osc_integral_step *= (-osc_integrator_reset);

   osc_integrator += (osc_integral_step * osc_k4);
   if((osc_integrator+osc_k6) > 1.0F) osc_integrator = (1.0F-osc_k6);    // integrator value is maxed out
   else if((osc_integrator+osc_k6) < (-1.0F)) osc_integrator = (-1.0F-osc_k6);

   osc_PID_out = (osc_k1*osc_PID_error) + (osc_k2*last_osc_PID_error) + (osc_k3*last_osc_PID_out);
   last_osc_PID_out = osc_PID_out;
   if(osc_PID_out > 0.0F) osc_PID_out -= osc_k7;   // autotune debug - manual step size
   else                   osc_PID_out += osc_k7;
   osc_PID_out += (osc_integrator + osc_k6);

   // clamp the filter response
   if(osc_PID_out > OSC_MAX_PID) osc_PID_out = OSC_MAX_PID;
   else if(osc_PID_out < (-OSC_MAX_PID)) osc_PID_out = (-OSC_MAX_PID);

   if(osc_postfilter) {
      if(post_q_count >= osc_postfilter) post_q_sum -= osc_post_q[post_q_in];
      post_q_sum += osc_PID_out;
      osc_post_q[post_q_in] = osc_PID_out;
      if(++post_q_in >= osc_postfilter)   post_q_in = 0;
      if(++post_q_count > osc_postfilter) post_q_count = osc_postfilter;
      osc_PID_val = post_q_sum / (double) post_q_count;
   }
   else {
      osc_PID_val = osc_PID_out;
   }

   // convert filter output to DAC volatge
   if(rcvr_type == X72_RCVR) {
      if(osc_gain) dac_ctrl = (osc_PID_val*0.10) / (double) osc_gain;  // 4.0E-8 = MAX_DDS_STEP
      else dac_ctrl = 0.0;
      dac_ctrl += (double) osc_pid_initial_voltage;
      set_x72_dds(dac_ctrl);
sprintf(debug_text5, "set dds: %g  opv:%g  avg_osc:%g  avg_pps:%g  pps_tweak:%g", dac_ctrl,osc_PID_val, avg_osc,avg_pps,pps_tweak);
   }
   else {
      if(osc_gain) dac_ctrl = (osc_PID_val*MAX_PID_HZ) / (double) osc_gain;
      else dac_ctrl = 0.0;
      dac_ctrl += (double) osc_pid_initial_voltage;
      set_dac_voltage((float) dac_ctrl, 4);
   }

   #ifdef DEBUG_OSC_CONTROL
      if(osc_pid_debug) {
         sprintf(debug_text,  " PID(%g)  post(%g,%d)  last_out(%g)  err(%g)  last_err(%g)  int=%g  ramp=%g",
            osc_PID_out, osc_PID_val,post_q_count,  last_osc_PID_out, osc_PID_error*(-1.0F),  last_osc_PID_error, osc_integrator, osc_rampup);
         last_osc_PID_display =  osc_PID_out;
      }
   #endif
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
leaq 0x10c441(%rip), %rax    # 0x277ab0
cmpq $0x2000000, (%rax)      # imm = 0x2000000
jne 0x16b7ef
leaq 0x200315(%rip), %rax    # 0x36b998
movsd (%rax), %xmm0
callq 0x109f00
leaq 0x23323d(%rip), %rax    # 0x39e8d0
movsd %xmm0, (%rax)
leaq 0x233232(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm0
leaq 0x10ea5f(%rip), %rax    # 0x27a108
movl (%rax), %edx
leaq 0x2328be(%rip), %rdi    # 0x39df70
leaq 0x2d531(%rip), %rsi     # 0x198bea
movb $0x1, %al
callq 0x9060
leaq 0x233209(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm0
leaq 0x10ea36(%rip), %rax    # 0x27a108
movl (%rax), %eax
leaq 0x10e909(%rip), %rcx    # 0x279fe4
subl (%rcx), %eax
cvtsi2sd %eax, %xmm2
leaq 0x10e8fc(%rip), %rax    # 0x279fe4
cvtsi2sdl (%rax), %xmm3
movsd 0x3a5c(%rip), %xmm1     # 0x16f150
mulsd %xmm3, %xmm1
divsd %xmm1, %xmm2
movsd 0x3964(%rip), %xmm1     # 0x16f068
addsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
leaq 0x2331bd(%rip), %rax    # 0x39e8d0
movsd %xmm0, (%rax)
leaq 0x2331b2(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm0
leaq 0x2326f7(%rip), %rdi    # 0x39de20
leaq 0x2d4d0(%rip), %rsi     # 0x198c00
movb $0x1, %al
callq 0x9060
leaq 0x10e9ca(%rip), %rax    # 0x27a108
cmpl $0x0, (%rax)
je 0x16b768
leaq 0x10e9be(%rip), %rax    # 0x27a108
cvtsi2sdl (%rax), %xmm1
leaq 0x23317b(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm0
divsd %xmm1, %xmm0
leaq 0x23316c(%rip), %rax    # 0x39e8d0
movsd %xmm0, (%rax)
leaq 0x10e6d9(%rip), %rax    # 0x279e48
movsd (%rax), %xmm1
leaq 0x233156(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm0
divsd %xmm1, %xmm0
leaq 0x233147(%rip), %rax    # 0x39e8d0
movsd %xmm0, (%rax)
leaq 0x10e974(%rip), %rax    # 0x27a108
cmpl $0x3c, (%rax)
jge 0x16b7af
leaq 0x10e920(%rip), %rax    # 0x27a0c0
movsd (%rax), %xmm0
leaq 0x233125(%rip), %rax    # 0x39e8d0
movsd %xmm0, (%rax)
leaq 0x23311a(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm0
leaq 0x23250f(%rip), %rdi    # 0x39dcd0
leaq 0x2d444(%rip), %rsi     # 0x198c0c
movb $0x1, %al
callq 0x9060
movsd 0x3991(%rip), %xmm0     # 0x16f168
leaq 0x2001ba(%rip), %rax    # 0x36b998
mulsd (%rax), %xmm0
leaq 0x2330df(%rip), %rax    # 0x39e8c8
movsd %xmm0, (%rax)
jmp 0x16b81b
leaq 0x2001aa(%rip), %rax    # 0x36b9a0
movsd (%rax), %xmm0
leaq 0x2330cf(%rip), %rax    # 0x39e8d0
movsd %xmm0, (%rax)
leaq 0x20018c(%rip), %rax    # 0x36b998
movsd (%rax), %xmm0
leaq 0x2330b1(%rip), %rax    # 0x39e8c8
movsd %xmm0, (%rax)
leaq 0x23309e(%rip), %rax    # 0x39e8c0
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x16b833
jp 0x16b833
jmp 0x16b854
leaq 0x233086(%rip), %rax    # 0x39e8c0
movsd (%rax), %xmm1
leaq 0x233053(%rip), %rax    # 0x39e898
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x16b854
callq 0x16af10
leaq 0x23301d(%rip), %rax    # 0x39e878
cmpb $0x0, (%rax)
je 0x16b865
callq 0x16b210
movsd 0x3495b3(%rip), %xmm0   # 0x4b4e20
movsd %xmm0, 0x3495b3(%rip)   # 0x4b4e28
leaq 0x23304c(%rip), %rax    # 0x39e8c8
movsd (%rax), %xmm0
leaq 0x233019(%rip), %rax    # 0x39e8a0
mulsd (%rax), %xmm0
leaq 0x232fee(%rip), %rax    # 0x39e880
movsd (%rax), %xmm1
movsd 0x3792(%rip), %xmm2     # 0x16f030
divsd %xmm2, %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x10(%rbp)
leaq 0x23301e(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm0
addsd -0x10(%rbp), %xmm0
movsd %xmm0, 0x34955d(%rip)   # 0x4b4e20
movsd 0x349555(%rip), %xmm0   # 0x4b4e20
movsd %xmm0, 0x349565(%rip)   # 0x4b4e38
movsd 0x34955d(%rip), %xmm0   # 0x4b4e38
movsd 0x37dd(%rip), %xmm1     # 0x16f0c0
ucomisd %xmm1, %xmm0
jbe 0x16b8fb
movsd 0x37cf(%rip), %xmm0     # 0x16f0c0
movsd %xmm0, 0x34953f(%rip)   # 0x4b4e38
jmp 0x16b91f
movsd 0x380d(%rip), %xmm0     # 0x16f110
ucomisd 0x34952d(%rip), %xmm0   # 0x4b4e38
jbe 0x16b91d
movsd 0x37fb(%rip), %xmm0     # 0x16f110
movsd %xmm0, 0x34951b(%rip)   # 0x4b4e38
jmp 0x16b91f
movsd 0x3494e9(%rip), %xmm0   # 0x4b4e10
movsd 0x3721(%rip), %xmm1     # 0x16f050
ucomisd %xmm1, %xmm0
jb 0x16b977
movsd 0x3494fb(%rip), %xmm0   # 0x4b4e38
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x16b977
movsd 0x349532(%rip), %xmm0   # 0x4b4e80
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd 0x3494cb(%rip), %xmm0   # 0x4b4e38
movsd %xmm0, 0x3494c3(%rip)   # 0x4b4e38
jmp 0x16b9c7
movsd 0x3789(%rip), %xmm0     # 0x16f108
ucomisd 0x349489(%rip), %xmm0   # 0x4b4e10
jb 0x16b9c5
xorps %xmm0, %xmm0
ucomisd 0x3494a4(%rip), %xmm0   # 0x4b4e38
jbe 0x16b9c5
movsd 0x3494e2(%rip), %xmm0   # 0x4b4e80
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
mulsd 0x34947b(%rip), %xmm0   # 0x4b4e38
movsd %xmm0, 0x349473(%rip)   # 0x4b4e38
jmp 0x16b9c7
movsd 0x349469(%rip), %xmm0   # 0x4b4e38
movsd 0x349489(%rip), %xmm2   # 0x4b4e60
movsd 0x349461(%rip), %xmm1   # 0x4b4e40
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x349451(%rip)   # 0x4b4e40
movsd 0x349449(%rip), %xmm0   # 0x4b4e40
addsd 0x349471(%rip), %xmm0   # 0x4b4e70
movsd 0x3661(%rip), %xmm1     # 0x16f068
ucomisd %xmm1, %xmm0
jbe 0x16ba27
movsd 0x3653(%rip), %xmm0     # 0x16f068
subsd 0x349453(%rip), %xmm0   # 0x4b4e70
movsd %xmm0, 0x34941b(%rip)   # 0x4b4e40
jmp 0x16ba5f
movsd 0x349411(%rip), %xmm1   # 0x4b4e40
addsd 0x349439(%rip), %xmm1   # 0x4b4e70
movsd 0x36d9(%rip), %xmm0     # 0x16f118
ucomisd %xmm1, %xmm0
jbe 0x16ba5d
movsd 0x36cb(%rip), %xmm0     # 0x16f118
subsd 0x34941b(%rip), %xmm0   # 0x4b4e70
movsd %xmm0, 0x3493e3(%rip)   # 0x4b4e40
jmp 0x16ba5f
movsd 0x3493e1(%rip), %xmm1   # 0x4b4e48
movsd 0x3493b1(%rip), %xmm2   # 0x4b4e20
movsd 0x3493d9(%rip), %xmm0   # 0x4b4e50
mulsd 0x3493a9(%rip), %xmm0   # 0x4b4e28
mulsd %xmm2, %xmm1
addsd %xmm0, %xmm1
movsd 0x3493c9(%rip), %xmm0   # 0x4b4e58
movsd 0x349381(%rip), %xmm2   # 0x4b4e18
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x349369(%rip)   # 0x4b4e10
movsd 0x349361(%rip), %xmm0   # 0x4b4e10
movsd %xmm0, 0x349361(%rip)   # 0x4b4e18
movsd 0x349351(%rip), %xmm0   # 0x4b4e10
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x16bae6
movsd 0x3493a8(%rip), %xmm1   # 0x4b4e78
movsd 0x349338(%rip), %xmm0   # 0x4b4e10
subsd %xmm1, %xmm0
movsd %xmm0, 0x34932c(%rip)   # 0x4b4e10
jmp 0x16bafe
movsd 0x34938a(%rip), %xmm0   # 0x4b4e78
addsd 0x34931a(%rip), %xmm0   # 0x4b4e10
movsd %xmm0, 0x349312(%rip)   # 0x4b4e10
movsd 0x34933a(%rip), %xmm0   # 0x4b4e40
addsd 0x349362(%rip), %xmm0   # 0x4b4e70
addsd 0x3492fa(%rip), %xmm0   # 0x4b4e10
movsd %xmm0, 0x3492f2(%rip)   # 0x4b4e10
movsd 0x3492ea(%rip), %xmm0   # 0x4b4e10
movsd 0x3522(%rip), %xmm1     # 0x16f050
ucomisd %xmm1, %xmm0
jbe 0x16bb46
movsd 0x3514(%rip), %xmm0     # 0x16f050
movsd %xmm0, 0x3492cc(%rip)   # 0x4b4e10
jmp 0x16bb6a
movsd 0x35ba(%rip), %xmm0     # 0x16f108
ucomisd 0x3492ba(%rip), %xmm0   # 0x4b4e10
jbe 0x16bb68
movsd 0x35a8(%rip), %xmm0     # 0x16f108
movsd %xmm0, 0x3492a8(%rip)   # 0x4b4e10
jmp 0x16bb6a
leaq 0x232cfb(%rip), %rax    # 0x39e86c
cmpl $0x0, (%rax)
je 0x16bc6b
leaq 0x232cef(%rip), %rax    # 0x39e870
movl (%rax), %eax
leaq 0x232ce2(%rip), %rcx    # 0x39e86c
cmpl (%rcx), %eax
jl 0x16bbb8
leaq 0x232cdf(%rip), %rax    # 0x39e874
movslq (%rax), %rcx
leaq 0x3496d1(%rip), %rax    # 0x4b5270
movsd (%rax,%rcx,8), %xmm1
movsd 0x34a98c(%rip), %xmm0   # 0x4b6538
subsd %xmm1, %xmm0
movsd %xmm0, 0x34a980(%rip)   # 0x4b6538
movsd 0x349250(%rip), %xmm0   # 0x4b4e10
addsd 0x34a970(%rip), %xmm0   # 0x4b6538
movsd %xmm0, 0x34a968(%rip)   # 0x4b6538
movsd 0x349238(%rip), %xmm0   # 0x4b4e10
leaq 0x232c95(%rip), %rax    # 0x39e874
movslq (%rax), %rcx
leaq 0x349687(%rip), %rax    # 0x4b5270
movsd %xmm0, (%rax,%rcx,8)
leaq 0x232c7f(%rip), %rax    # 0x39e874
movl (%rax), %eax
addl $0x1, %eax
leaq 0x232c73(%rip), %rcx    # 0x39e874
movl %eax, (%rcx)
leaq 0x232c62(%rip), %rcx    # 0x39e86c
cmpl (%rcx), %eax
jl 0x16bc1b
leaq 0x232c5f(%rip), %rax    # 0x39e874
movl $0x0, (%rax)
leaq 0x232c4e(%rip), %rax    # 0x39e870
movl (%rax), %eax
addl $0x1, %eax
leaq 0x232c42(%rip), %rcx    # 0x39e870
movl %eax, (%rcx)
leaq 0x232c35(%rip), %rcx    # 0x39e86c
cmpl (%rcx), %eax
jle 0x16bc4d
leaq 0x232c2a(%rip), %rax    # 0x39e86c
movl (%rax), %ecx
leaq 0x232c25(%rip), %rax    # 0x39e870
movl %ecx, (%rax)
movsd 0x34a8e3(%rip), %xmm0   # 0x4b6538
leaq 0x232c14(%rip), %rax    # 0x39e870
cvtsi2sdl (%rax), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x18(%rbp)
jmp 0x16bc78
movsd 0x34919d(%rip), %xmm0   # 0x4b4e10
movsd %xmm0, -0x18(%rbp)
leaq 0x10be31(%rip), %rax    # 0x277ab0
cmpq $0x2000000, (%rax)      # imm = 0x2000000
jne 0x16bd26
leaq 0x200655(%rip), %rax    # 0x36c2e8
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x16bca4
jp 0x16bca4
jmp 0x16bcc3
movsd 0x347c(%rip), %xmm0     # 0x16f128
mulsd -0x18(%rbp), %xmm0
leaq 0x200630(%rip), %rax    # 0x36c2e8
divsd (%rax), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x16bccb
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
leaq 0x20066e(%rip), %rax    # 0x36c340
movsd (%rax), %xmm0
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
callq 0x9a4f0
movsd -0x8(%rbp), %xmm0
movsd -0x18(%rbp), %xmm1
leaq 0x232bd5(%rip), %rax    # 0x39e8d0
movsd (%rax), %xmm2
leaq 0x232bc2(%rip), %rax    # 0x39e8c8
movsd (%rax), %xmm3
movsd -0x10(%rbp), %xmm4
leaq 0x2323aa(%rip), %rdi    # 0x39e0c0
leaq 0x2cefb(%rip), %rsi     # 0x198c18
movb $0x5, %al
callq 0x9060
jmp 0x16bd91
leaq 0x2005bb(%rip), %rax    # 0x36c2e8
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x16bd3e
jp 0x16bd3e
jmp 0x16bd5d
movsd 0x33e2(%rip), %xmm0     # 0x16f128
mulsd -0x18(%rbp), %xmm0
leaq 0x200596(%rip), %rax    # 0x36c2e8
divsd (%rax), %xmm0
movsd %xmm0, -0x8(%rbp)
jmp 0x16bd65
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rbp)
leaq 0x2005d4(%rip), %rax    # 0x36c340
movsd (%rax), %xmm0
addsd -0x8(%rbp), %xmm0
movsd %xmm0, -0x8(%rbp)
movsd -0x8(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
cvtss2sd %xmm0, %xmm0
movl $0x4, %edi
callq 0x94640
leaq 0x232ae0(%rip), %rax    # 0x39e878
cmpb $0x0, (%rax)
je 0x16be0b
movsd 0x34906b(%rip), %xmm0   # 0x4b4e10
movsd -0x18(%rbp), %xmm1
leaq 0x232abf(%rip), %rax    # 0x39e870
movl (%rax), %edx
movsd 0x34905d(%rip), %xmm2   # 0x4b4e18
movsd 0x3355(%rip), %xmm3     # 0x16f118
mulsd 0x349055(%rip), %xmm3   # 0x4b4e20
movsd 0x349055(%rip), %xmm4   # 0x4b4e28
movsd 0x349065(%rip), %xmm5   # 0x4b4e40
leaq 0x232ade(%rip), %rax    # 0x39e8c0
movsd (%rax), %xmm6
leaq 0x231d93(%rip), %rdi    # 0x39db80
leaq 0x2ce5e(%rip), %rsi     # 0x198c52
movb $0x7, %al
callq 0x9060
movsd 0x34900d(%rip), %xmm0   # 0x4b4e10
movsd %xmm0, 0x349025(%rip)   # 0x4b4e30
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)