# frv testcase to generate interrupt for st $GRk,@($GRi,$GRj)
|
# frv testcase to generate interrupt for st $GRk,@($GRi,$GRj)
|
# mach: fr500 frv
|
# mach: fr500 frv
|
.include "testutils.inc"
|
.include "testutils.inc"
|
|
|
start
|
start
|
|
|
.global align
|
.global align
|
align:
|
align:
|
and_spr_immed -4081,tbr ; clear tbr.tt
|
and_spr_immed -4081,tbr ; clear tbr.tt
|
set_gr_spr tbr,gr17
|
set_gr_spr tbr,gr17
|
inc_gr_immed 0x100,gr17 ; address of exception handler
|
inc_gr_immed 0x100,gr17 ; address of exception handler
|
set_bctrlr_0_0 gr17
|
set_bctrlr_0_0 gr17
|
set_spr_immed 128,lcr
|
set_spr_immed 128,lcr
|
set_spr_addr ok1,lr
|
set_spr_addr ok1,lr
|
set_psr_et 1
|
set_psr_et 1
|
set_gr_immed 0xdeadbeef,gr17
|
set_gr_immed 0xdeadbeef,gr17
|
set_gr_immed 0,gr15
|
set_gr_immed 0,gr15
|
inc_gr_immed 2,sp ; out of alignment
|
inc_gr_immed 2,sp ; out of alignment
|
|
|
test_spr_bits 1,0,1,isr ; mem_address_not_aligned is masked
|
test_spr_bits 1,0,1,isr ; mem_address_not_aligned is masked
|
sti gr17,@(sp,0) ; no exception
|
sti gr17,@(sp,0) ; no exception
|
ldi @(sp,-2),gr18 ; stored at aligned address
|
ldi @(sp,-2),gr18 ; stored at aligned address
|
test_gr_immed 0xdeadbeef,gr18
|
test_gr_immed 0xdeadbeef,gr18
|
ldi @(sp,0),gr19 ; no exception
|
ldi @(sp,0),gr19 ; no exception
|
test_gr_immed 0xdeadbeef,gr19
|
test_gr_immed 0xdeadbeef,gr19
|
|
|
and_spr_immed 0xfffffffe,isr ; turn off ISR.EMAM
|
and_spr_immed 0xfffffffe,isr ; turn off ISR.EMAM
|
set_gr_addr bad1,gr16
|
set_gr_addr bad1,gr16
|
bad1: sti gr17,@(sp,0) ; misaligned write in slot I1
|
bad1: sti gr17,@(sp,0) ; misaligned write in slot I1
|
test_gr_immed 1,gr15
|
test_gr_immed 1,gr15
|
|
|
set_gr_addr bad3,gr16
|
set_gr_addr bad3,gr16
|
set_gr_gr sp,gr20
|
set_gr_gr sp,gr20
|
set_gr_immed 1,gr21
|
set_gr_immed 1,gr21
|
set_gr_immed 0x10101010,gr10
|
set_gr_immed 0x10101010,gr10
|
bad2: nop.p
|
bad2: nop.p
|
bad3: ldu @(sp,gr21),gr10 ; misaligned read in slot I2
|
bad3: ldu @(sp,gr21),gr10 ; misaligned read in slot I2
|
test_gr_immed 2,gr15 ; handler was called
|
test_gr_immed 2,gr15 ; handler was called
|
test_gr_immed 0x10101010,gr10 ; gr10 not updated
|
test_gr_immed 0x10101010,gr10 ; gr10 not updated
|
test_gr_immed 1,gr21 ; gr21 not updated
|
test_gr_immed 1,gr21 ; gr21 not updated
|
inc_gr_immed 1,gr20
|
inc_gr_immed 1,gr20
|
test_gr_gr gr20,sp ; sp updated
|
test_gr_gr gr20,sp ; sp updated
|
|
|
pass
|
pass
|
|
|
; exception handler
|
; exception handler
|
ok1:
|
ok1:
|
cmpi gr15,0,icc0
|
cmpi gr15,0,icc0
|
bne icc0,0,load
|
bne icc0,0,load
|
; handle interrupt on store
|
; handle interrupt on store
|
test_spr_immed 0x100,esfr1 ; esr8 is active
|
test_spr_immed 0x100,esfr1 ; esr8 is active
|
test_spr_gr epcr8,gr16
|
test_spr_gr epcr8,gr16
|
test_spr_bits 0x0001,0,0x1,esr8 ; esr8 is valid
|
test_spr_bits 0x0001,0,0x1,esr8 ; esr8 is valid
|
test_spr_bits 0x003e,1,0xb,esr8 ; esr8.ec is set
|
test_spr_bits 0x003e,1,0xb,esr8 ; esr8.ec is set
|
test_spr_bits 0x0800,11,0x1,esr8 ; esr8.eav is set
|
test_spr_bits 0x0800,11,0x1,esr8 ; esr8.eav is set
|
test_spr_gr ear8,sp
|
test_spr_gr ear8,sp
|
test_spr_bits 0x01000,12,0x1,esr8 ; esr8.edv is set
|
test_spr_bits 0x01000,12,0x1,esr8 ; esr8.edv is set
|
test_spr_bits 0x1e000,13,0x3,esr8 ; esr8.edn is 3
|
test_spr_bits 0x1e000,13,0x3,esr8 ; esr8.edn is 3
|
test_spr_gr edr3,gr17 ; edr3 is set
|
test_spr_gr edr3,gr17 ; edr3 is set
|
bra ret
|
bra ret
|
load:
|
load:
|
; handle interrupt on load
|
; handle interrupt on load
|
test_spr_immed 0x200,esfr1 ; esr9 is active
|
test_spr_immed 0x200,esfr1 ; esr9 is active
|
test_spr_gr epcr9,gr16
|
test_spr_gr epcr9,gr16
|
test_spr_bits 0x0001,0,0x1,esr9 ; esr9 is valid
|
test_spr_bits 0x0001,0,0x1,esr9 ; esr9 is valid
|
test_spr_bits 0x003e,1,0xb,esr9 ; esr9.ec is set
|
test_spr_bits 0x003e,1,0xb,esr9 ; esr9.ec is set
|
test_spr_bits 0x0800,11,0x1,esr9 ; esr9.eav is set
|
test_spr_bits 0x0800,11,0x1,esr9 ; esr9.eav is set
|
test_spr_gr ear9,sp
|
test_spr_gr ear9,sp
|
test_spr_bits 0x1000,12,0x0,esr9 ; esr9.edv is not set
|
test_spr_bits 0x1000,12,0x0,esr9 ; esr9.edv is not set
|
ret:
|
ret:
|
inc_gr_immed 1,gr15
|
inc_gr_immed 1,gr15
|
rett 0
|
rett 0
|
fail
|
fail
|
|
|