blob: ee6bea45e7175a8cdeae51ae99b106c52e156526 [file] [log] [blame]
# 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