# FRV testcase
|
# FRV testcase
|
# mach: fr500 fr550 fr400
|
# mach: fr500 fr550 fr400
|
|
|
.include "testutils.inc"
|
.include "testutils.inc"
|
|
|
start
|
start
|
|
|
.global tra
|
.global tra
|
tra:
|
tra:
|
and_spr_immed 0x3fffffff,hsr0 ; no caches enabled
|
and_spr_immed 0x3fffffff,hsr0 ; no caches enabled
|
|
|
and_spr_immed -4081,tbr ; clear tbr.tt
|
and_spr_immed -4081,tbr ; clear tbr.tt
|
set_gr_spr tbr,gr7
|
set_gr_spr tbr,gr7
|
inc_gr_immed 0x070,gr7 ; address of exception handler
|
inc_gr_immed 0x070,gr7 ; address of exception handler
|
set_bctrlr_0_0 gr7
|
set_bctrlr_0_0 gr7
|
inc_gr_immed 0x790,gr7 ; address of exception handler
|
inc_gr_immed 0x790,gr7 ; address of exception handler
|
set_bctrlr_0_0 gr7
|
set_bctrlr_0_0 gr7
|
set_spr_immed 128,lcr
|
set_spr_immed 128,lcr
|
set_psr_et 1
|
set_psr_et 1
|
set_spr_addr ok0,lr
|
set_spr_addr ok0,lr
|
|
|
set_gr_addr ill1,gr7
|
set_gr_addr ill1,gr7
|
set_mem_immed 0x81f80000,gr7 ; unknown opcode: 7E
|
set_mem_immed 0x81f80000,gr7 ; unknown opcode: 7E
|
ill1: tira gr0,0 ; should be overridden
|
ill1: tira gr0,0 ; should be overridden
|
ill2: nop ; also illegal, but prev has priority
|
ill2: nop ; also illegal, but prev has priority
|
bad0: fail
|
bad0: fail
|
|
|
; check interrupt
|
; check interrupt
|
ok0: test_spr_addr ill1,pcsr
|
ok0: test_spr_addr ill1,pcsr
|
test_spr_immed 1,esfr1 ; esr0 active
|
test_spr_immed 1,esfr1 ; esr0 active
|
test_spr_bits 0x3f,0,0xb,esr0
|
test_spr_bits 0x3f,0,0xb,esr0
|
movsg psr,gr28
|
movsg psr,gr28
|
srli gr28,28,gr28
|
srli gr28,28,gr28
|
subicc gr28,0x3,gr0,icc3 ; is fr550?
|
subicc gr28,0x3,gr0,icc3 ; is fr550?
|
beq icc3,0,no_epcr
|
beq icc3,0,no_epcr
|
test_spr_addr ill1,epcr0
|
test_spr_addr ill1,epcr0
|
no_epcr:
|
no_epcr:
|
pass
|
pass
|
|
|