From c631a90e22a861c2dfbfb244b30718837c9690b4 Mon Sep 17 00:00:00 2001 From: pagefault <> Date: Wed, 19 Mar 2003 22:45:05 +0000 Subject: [PATCH] Signed saturation fix for gaussian interpolation (Thanks kode54) --- zsnes/src/cpu/dspproc.asm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/zsnes/src/cpu/dspproc.asm b/zsnes/src/cpu/dspproc.asm index 3b9affd8..cf910bb1 100644 --- a/zsnes/src/cpu/dspproc.asm +++ b/zsnes/src/cpu/dspproc.asm @@ -3549,6 +3549,16 @@ DSPInterpolate_4 add ecx,edx sar ecx,11 + + cmp ecx, -32768 + jge .sat1 + mov ecx, -32768 +.sat1 + cmp ecx, 32767 + jle .sat2 + mov ecx, 32767 +.sat2 + mov ax,cx pop edi ret @@ -3610,13 +3620,13 @@ DSPInterpolate_4_mmx: packssdw mm0,[edx*4+PSampleBuf+edi+16] movq mm1,[DSPInterP+eax*8] pmaddwd mm0,mm1 - movd eax, mm0 + movq mm1, mm0 psrlq mm0, 32 - movd ebx, mm0 + paddd mm0, mm1 + psrad mm0, 11 + packssdw mm0, mm0 + movd eax, mm0 emms - add eax,ebx - sar eax,11 - pop edi ret