// File: /workspace/github_cpp_makefile_star2_O2/tjohnman[P]sfxr-sdl2/build/../src/main.cpp
// Function: ResetSample(bool)
void ResetSample(bool restart)
{
	if(!restart)
		phase=0;
	fperiod=100.0/(p_base_freq*p_base_freq+0.001);
	period=(int)fperiod;
	fmaxperiod=100.0/(p_freq_limit*p_freq_limit+0.001);
	fslide=1.0-pow((double)p_freq_ramp, 3.0)*0.01;
	fdslide=-pow((double)p_freq_dramp, 3.0)*0.000001;
	square_duty=0.5f-p_duty*0.5f;
	square_slide=-p_duty_ramp*0.00005f;
	if(p_arp_mod>=0.0f)
		arp_mod=1.0-pow((double)p_arp_mod, 2.0)*0.9;
	else
		arp_mod=1.0+pow((double)p_arp_mod, 2.0)*10.0;
	arp_time=0;
	arp_limit=(int)(pow(1.0f-p_arp_speed, 2.0f)*20000+32);
	if(p_arp_speed==1.0f)
		arp_limit=0;
	if(!restart)
	{
		// reset filter
		fltp=0.0f;
		fltdp=0.0f;
		fltw=pow(p_lpf_freq, 3.0f)*0.1f;
		fltw_d=1.0f+p_lpf_ramp*0.0001f;
		fltdmp=5.0f/(1.0f+pow(p_lpf_resonance, 2.0f)*20.0f)*(0.01f+fltw);
		if(fltdmp>0.8f) fltdmp=0.8f;
		fltphp=0.0f;
		flthp=pow(p_hpf_freq, 2.0f)*0.1f;
		flthp_d=1.0+p_hpf_ramp*0.0003f;
		// reset vibrato
		vib_phase=0.0f;
		vib_speed=pow(p_vib_speed, 2.0f)*0.01f;
		vib_amp=p_vib_strength*0.5f;
		// reset envelope
		env_vol=0.0f;
		env_stage=0;
		env_time=0;
		env_length[0]=(int)(p_env_attack*p_env_attack*100000.0f);
		env_length[1]=(int)(p_env_sustain*p_env_sustain*100000.0f);
		env_length[2]=(int)(p_env_decay*p_env_decay*100000.0f);

		fphase=pow(p_pha_offset, 2.0f)*1020.0f;
		if(p_pha_offset<0.0f) fphase=-fphase;
		fdphase=pow(p_pha_ramp, 2.0f)*1.0f;
		if(p_pha_ramp<0.0f) fdphase=-fdphase;
		iphase=abs((int)fphase);
		ipp=0;
		for(int i=0;i<1024;i++)
			phaser_buffer[i]=0.0f;

		for(int i=0;i<32;i++)
			noise_buffer[i]=frnd(2.0f)-1.0f;

		rep_time=0;
		rep_limit=(int)(pow(1.0f-p_repeat_speed, 2.0f)*20000+32);
		if(p_repeat_speed==0.0f)
			rep_limit=0;
	}
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movl %edi, %ebx
testl %edi, %edi
jne 0x3d84
andl $0x0, 0x9744(%rip)      # 0xd4c8
movss 0x96d8(%rip), %xmm0     # 0xd464
mulss %xmm0, %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x5324(%rip), %xmm1     # 0x90c0
addsd %xmm1, %xmm0
movsd 0x5320(%rip), %xmm2     # 0x90c8
movapd %xmm2, %xmm3
divsd %xmm0, %xmm3
movsd %xmm3, 0x9718(%rip)     # 0xd4d0
cvttsd2si %xmm3, %eax
movl %eax, 0x972e(%rip)      # 0xd4f0
movss 0x969e(%rip), %xmm0     # 0xd468
mulss %xmm0, %xmm0
cvtss2sd %xmm0, %xmm0
addsd %xmm1, %xmm0
divsd %xmm0, %xmm2
movsd %xmm2, 0x96f6(%rip)     # 0xd4d8
cvtss2sd 0x9682(%rip), %xmm0     # 0xd46c
movsd 0x52de(%rip), %xmm1     # 0x90d0
callq 0x34b0
mulsd 0x52d9(%rip), %xmm0     # 0x90d8
addsd 0x52d9(%rip), %xmm0     # 0x90e0
movsd %xmm0, 0x96d1(%rip)     # 0xd4e0
cvtss2sd 0x9659(%rip), %xmm0     # 0xd470
movsd 0x52b1(%rip), %xmm1     # 0x90d0
callq 0x34b0
mulsd 0x52bc(%rip), %xmm0     # 0x90e8
movsd %xmm0, 0x96b4(%rip)     # 0xd4e8
movss 0x51cc(%rip), %xmm0     # 0x9008
movss 0x9630(%rip), %xmm1     # 0xd474
mulss %xmm0, %xmm1
subss %xmm1, %xmm0
movss %xmm0, 0x96a0(%rip)     # 0xd4f4
movss 0x961c(%rip), %xmm0     # 0xd478
mulss 0x51a8(%rip), %xmm0     # 0x900c
movss %xmm0, 0x968c(%rip)     # 0xd4f8
movss 0x964c(%rip), %xmm0     # 0xd4c0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
mulsd %xmm0, %xmm0
jae 0x3e8e
mulsd 0x526c(%rip), %xmm0     # 0x90f8
jmp 0x3e96
mulsd 0x525a(%rip), %xmm0     # 0x90f0
addsd 0x5242(%rip), %xmm0     # 0x90e0
andl $0x0, 0xa74f(%rip)      # 0xe5f4
movss 0x960f(%rip), %xmm1     # 0xd4bc
movss 0x515b(%rip), %xmm3     # 0x9010
movaps %xmm3, %xmm2
subss %xmm1, %xmm2
mulss %xmm2, %xmm2
mulss 0x514c(%rip), %xmm2     # 0x9014
addss 0x5148(%rip), %xmm2     # 0x9018
movsd %xmm0, 0xa728(%rip)     # 0xe600
cvttss2si %xmm2, %eax
xorl %ecx, %ecx
ucomiss %xmm3, %xmm1
cmovnel %eax, %ecx
cmovpl %eax, %ecx
movl %ecx, 0xa70b(%rip)      # 0xe5f8
testb %bl, %bl
jne 0x417d
andl $0x0, 0xa6c4(%rip)      # 0xe5c0
andl $0x0, 0xa6c1(%rip)      # 0xe5c4
movss 0x9595(%rip), %xmm0     # 0xd4a0
movss 0x5109(%rip), %xmm1     # 0x901c
callq 0x3440
movss 0x5100(%rip), %xmm2     # 0x9020
mulss %xmm2, %xmm0
movss %xmm0, 0xa69c(%rip)     # 0xe5c8
movss 0x9570(%rip), %xmm1     # 0xd4a4
mulss 0x50e8(%rip), %xmm1     # 0x9024
movss 0x50cc(%rip), %xmm4     # 0x9010
addss %xmm4, %xmm1
movss 0x954c(%rip), %xmm3     # 0xd49c
mulss %xmm3, %xmm3
mulss 0x50cc(%rip), %xmm3     # 0x9028
movss %xmm1, 0xa668(%rip)     # 0xe5cc
addss %xmm4, %xmm3
movaps %xmm4, %xmm5
movss 0x50b9(%rip), %xmm4     # 0x902c
divss %xmm3, %xmm4
movss 0x50b1(%rip), %xmm1     # 0x9030
addss %xmm1, %xmm0
mulss %xmm4, %xmm0
movss 0x50a5(%rip), %xmm3     # 0x9034
minss %xmm0, %xmm3
andl $0x0, 0xa63a(%rip)      # 0xe5d4
movss %xmm3, 0xa62e(%rip)     # 0xe5d0
movss 0x94fe(%rip), %xmm0     # 0xd4a8
mulss %xmm0, %xmm0
mulss %xmm2, %xmm0
movss %xmm0, 0xa61e(%rip)     # 0xe5d8
movss 0x94ea(%rip), %xmm0     # 0xd4ac
mulss 0x506e(%rip), %xmm0     # 0x9038
addss %xmm5, %xmm0
andl $0x0, 0xa60b(%rip)      # 0xe5e0
movss %xmm0, 0xa5ff(%rip)     # 0xe5dc
movss 0x9497(%rip), %xmm0     # 0xd47c
mulss 0x501b(%rip), %xmm0     # 0x9008
movss 0x948b(%rip), %xmm2     # 0xd480
andl $0x0, 0x9518(%rip)      # 0xd514
mulss %xmm2, %xmm2
andl $0x0, 0x94f5(%rip)      # 0xd4fc
mulss %xmm1, %xmm2
andl $0x0, 0x94ee(%rip)      # 0xd500
movss %xmm2, 0xa5ca(%rip)     # 0xe5e4
movss %xmm0, 0xa5c6(%rip)     # 0xe5e8
movss 0x9462(%rip), %xmm0     # 0xd48c
movss 0x9456(%rip), %xmm1     # 0xd488
unpcklps %xmm0, %xmm1            # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
mulps %xmm1, %xmm1
mulps 0x50d1(%rip), %xmm1     # 0x9110
cvttps2dq %xmm1, %xmm0
movlps %xmm0, 0x94be(%rip)     # 0xd508
movss 0x943e(%rip), %xmm0     # 0xd490
mulss %xmm0, %xmm0
mulss 0x4fde(%rip), %xmm0     # 0x903c
cvttss2si %xmm0, %eax
movl %eax, 0x94a8(%rip)      # 0xd510
movss 0x9440(%rip), %xmm0     # 0xd4b0
movaps %xmm0, %xmm2
mulss %xmm0, %xmm2
mulss 0x4fc1(%rip), %xmm2     # 0x9040
movaps 0x509a(%rip), %xmm1     # 0x9120
movaps %xmm2, %xmm3
xorps %xmm1, %xmm3
xorps %xmm4, %xmm4
cmpltss %xmm4, %xmm0
andps %xmm0, %xmm3
andnps %xmm2, %xmm0
orps %xmm3, %xmm0
movss %xmm0, 0x9473(%rip)     # 0xd518
movss 0x9407(%rip), %xmm2     # 0xd4b4
movaps %xmm2, %xmm3
mulss %xmm2, %xmm3
xorps %xmm3, %xmm1
cmpltss %xmm4, %xmm2
andps %xmm2, %xmm1
andnps %xmm3, %xmm2
cvttss2si %xmm0, %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
orps %xmm1, %xmm2
andl $0x0, 0xa459(%rip)      # 0xe530
movss %xmm2, 0x943d(%rip)     # 0xd51c
movl %ecx, 0x943b(%rip)      # 0xd520
xorl %eax, %eax
leaq 0x9442(%rip), %rcx      # 0xd530
cmpq $0x1000, %rax           # imm = 0x1000
je 0x4100
andl $0x0, (%rax,%rcx)
addq $0x4, %rax
jmp 0x40ee
xorl %ebx, %ebx
leaq 0xa437(%rip), %r14      # 0xe540
cmpq $0x80, %rbx
je 0x4133
movss 0x4f2a(%rip), %xmm0     # 0x9044
callq 0x370c
addss 0x4f21(%rip), %xmm0     # 0x9048
movss %xmm0, (%rbx,%r14)
addq $0x4, %rbx
jmp 0x4109
andl $0x0, 0xa4b2(%rip)      # 0xe5ec
movss 0x9376(%rip), %xmm0     # 0xd4b8
movss 0x4ec6(%rip), %xmm1     # 0x9010
subss %xmm0, %xmm1
mulss %xmm1, %xmm1
mulss 0x4eba(%rip), %xmm1     # 0x9014
addss 0x4eb6(%rip), %xmm1     # 0x9018
cvttss2si %xmm1, %eax
movl %eax, 0xa484(%rip)      # 0xe5f0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x417d
jp 0x417d
andl $0x0, 0xa473(%rip)      # 0xe5f0
addq $0x8, %rsp
popq %rbx
popq %r14
retq