From ae86ec4df6e09ffdc456be0b3e84e90728ee5686 Mon Sep 17 00:00:00 2001 From: hrydgard Date: Sat, 2 May 2009 21:43:38 +0000 Subject: [PATCH] DSP: heavily extend mul test. Seems that only MULX* family instructions support unsigned operation. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3138 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/DSPSpy/tests/mul_test.ds | 268 +++++++++++++++++++++++++++----- 1 file changed, 230 insertions(+), 38 deletions(-) diff --git a/Source/DSPSpy/tests/mul_test.ds b/Source/DSPSpy/tests/mul_test.ds index 030d1cce0a..df5ccec654 100644 --- a/Source/DSPSpy/tests/mul_test.ds +++ b/Source/DSPSpy/tests/mul_test.ds @@ -2,57 +2,249 @@ incdir "tests" include "dsp_base.inc" -SET40 -LRI $AC0.M, #0x1234 -LRI $AC0.L, #0x5678 -SET16 +; Results is in capitails like this: UNSIGNED -m2 +CLR15 + +; Test MULXMVZ - SET15 CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMVZ $AX0.L, $AX1.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMVZ $AX0.L, $AX1.H, $ACC0 ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + +; Test MULXMV - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMV $AX0.L, $AX1.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXMV $AX0.L, $AX1.H, $ACC0 ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + +; Test MULXAC - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXAC $AX0.L, $AX1.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULXAC $AX0.L, $AX1.H, $ACC0 ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + +; Test MULX - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULX $AX0.L, $AX1.H ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.H, #0x100 +MULX $AX0.L, $AX1.H ; UNSIGNED +MOVP $ACC0 +call send_back +CLR15 + + +; Test MADDX - SET15 +CLR $ACC0 +CLRP LRI $AX0.L, #0xFFFF LRI $AX1.L, #0x100 -MULX $AX0.L, $AX1.L -MULXAC $AX0.L, $AX1.L, $ACC0 +MADDX $AX0.L, $AX1.L ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX1.L, #0x100 +MADDX $AX0.L, $AX1.L ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + +; Test MULC - SET15 +CLR $ACC0 +CLRP +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULC $AC0.M, $AX0.H ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULC $AC0.M, $AX0.H ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + +; Test MULCAC - SET15 +CLR $ACC0 +CLRP +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULCAC $AC0.M, $AX0.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +CLRP +SET15 +LRI $AC0.M, #0xFFFF +LRI $AX0.H, #0x100 +MULCAC $AC0.M, $AX0.H, $ACC0 ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + + +; Test MUL - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX0.H, #0x100 +MUL $AX0.L, $AX0.H ; SIGNED +MOVP $ACC0 call send_back CLR $ACC0 SET15 LRI $AX0.L, #0xFFFF -LRI $AX1.L, #0x100 -MULX $AX0.L, $AX1.L -MULXAC $AX0.L, $AX1.L, $ACC0 -CLR15 +LRI $AX0.H, #0x100 +MUL $AX0.L, $AX0.H ; SIGNED (!) +MOVP $ACC0 call send_back -m0 -lri $AX0.L, #1 -lri $AX1.L, #2 -mulx $AX0.L, $AX1.L -movp $ACC0 -call send_back ; 1 +CLR15 + + +; Test MULAC - SET15 +CLR $ACC0 +CLRP +LRI $AX0.L, #0xFFFF +LRI $AX0.H, #0x100 +MULAC $AX0.L, $AX0.H, $ACC0 ; SIGNED +MOVP $ACC0 +call send_back + +CLR $ACC0 +SET15 +LRI $AX0.L, #0xFFFF +LRI $AX0.H, #0x100 +MULAC $AX0.L, $AX0.H, $ACC0 ; SIGNED (!) +MOVP $ACC0 +call send_back +CLR15 + -set15 -lri $AX0.L, #2 -lri $AX1.L, #4 -mulx $AX0.L, $AX1.L -movp $ACC0 -clr15 -call send_back ; 1 -m2 -lri $AX0.L, #1 -lri $AX1.L, #2 -mulx $AX0.L, $AX1.L -movp $ACC0 -call send_back ; 1 -set15 -lri $AX0.L, #2 -lri $AX1.L, #4 -mulx $AX0.L, $AX1.L -movp $ACC0 -clr15 -call send_back ; 1 -m0 ; We're done, DO NOT DELETE THIS LINE jmp end_of_test + +; test accelerator + +; TODO: DSPSpy puts a 16-bit ramp at 0x10000000 +LRIS $AC1.M, #0x0a ; 16-bit PCM audio +;SRS @SampleFormat, $AC1.M +; Start accelerator position +LRI $AC1.M, #0x0100 +SRS @ACCAH, $AC1.M +LRI $AC1.M, #0x1000 +SRS @ACCAH, $AC1.M +; Current accelerator position +LRI $AC1.M, #0x0100 +SRS @ACCAH, $AC1.M +LRI $AC1.M, #0x1000 +SRS @ACCAH, $AC1.M +; End accelerator position +LRI $AC1.M, #0x0100 +SRS @ACCAH, $AC1.M +LRI $AC1.M, #0x2000 +SRS @ACCAH, $AC1.M + +; Now to the interesting parameter - gain. +LRI $AC1.M, #0xFFFF +SRS @GAIN, $AC1.M + +; Let's now load a sample through the accelerator. +LRS $AC1.M, @ARAM +call send_back + +jmp end_of_test + +; test addpaxz +call send_back + +clrp +lri $AX0.L, #0x1111 +lri $AX0.H, #0x2222 +call send_back + +clrp +addpaxz $ACC0, $AX0.H + +call send_back + +clrp +set40 +addpaxz $ACC0, $AX0.H +set16 + +call send_back + +clrp +set15 +addpaxz $ACC0, $AX0.H +clr15 + +call send_back + + +jmp end_of_test +