// File: 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 %rbp
movq %rsp, %rbp
subq $0x10, %rsp
movb %dil, %al
andb $0x1, %al
movb %al, -0x1(%rbp)
testb $0x1, -0x1(%rbp)
jne 0x4110
movl $0x0, 0xf438(%rip)      # 0x13548
movss 0xf3cc(%rip), %xmm0     # 0x134e4
mulss 0xf3c4(%rip), %xmm0     # 0x134e4
cvtss2sd %xmm0, %xmm1
movsd 0x9fbc(%rip), %xmm0     # 0xe0e8
addsd %xmm0, %xmm1
movsd 0x9fa8(%rip), %xmm0     # 0xe0e0
divsd %xmm1, %xmm0
movsd %xmm0, 0xf40c(%rip)     # 0x13550
cvttsd2si 0xf404(%rip), %eax # 0x13550
movl %eax, 0xf41e(%rip)      # 0x13570
movss 0xf38e(%rip), %xmm0     # 0x134e8
mulss 0xf386(%rip), %xmm0     # 0x134e8
cvtss2sd %xmm0, %xmm1
movsd 0x9f7a(%rip), %xmm0     # 0xe0e8
addsd %xmm0, %xmm1
movsd 0x9f66(%rip), %xmm0     # 0xe0e0
divsd %xmm1, %xmm0
movsd %xmm0, 0xf3d2(%rip)     # 0x13558
movss 0xf35e(%rip), %xmm0     # 0x134ec
cvtss2sd %xmm0, %xmm0
movsd 0x9f2e(%rip), %xmm1     # 0xe0c8
callq 0x35a0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x9f12(%rip), %xmm1     # 0xe0d0
mulsd %xmm1, %xmm0
movsd 0x9f0e(%rip), %xmm1     # 0xe0d8
addsd %xmm1, %xmm0
movsd %xmm0, 0xf38a(%rip)     # 0x13560
movss 0xf312(%rip), %xmm0     # 0x134f0
cvtss2sd %xmm0, %xmm0
movsd 0x9ede(%rip), %xmm1     # 0xe0c8
callq 0x35a0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x9eb2(%rip), %xmm1     # 0xe0c0
mulsd %xmm1, %xmm0
movsd %xmm0, 0xf34e(%rip)     # 0x13568
movss 0xf2d2(%rip), %xmm0     # 0x134f4
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss 0x9ddd(%rip), %xmm1     # 0xe014
mulss %xmm1, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0xf32d(%rip)     # 0x13574
movss 0xf2a9(%rip), %xmm0     # 0x134f8
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss 0x9db4(%rip), %xmm1     # 0xe018
mulss %xmm1, %xmm0
movss %xmm0, 0xf308(%rip)     # 0x13578
movss 0xf2c8(%rip), %xmm0     # 0x13540
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jb 0x42d2
movss 0xf2b8(%rip), %xmm0     # 0x13540
cvtss2sd %xmm0, %xmm0
movsd 0x9e64(%rip), %xmm1     # 0xe0f8
callq 0x35a0
movq %xmm0, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm0
movsd 0x9e48(%rip), %xmm1     # 0xe100
mulsd %xmm1, %xmm0
movsd 0x9e14(%rip), %xmm1     # 0xe0d8
addsd %xmm1, %xmm0
movsd %xmm0, 0x103a0(%rip)    # 0x14670
jmp 0x430b
movss 0xf266(%rip), %xmm0     # 0x13540
cvtss2sd %xmm0, %xmm0
movsd 0x9e12(%rip), %xmm1     # 0xe0f8
callq 0x35a0
movsd 0x9dfd(%rip), %xmm1     # 0xe0f0
mulsd %xmm1, %xmm0
movsd 0x9dd9(%rip), %xmm1     # 0xe0d8
addsd %xmm1, %xmm0
movsd %xmm0, 0x10365(%rip)    # 0x14670
movl $0x0, 0x1034f(%rip)     # 0x14664
movss 0x9ceb(%rip), %xmm0     # 0xe008
subss 0xf217(%rip), %xmm0     # 0x1353c
movss 0x9cf7(%rip), %xmm1     # 0xe024
callq 0x8460
movss 0x9ce2(%rip), %xmm1     # 0xe01c
mulss %xmm1, %xmm0
movss 0x9cda(%rip), %xmm1     # 0xe020
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, 0x10314(%rip)     # 0x14668
movss 0xf1e0(%rip), %xmm0     # 0x1353c
movss 0x9ca4(%rip), %xmm1     # 0xe008
ucomiss %xmm1, %xmm0
jne 0x4375
jp 0x4375
movl $0x0, 0x102f3(%rip)     # 0x14668
testb $0x1, -0x1(%rbp)
jne 0x4739
xorps %xmm0, %xmm0
movss %xmm0, 0x102a6(%rip)    # 0x14630
xorps %xmm0, %xmm0
movss %xmm0, 0x1029f(%rip)    # 0x14634
movss 0xf183(%rip), %xmm0     # 0x13520
movss 0x9c9b(%rip), %xmm1     # 0xe040
callq 0x8460
movss 0x9c8a(%rip), %xmm1     # 0xe03c
mulss %xmm1, %xmm0
movss %xmm0, 0x1027a(%rip)    # 0x14638
movss 0xf15e(%rip), %xmm0     # 0x13524
movss 0x9c6a(%rip), %xmm1     # 0xe038
mulss %xmm1, %xmm0
movss 0x9c2e(%rip), %xmm1     # 0xe008
addss %xmm1, %xmm0
movss %xmm0, 0x10256(%rip)    # 0x1463c
movss 0xf12e(%rip), %xmm0     # 0x1351c
movss 0x9c2e(%rip), %xmm1     # 0xe024
callq 0x8460
movaps %xmm0, %xmm1
movss 0x9c2e(%rip), %xmm0     # 0xe034
mulss %xmm0, %xmm1
movss 0x9bf6(%rip), %xmm0     # 0xe008
addss %xmm0, %xmm1
movss 0x9c12(%rip), %xmm0     # 0xe030
divss %xmm1, %xmm0
movss 0x9c02(%rip), %xmm1     # 0xe02c
addss 0x10206(%rip), %xmm1    # 0x14638
mulss %xmm1, %xmm0
movss %xmm0, 0x10202(%rip)    # 0x14640
movss 0x101fa(%rip), %xmm0    # 0x14640
movss 0x9bda(%rip), %xmm1     # 0xe028
ucomiss %xmm1, %xmm0
jbe 0x4463
movss 0x9bcd(%rip), %xmm0     # 0xe028
movss %xmm0, 0x101dd(%rip)    # 0x14640
xorps %xmm0, %xmm0
movss %xmm0, 0x101d6(%rip)    # 0x14644
movss 0xf0b2(%rip), %xmm0     # 0x13528
movss 0x9ba6(%rip), %xmm1     # 0xe024
callq 0x8460
movss 0x9bb1(%rip), %xmm1     # 0xe03c
mulss %xmm1, %xmm0
movss %xmm0, 0x101b1(%rip)    # 0x14648
movss 0x9bad(%rip), %xmm0     # 0xe04c
mulss 0xf085(%rip), %xmm0     # 0x1352c
cvtss2sd %xmm0, %xmm1
movsd 0x9c25(%rip), %xmm0     # 0xe0d8
addsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x10189(%rip)    # 0x1464c
xorps %xmm0, %xmm0
movss %xmm0, 0x10182(%rip)    # 0x14650
movss 0xf02a(%rip), %xmm0     # 0x13500
movss 0x9b46(%rip), %xmm1     # 0xe024
callq 0x8460
movss 0x9b41(%rip), %xmm1     # 0xe02c
mulss %xmm1, %xmm0
movss %xmm0, 0x1015d(%rip)    # 0x14654
movss 0x9b15(%rip), %xmm0     # 0xe014
mulss 0xeff5(%rip), %xmm0     # 0x134fc
movss %xmm0, 0x10149(%rip)    # 0x14658
xorps %xmm0, %xmm0
movss %xmm0, 0xf076(%rip)     # 0x13590
movl $0x0, 0xf058(%rip)      # 0x1357c
movl $0x0, 0xf052(%rip)      # 0x13580
movss 0xefd2(%rip), %xmm0     # 0x13508
mulss 0xefca(%rip), %xmm0     # 0x13508
movss 0x9b02(%rip), %xmm1     # 0xe048
mulss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, 0xf030(%rip)      # 0x13584
movss 0xefb0(%rip), %xmm0     # 0x1350c
mulss 0xefa8(%rip), %xmm0     # 0x1350c
movss 0x9adc(%rip), %xmm1     # 0xe048
mulss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, 0xf00e(%rip)      # 0x13588
movss 0xef8e(%rip), %xmm0     # 0x13510
mulss 0xef86(%rip), %xmm0     # 0x13510
movss 0x9ab6(%rip), %xmm1     # 0xe048
mulss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, 0xefec(%rip)      # 0x1358c
movss 0xef88(%rip), %xmm0     # 0x13530
movss 0x9a74(%rip), %xmm1     # 0xe024
callq 0x8460
movss 0x9a87(%rip), %xmm1     # 0xe044
mulss %xmm1, %xmm0
movss %xmm0, 0xefcb(%rip)     # 0x13594
xorps %xmm0, %xmm0
ucomiss 0xef5d(%rip), %xmm0     # 0x13530
jbe 0x45f2
movss 0xefb7(%rip), %xmm0     # 0x13594
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss %xmm0, 0xefa2(%rip)     # 0x13594
movss 0xef3a(%rip), %xmm0     # 0x13534
movss 0x9a22(%rip), %xmm1     # 0xe024
callq 0x8460
movss 0x99f9(%rip), %xmm1     # 0xe008
mulss %xmm1, %xmm0
movss %xmm0, 0xef7d(%rip)     # 0x13598
xorps %xmm0, %xmm0
ucomiss 0xef0f(%rip), %xmm0     # 0x13534
jbe 0x4644
movss 0xef69(%rip), %xmm0     # 0x13598
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movss %xmm0, 0xef54(%rip)     # 0x13598
cvttss2si 0xef48(%rip), %eax # 0x13594
movl %eax, %ecx
negl %ecx
cmovnsl %ecx, %eax
movl %eax, 0xef43(%rip)      # 0x1359c
movl $0x0, 0xff3d(%rip)      # 0x145a0
movl $0x0, -0x8(%rbp)
cmpl $0x400, -0x8(%rbp)      # imm = 0x400
jge 0x4691
movslq -0x8(%rbp), %rcx
leaq 0xef22(%rip), %rax      # 0x135a0
xorps %xmm0, %xmm0
movss %xmm0, (%rax,%rcx,4)
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0x466a
movl $0x0, -0xc(%rbp)
cmpl $0x20, -0xc(%rbp)
jge 0x46d2
movss 0x997e(%rip), %xmm0     # 0xe024
callq 0x3830
movss 0x9955(%rip), %xmm1     # 0xe008
subss %xmm1, %xmm0
movslq -0xc(%rbp), %rcx
leaq 0xfeee(%rip), %rax      # 0x145b0
movss %xmm0, (%rax,%rcx,4)
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
jmp 0x4698
movl $0x0, 0xff80(%rip)      # 0x1465c
movss 0x9924(%rip), %xmm0     # 0xe008
subss 0xee4c(%rip), %xmm0     # 0x13538
movss 0x9930(%rip), %xmm1     # 0xe024
callq 0x8460
movss 0x991b(%rip), %xmm1     # 0xe01c
mulss %xmm1, %xmm0
movss 0x9913(%rip), %xmm1     # 0xe020
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, 0xff45(%rip)      # 0x14660
movss 0xee15(%rip), %xmm0     # 0x13538
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x4737
jp 0x4737
movl $0x0, 0xff29(%rip)      # 0x14660
jmp 0x4739
addq $0x10, %rsp
popq %rbp
retq
nop