1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
ix!();
impl crate::SurgeSuperOscillator {
pub fn maybe_handle_wrap(&mut self,stereo: bool) {
if self.blitter.bufpos == 0 {
const SZ: usize = FIR_IPOL_N >> 2;
unsafe {
let mut dcoverlap: [__m128; SZ] = [z128![]; SZ];
let mut overlap_l: [__m128; SZ] = [z128![]; SZ];
let mut overlap_r: [__m128; SZ] = [z128![]; SZ];
let zero: __m128 = _mm_setzero_ps();
for k in (0..FIR_IPOL_N).step_by(4) {
overlap_l[k >> 2] = _mm_load_ps(&mut self.blitter.oscbuffer_l[OB_LENGTH + k] as *mut f32);
_mm_store_ps(&mut self.blitter.oscbuffer_l[k], overlap_l[k >> 2]);
_mm_store_ps(&mut self.blitter.oscbuffer_l[OB_LENGTH + k], zero);
dcoverlap[k >> 2] = _mm_load_ps(&mut self.blitter.dcbuffer[OB_LENGTH + k] as *mut f32);
_mm_store_ps(&mut self.blitter.dcbuffer[k], dcoverlap[k >> 2]);
_mm_store_ps(&mut self.blitter.dcbuffer[OB_LENGTH + k], zero);
if stereo {
overlap_r[k >> 2] = _mm_load_ps(&mut self.blitter.oscbuffer_r[OB_LENGTH + k] as *mut f32);
_mm_store_ps(&mut self.blitter.oscbuffer_r[k], overlap_r[k >> 2]);
_mm_store_ps(&mut self.blitter.oscbuffer_r[OB_LENGTH + k], zero);
}
}
}
}
}
}