; 8-bit interpolated mixing routine, 4 samples at a time. Rearranged ; MM7 contains volume as packed floating point ; MM6 contains offset as packed integer offset ; MM5 = DeltaOffset ; MM7 = RVol|LVol ; MM6 = (1-Offset2)|Offset2|(1-Offset1)|Offset1 MovD MM0, [SampleBlock1] ; MM0 = x|x|x|x|S2H|S2L|S1H|S1L MovQ MM2, MM6 PSRAW MM2, 1 PUnpckLBW MM0, MM0 ; MM0 = S2H|S2L|S1H|S1L PAddW MM6, MM5 PMAddWD MM0, MM2 ; MM0 = IS2|IS1 MovD MM1, [SampleBlock2] ; MM1 = x|x|x|x|S4H|S4L|S3H|S3L MovQ MM2, MM6 PUnpckLBW MM1, MM1 ; MM1 = S4H|S4L|S3H|S3L PSRAW MM2, 1 PI2FD MM0, MM0 ; MM0 = FIS2|FIS1 PMAddWD MM1, MM2 ; MM1 = IS4|IS3 MovQ MM2, MM0 PUnpckLDQ MM0, MM0 ; MM0 = FIS1|FIS1 PUnpckHDQ MM2, MM2 ; MM2 = FIS2|FIS2 PI2FD MM1, MM1 ; MM1 = FIS4|FIS3 PFMul MM0, MM7 ; MM0 = R1|L1 PAddW MM6, MM5 PFMul MM2, MM7 ; MM2 = R2|L2 MovQ MM3, MM1 PFAdd MM0, [Buffer1] PUnpckLDQ MM1, MM1 ; MM1 = FIS3|FIS3 PFAdd MM2, [Buffer2] PUnpckHDQ MM3, MM3 ; MM3 = FIS4|FIS4 PFMul MM1, MM7 MovQ [Buffer1], MM0 PFMul MM3, MM7 PFAdd MM1, [Buffer3] MovQ [Buffer2], MM2 PFAdd MM3, [Buffer4] MovQ [Buffer3], MM1 MovQ [Buffer4], MM3