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