R&R wrote:Jumping between threads...

just like I've broken my own original plan a whole lot by adding the option-dropdown to begin with.
What a letdown!
Might as well keep going.
Still not sure about naming...
Screenhot_v0.51.jpg
The "P1 Decay..." dropdown-items? Should I call it decay, strike or exciter? It's just an oscillator for a (decay or gated) burst to get a feedback loop ringing.
Just by this screenshot what would be the most clear naming, for drawing "an only visual" conclusion of what the function is...?
As mentioned had to scrap that Osc Module for now

sounded completely different at different samplerates. Didn't know it was called this but apparently a Karplus-Strong circuit as shown in Martins interpolated delay demo.
I suspect the issue with my Osc Module is likely all interpolation differences adding up together ending up as different sum/output. Have to learn more I think
Anyways...
As this thread begun as an ASM question... i'll return to basic ASM question again
This is some poly-spaghetti run through the signal analyzer:
Code: Select all
movaps [ebp+4208],xmm6; // 0f 29 b5 70 10 00 00
movaps [ebp+4224],xmm7; // 0f 29 bd 80 10 00 00
movaps xmm0,[ebp]; // 0f 28 85 00 00 00 00
mulps xmm0,[ebp+12640]; // 0f 59 85 60 31 00 00
movaps [ebp+12624],xmm0; // 0f 29 85 50 31 00 00
movaps xmm0,[ebp]; // 0f 28 85 00 00 00 00
mulps xmm0,[ebp]; // 0f 59 85 00 00 00 00
movaps [ebp+12768],xmm0; // 0f 29 85 e0 31 00 00
movaps xmm0,[ebp]; // 0f 28 85 00 00 00 00
mulps xmm0,[ebp+12768]; // 0f 59 85 e0 31 00 00
movaps [ebp+12752],xmm0; // 0f 29 85 d0 31 00 00
movaps xmm0,[ebp]; // 0f 28 85 00 00 00 00
mulps xmm0,[ebp+12880]; // 0f 59 85 50 32 00 00
movaps [ebp+12864],xmm0; // 0f 29 85 40 32 00 00
movaps xmm0,[ebp]; // 0f 28 85 00 00 00 00
maxps xmm0,[ebp+12992]; // 0f 5f 85 c0 32 00 00
movaps [ebp+12976],xmm0; // 0f 29 85 b0 32 00 00
movaps xmm0,[ebp+12976]; // 0f 28 85 b0 32 00 00
addps xmm0,[ebp+13008]; // 0f 58 85 d0 32 00 00
movaps [ebp+12912],xmm0; // 0f 29 85 70 32 00 00
movaps xmm0,[ebp+12912]; // 0f 28 85 70 32 00 00
mulps xmm0,[ebp+13024]; // 0f 59 85 e0 32 00 00
movaps [ebp+12896],xmm0; // 0f 29 85 60 32 00 00
movaps xmm0,[ebp+12848]; // 0f 28 85 30 32 00 00
addps xmm0,[ebp+12864]; // 0f 58 85 40 32 00 00
addps xmm0,[ebp+12896]; // 0f 58 85 60 32 00 00
movaps [ebp+12784],xmm0; // 0f 29 85 f0 31 00 00
movaps xmm0,[ebp+12752]; // 0f 28 85 d0 31 00 00
mulps xmm0,[ebp+12784]; // 0f 59 85 f0 31 00 00
movaps [ebp+12736],xmm0; // 0f 29 85 c0 31 00 00
movaps xmm0,[ebp+12720]; // 0f 28 85 b0 31 00 00
addps xmm0,[ebp+12736]; // 0f 58 85 c0 31 00 00
movaps [ebp+12656],xmm0; // 0f 29 85 70 31 00 00
movaps xmm0,[ebp+12624]; // 0f 28 85 50 31 00 00
mulps xmm0,[ebp+12656]; // 0f 59 85 70 31 00 00
movaps [ebp+12608],xmm0; // 0f 29 85 40 31 00 00
movaps xmm7,[ebp+4224]; // 0f 28 bd 80 10 00 00
movaps xmm6,[ebp+4208]; // 0f 28 b5 70 10 00 00
26 movaps
7 mulps
4 addps
1 maxps
Same functionality but as ASM box run through the signal analyzer:
Code: Select all
movaps [ebp+4208],xmm6; // 0f 29 b5 70 10 00 00
movaps [ebp+4224],xmm7; // 0f 29 bd 80 10 00 00
movaps xmm0,[ebp]; // 0f 28 85 00 00 00 00
mulps xmm0,[ebp+12688]; // 0f 59 85 90 31 00 00
movaps xmm1,[ebp]; // 0f 28 8d 00 00 00 00
maxps xmm1,[ebp+12640]; // 0f 5f 8d 60 31 00 00
addps xmm1,[ebp+12656]; // 0f 58 8d 70 31 00 00
mulps xmm1,[ebp+12704]; // 0f 59 8d a0 31 00 00
addps xmm0,xmm1; // 0f 58 c1
addps xmm0,[ebp+12720]; // 0f 58 85 b0 31 00 00
movaps xmm1,[ebp]; // 0f 28 8d 00 00 00 00
mulps xmm1,xmm1; // 0f 59 c9
mulps xmm1,[ebp]; // 0f 59 8d 00 00 00 00
mulps xmm0,xmm1; // 0f 59 c1
addps xmm0,[ebp+12672]; // 0f 58 85 80 31 00 00
movaps xmm1,[ebp]; // 0f 28 8d 00 00 00 00
mulps xmm1,[ebp+12624]; // 0f 59 8d 50 31 00 00
mulps xmm0,xmm1; // 0f 59 c1
movaps [ebp+12608],xmm0; // 0f 29 85 40 31 00 00
movaps xmm7,[ebp+4224]; // 0f 28 bd 80 10 00 00
movaps xmm6,[ebp+4208]; // 0f 28 b5 70 10 00 00
9 movaps
7 mulps
4 addps
1 maxps
If such is the case that custom ASM boxes are more efficient... it's of course a balance between "schematic readability" and "micro-optimization" in the end. But some confined modules/parts/pieces of spaghetti can easily be converted.
So... does this actually mean 17 less of those aligned move operation? Or is there just some compiler magic taking place inside FS that makes it unnecessary even bothering to convert as much spaghetti to ASM boxes as possible regarding reduction of movaps operations?