Home | History | Annotate | Line # | Download | only in interrupts
      1  1.1  christos # frv testcase to generate interrupts for bad register alignment
      2  1.1  christos # mach: frv
      3  1.1  christos 	.include "testutils.inc"
      4  1.1  christos 
      5  1.1  christos 	start
      6  1.1  christos 
      7  1.1  christos 	.global align
      8  1.1  christos align:
      9  1.1  christos 	and_spr_immed	-4081,tbr		; clear tbr.tt
     10  1.1  christos 	set_gr_spr	tbr,gr17
     11  1.1  christos 	inc_gr_immed	0x080,gr17		; address of exception handler
     12  1.1  christos 	set_bctrlr_0_0  gr17
     13  1.1  christos 	inc_gr_immed	0x050,gr17		; address of exception handler
     14  1.1  christos 	set_bctrlr_0_0  gr17
     15  1.1  christos 	set_spr_immed	128,lcr
     16  1.1  christos 	set_spr_addr	ok1,lr
     17  1.1  christos 	set_psr_et	1
     18  1.1  christos 
     19  1.1  christos 	; Make the the register number odd at bad[1-4], bad9 and bada.
     20  1.1  christos 	; We can't simply code an odd register number because the assembler
     21  1.1  christos 	; will catch the error.
     22  1.1  christos 	set_gr_mem	bad1,gr10
     23  1.1  christos 	or_gr_immed	0x02000000,gr10
     24  1.1  christos 	set_mem_gr	gr10,bad1
     25  1.1  christos 	set_gr_addr	bad1,gr10
     26  1.1  christos 	flush_data_cache gr10
     27  1.1  christos 	set_gr_mem	bad2,gr10
     28  1.1  christos 	or_gr_immed	0x02000000,gr10
     29  1.1  christos 	set_mem_gr	gr10,bad2
     30  1.1  christos 	set_gr_addr	bad2,gr10
     31  1.1  christos 	flush_data_cache gr10
     32  1.1  christos 	set_gr_mem	bad3,gr10
     33  1.1  christos 	or_gr_immed	0x02000000,gr10
     34  1.1  christos 	set_mem_gr	gr10,bad3
     35  1.1  christos 	set_gr_addr	bad3,gr10
     36  1.1  christos 	flush_data_cache gr10
     37  1.1  christos 	set_gr_mem	bad4,gr10
     38  1.1  christos 	or_gr_immed	0x02000000,gr10
     39  1.1  christos 	set_mem_gr	gr10,bad4
     40  1.1  christos 	set_gr_addr	bad4,gr10
     41  1.1  christos 	flush_data_cache gr10
     42  1.1  christos 	set_gr_mem	bad9,gr10
     43  1.1  christos 	or_gr_immed	0x02000000,gr10
     44  1.1  christos 	set_mem_gr	gr10,bad9
     45  1.1  christos 	set_gr_addr	bad9,gr10
     46  1.1  christos 	flush_data_cache gr10
     47  1.1  christos 	set_gr_mem	bada,gr10
     48  1.1  christos 	or_gr_immed	0x02000000,gr10
     49  1.1  christos 	set_mem_gr	gr10,bada
     50  1.1  christos 	set_gr_addr	bada,gr10
     51  1.1  christos 	flush_data_cache gr10
     52  1.1  christos 
     53  1.1  christos 	set_gr_immed	4,gr20		; PC increment
     54  1.1  christos 	set_gr_immed	0,gr15
     55  1.1  christos 	inc_gr_immed	-12,sp		; for memory alignment
     56  1.1  christos 
     57  1.1  christos 	set_gr_addr	bad1,gr17
     58  1.1  christos bad1:	stdi	gr0,@(sp,0)		; misaligned reg
     59  1.1  christos 	test_gr_immed	1,gr15
     60  1.1  christos 
     61  1.1  christos 	set_gr_addr	bad2,gr17
     62  1.1  christos bad2:	lddi	@(sp,0),gr8		; misaligned reg
     63  1.1  christos 	test_gr_immed	2,gr15
     64  1.1  christos 
     65  1.1  christos 	set_gr_addr	bad3,gr17
     66  1.1  christos bad3:	stdc	cpr0,@(sp,gr0)		; misaligned reg
     67  1.1  christos 	test_gr_immed	3,gr15
     68  1.1  christos 
     69  1.1  christos 	set_gr_addr	bad4,gr17
     70  1.1  christos bad4:	lddc	@(sp,gr0),cpr8		; misaligned reg
     71  1.1  christos 	test_gr_immed	4,gr15
     72  1.1  christos 
     73  1.1  christos 	set_gr_addr	bad5,gr17
     74  1.1  christos bad5:	stqi	gr2,@(sp,0)		; misaligned reg
     75  1.1  christos 	test_gr_immed	5,gr15
     76  1.1  christos 
     77  1.1  christos 	set_gr_addr	bad6,gr17
     78  1.1  christos bad6:	ldqi	@(sp,0),gr10		; misaligned reg
     79  1.1  christos 	test_gr_immed	6,gr15
     80  1.1  christos 
     81  1.1  christos 	set_gr_addr	bad7,gr17
     82  1.1  christos bad7:	stqc	cpr2,@(sp,gr0)		; misaligned reg
     83  1.1  christos 	test_gr_immed	7,gr15
     84  1.1  christos 
     85  1.1  christos 	set_gr_addr	bad8,gr17
     86  1.1  christos bad8:	ldqc	@(sp,gr0),cpr10		; misaligned reg
     87  1.1  christos 	test_gr_immed   8,gr15
     88  1.1  christos 
     89  1.1  christos 	set_gr_immed	0,gr20		; PC increment
     90  1.1  christos 	set_gr_addr	bad9,gr17
     91  1.1  christos bad9:	stdfi	fr0,@(sp,0)		; misaligned reg
     92  1.1  christos 	test_gr_immed	9,gr15
     93  1.1  christos 
     94  1.1  christos 	set_gr_addr	bada,gr17
     95  1.1  christos bada:	lddfi	@(sp,0),fr8		; misaligned reg
     96  1.1  christos 	test_gr_immed	10,gr15
     97  1.1  christos 
     98  1.1  christos 	set_gr_addr	badb,gr17
     99  1.1  christos badb:	stqfi	fr2,@(sp,0)		; misaligned reg
    100  1.1  christos 	test_gr_immed   11,gr15
    101  1.1  christos 
    102  1.1  christos 	set_gr_addr	badc,gr17
    103  1.1  christos badc:	ldqfi	@(sp,0),fr10		; misaligned reg
    104  1.1  christos 	test_gr_immed	12,gr15
    105  1.1  christos 
    106  1.1  christos 	pass
    107  1.1  christos 
    108  1.1  christos ; exception handler
    109  1.1  christos ok1:
    110  1.1  christos 	cmpi		gr20,0,icc0
    111  1.1  christos 	beq		icc0,0,float
    112  1.1  christos 
    113  1.1  christos 	; check register_exception
    114  1.1  christos 	test_spr_immed	0x1,esfr1		; esr0 is active
    115  1.1  christos 	test_spr_gr	epcr0,gr17
    116  1.1  christos 	test_spr_bits	0x0001,0,0x1,esr0	; esr0 is valid
    117  1.1  christos 	test_spr_bits	0x003e,1,0xc,esr0	; esr0.ec is set
    118  1.1  christos 	test_spr_bits	0x00c0,6,0x1,esr0	; esr0.rec is set
    119  1.1  christos 	test_spr_bits	0x0800,11,0x0,esr0	; esr0.eav is not set
    120  1.1  christos 	movsg		pcsr,gr60
    121  1.1  christos 	add		gr60,gr20,gr60
    122  1.1  christos 	movgs		gr60,pcsr
    123  1.1  christos 	bra		ret
    124  1.1  christos float:
    125  1.1  christos 	; check fp_exception
    126  1.1  christos 	test_spr_immed	0,esfr1			; no esr's active
    127  1.1  christos ret:
    128  1.1  christos 	inc_gr_immed	1,gr15
    129  1.1  christos 	rett		0
    130  1.1  christos 	fail
    131