# FRV testcase for handling of shadow registers SR0-SR4 # mach: frv .include "testutils.inc" start .global tra tra: test_spr_bits 0x800,11,1,psr ; PSR.ESR set test_spr_bits 0x4,2,1,psr ; PSR.S set ; Set up exception handler for later and_spr_immed -4081,tbr ; clear tbr.tt set_gr_spr tbr,gr7 inc_gr_immed 2112,gr7 ; address of exception handler set_bctrlr_0_0 gr7 ; bctrlr 0,0 set_spr_immed 128,lcr set_psr_et 1 set_gr_immed 0x11111111,gr4 ; SGR4-7 set_gr_immed 0x22222222,gr5 set_gr_immed 0x33333333,gr6 set_gr_immed 0x44444444,gr7 set_spr_immed 0x55555555,sr0 ; UGR4-7 set_spr_immed 0x66666666,sr1 set_spr_immed 0x77777777,sr2 set_spr_immed 0x88888888,sr3 and_spr_immed 0xfffff7ff,psr ; turn off PSR.ESR test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 set_spr_immed 0x55555555,sr0 ; SGR4-7 set_spr_immed 0x66666666,sr1 set_spr_immed 0x77777777,sr2 set_spr_immed 0x88888888,sr3 test_gr_immed 0x55555555,gr4 ; SGR4-7 test_gr_immed 0x66666666,gr5 test_gr_immed 0x77777777,gr6 test_gr_immed 0x88888888,gr7 test_spr_immed 0x55555555,sr0 ; SGR4-7 test_spr_immed 0x66666666,sr1 test_spr_immed 0x77777777,sr2 test_spr_immed 0x88888888,sr3 set_gr_immed 0x11111111,gr4 ; SGR4-7 set_gr_immed 0x22222222,gr5 set_gr_immed 0x33333333,gr6 set_gr_immed 0x44444444,gr7 test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 or_spr_immed 0x00000800,psr ; turn on PSR.ESR test_gr_immed 0x11111111,gr4 ; SGR4-7 -- SR0-3 (UGR4-7) are undefined test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 set_spr_immed 0x55555555,sr0 ; UGR4-7 set_spr_immed 0x66666666,sr1 set_spr_immed 0x77777777,sr2 set_spr_immed 0x88888888,sr3 test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x55555555,sr0 ; UGR4-7 test_spr_immed 0x66666666,sr1 test_spr_immed 0x77777777,sr2 test_spr_immed 0x88888888,sr3 and_spr_immed 0xfffffffb,psr ; turn off PSR.S test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 test_gr_immed 0x55555555,gr4 ; UGR4-7 test_gr_immed 0x66666666,gr5 test_gr_immed 0x77777777,gr6 test_gr_immed 0x88888888,gr7 ; need to generate a trap to return to supervisor mode set_spr_addr ok0,lr tira gr0,4 ; should branch to tbr + (128 + 4)*16 test_spr_bits 0x800,11,0,psr ; PSR.ESR clear test_spr_bits 0x4,2,0,psr ; PSR.S clear test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 set_gr_immed 0x55555555,gr4 ; SGR4-7 set_gr_immed 0x66666666,gr5 set_gr_immed 0x77777777,gr6 set_gr_immed 0x88888888,gr7 test_gr_immed 0x55555555,gr4 ; SGR4-7 test_gr_immed 0x66666666,gr5 test_gr_immed 0x77777777,gr6 test_gr_immed 0x88888888,gr7 test_spr_immed 0x55555555,sr0 ; SGR4-7 test_spr_immed 0x66666666,sr1 test_spr_immed 0x77777777,sr2 test_spr_immed 0x88888888,sr3 set_gr_immed 0x11111111,gr4 ; SGR4-7 set_gr_immed 0x22222222,gr5 set_gr_immed 0x33333333,gr6 set_gr_immed 0x44444444,gr7 test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 ; need to generate a trap to return to supervisor mode set_spr_addr ok1,lr tira gr0,4 ; should branch to tbr + (128 + 4)*16 pass ok0: ; exception handler should branch here the first time test_spr_bits 0x800,11,1,psr ; PSR.ESR set test_spr_bits 0x4,2,1,psr ; PSR.S set test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x55555555,sr0 ; UGR4-7 test_spr_immed 0x66666666,sr1 test_spr_immed 0x77777777,sr2 test_spr_immed 0x88888888,sr3 and_spr_immed 0xfffff7ff,psr ; turn off PSR.ESR test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 rett 0 fail ok1: ; exception handler should branch here the second time test_spr_bits 0x800,11,0,psr ; PSR.ESR clear test_spr_bits 0x4,2,1,psr ; PSR.S set test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 set_spr_immed 0x55555555,sr0 ; SGR4-7 set_spr_immed 0x66666666,sr1 set_spr_immed 0x77777777,sr2 set_spr_immed 0x88888888,sr3 test_gr_immed 0x55555555,gr4 ; SGR4-7 test_gr_immed 0x66666666,gr5 test_gr_immed 0x77777777,gr6 test_gr_immed 0x88888888,gr7 test_spr_immed 0x55555555,sr0 ; SGR4-7 test_spr_immed 0x66666666,sr1 test_spr_immed 0x77777777,sr2 test_spr_immed 0x88888888,sr3 set_gr_immed 0x11111111,gr4 ; SGR4-7 set_gr_immed 0x22222222,gr5 set_gr_immed 0x33333333,gr6 set_gr_immed 0x44444444,gr7 test_gr_immed 0x11111111,gr4 ; SGR4-7 test_gr_immed 0x22222222,gr5 test_gr_immed 0x33333333,gr6 test_gr_immed 0x44444444,gr7 test_spr_immed 0x11111111,sr0 ; SGR4-7 test_spr_immed 0x22222222,sr1 test_spr_immed 0x33333333,sr2 test_spr_immed 0x44444444,sr3 rett 0 fail