# frv testcase to generate interrupt for st $GRk,@($GRi,$GRj) # mach: fr550 .include "testutils.inc" start .global align align: and_spr_immed -4081,tbr ; clear tbr.tt set_gr_spr tbr,gr17 inc_gr_immed 0x100,gr17 ; address of exception handler set_bctrlr_0_0 gr17 set_spr_immed 128,lcr set_psr_et 1 set_gr_immed 0xdeadbeef,gr17 set_gr_immed 0,gr15 inc_gr_immed 2,sp ; out of alignment test_spr_bits 1,0,0,isr ; ISR.EMAM always clear (not used) sti gr17,@(sp,0) ; no exception sti gr17,@(sp,4) ; no exception ldi @(sp,0),gr18 ; stored at unaligned address test_gr_immed 0xdeadbeef,gr18 ldi @(sp,0),gr19 ; no exception test_gr_immed 0xdeadbeef,gr19 and_spr_immed 0xfffffffe,isr ; turn off ISR.EMAM sti gr17,@(sp,0) ; misaligned -- no exception test_gr_immed 0,gr15 set_gr_gr sp,gr20 set_gr_immed 1,gr21 set_gr_immed 0x10101010,gr10 nop.p ldu @(sp,gr21),gr10 ; misaligned read no exception test_gr_immed 0,gr15 ; handler was not called test_gr_immed 0xadbeefde,gr10 ; gr10 updated test_gr_immed 1,gr21 ; gr21 not updated inc_gr_immed 1,gr20 test_gr_gr gr20,sp ; sp updated pass