dolphin/Source/DSPSpy/tests/ir_test.ds
Pokechu22 51c26d82a5 DSPSpy: Require user to specify a test_main label
This makes the point where execution starts more obvious compared to a start_of_test label at the end of the include, and allows putting other functions at the start of the file.  This change also modifies the existing tests to build with this change.
2021-08-22 10:49:46 -07:00

319 lines
5.6 KiB
Text

; This test checks the effect of the index looping registers (R8-R11)
incdir "tests"
include "dsp_base.inc"
; First theories, fitting tests with nice masks in the loop registers
; IR THEORY: if ((ar & lp) == lp) ar &= ~lp;
; DR THEORY: if ((ar & lp) == 0) ar |= lp;
; These were proven FALSE though by the following:
; Tests done using AR1 = 0x0010, IX1 = 0
; WR1 = 0
; 10, 11, 11, 11, 11......
; WR1 = 1
; 10, 11, 10, 11, 10......
; WR1 = 2
; 10, 11, 12, 13, 11, 12, 13, 11, 12, 13 ......
; WR1 = 3
; 10, 11, 12, 13, 10, 11, 12, 13, 10, 11, 12, 13.......
; WR1 = 4
; 10, 11, 12, 13, 14, 15, 16, 17, 13, 14, 15, 16, 17, 13, 14, 15 ......
; WR1 = 5
; 10, 11, 12, 13, 14, 15, 16, 17, 12, 13, 14, 15 ...
; WR1 = 6
; 10, 11, 12, 13, 14, 15, 16, 17, 11, 12, 13, 14...
; WR1 = 7
; 10, 11, 12, 13, 14, 15, 16, 17, 10, 11, ....
; WR1 = 8
; 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 1a, 1b, 1c, 1d, 1e, 1f, 17, 18, 19, 1a, 1b.....
; I really don't know how the above could possibly be efficiently implemented in hardware.
; And thus it's tricky to implement in software too :p
test_main:
; test using indexing register 1 - 0 is used in send_back
lri $AR1, #16
lri $IX1, #32
lri $WR1, #0
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #2
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #3
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #4
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #5
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #6
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #7
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $AR1, #16
lri $WR1, #8
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
nx'ir : $AR1
call send_back ; 1
lri $WR1, #0xFFFF
; We're done, DO NOT DELETE THIS LINE
jmp end_of_test