Add fr450 support.
[deliverable/binutils-gdb.git] / sim / testsuite / sim / frv / interrupts / fp_exception.cgs
1 # frv testcase to generate fp_exception
2 # mach: fr500
3 .include "testutils.inc"
4
5 float_constants
6 start
7 load_float_constants
8
9 .global align
10 align:
11 ; clear the packing bit if the insn at 'pack:'. We can't simply use
12 ; '.p' because the assembler will catch the error.
13 set_gr_mem pack,gr10
14 and_gr_immed 0x7fffffff,gr10
15 set_mem_gr gr10,pack
16 set_gr_addr pack,gr10
17 flush_data_cache gr10
18
19 ; Make the the source register number odd at badst. We can't simply
20 ; code an odd register number because the assembler will catch the
21 ; error.
22 set_gr_mem badst,gr10
23 or_gr_immed 0x02000000,gr10
24 set_mem_gr gr10,badst
25 set_gr_addr badst,gr10
26 flush_data_cache gr10
27
28 ; Make the the dest register number odd at ld. We can't simply
29 ; code an odd register number because the assembler will catch the
30 ; error.
31 set_gr_mem badld,gr10
32 or_gr_immed 0x02000000,gr10
33 set_mem_gr gr10,badld
34 set_gr_addr badld,gr10
35 flush_data_cache gr10
36
37 and_spr_immed -4081,tbr ; clear tbr.tt
38 set_gr_spr tbr,gr17
39 inc_gr_immed 0x070,gr17 ; address of exception handler
40 set_bctrlr_0_0 gr17
41 inc_gr_immed 0x060,gr17 ; address of exception handler
42 set_bctrlr_0_0 gr17
43 set_spr_immed 128,lcr
44 set_spr_addr ok1,lr
45 set_psr_et 1
46 inc_gr_immed -4,sp ; for alignment
47
48 set_gr_immed 0,gr20 ; PC increment
49 set_gr_immed 0,gr15
50
51 set_spr_addr ok3,lr
52 badst: stdfi fr0,@(sp,0) ; misaligned reg -- slot I0
53 test_gr_immed 1,gr15
54
55 set_spr_addr ok4,lr
56 nop.p
57 badld: lddfi @(sp,0),fr8 ; misaligned reg -- slot I1
58 test_gr_immed 2,gr15
59
60 set_spr_addr ok5,lr
61 fnegs.p fr9,fr9
62 pack: fnegs fr10,fr10
63 fnegs fr10,fr11 ; packing violation
64 test_gr_immed 3,gr15
65
66 set_spr_addr ok1,lr
67 set_gr_immed 4,gr20 ; PC increment
68 bad: .word 0x83e502c4 ; fmadds fr16,fr4,fr1 (unimplemented)
69 test_gr_immed 4,gr15
70
71 and_spr_immed 0xfbffffff,fsr0 ; disable div/0 fp_exception
72 set_fr_iimmed 0x7f7f,0xffff,fr0
73 set_fr_iimmed 0x0000,0x0000,fr1
74 fdivs fr0,fr1,fr2 ; div/0 -- no exception
75 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is still set
76 test_spr_bits 0xfc00,10,0x4,fsr0 ; fsr0.aexc is still set
77 test_spr_bits 0xe0000,17,0x0,fsr0 ; fsr0.ftt is clear
78 and_spr_immed 0xffefffff,fsr0 ; Clear fsr0.qne
79
80 set_spr_addr ok2,lr
81 set_gr_immed 0,gr20 ; PC increment
82 or_spr_immed 0x04000000,fsr0 ; enable div/0 fp_exception
83 set_fr_iimmed 0xdead,0xbeef,fr2
84 fdivs fr0,fr1,fr2 ; fp_exception - div/0
85 test_fr_iimmed 0xdeadbeef,fr2 ; fr2 not updated
86 test_gr_immed 5,gr15
87
88 and_spr_immed 0xfdffffff,fsr0 ; disable inexact fp_exception
89 fsqrts fr32,fr2 ; inexact -- no exception
90 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is still set
91 test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is set
92 test_spr_bits 0xe0000,17,0x0,fsr0 ; fsr0.ftt is clear
93
94 set_fr_fr fr2,fr3 ; sqrt 2
95 set_fr_iimmed 0xdead,0xbeef,fr2
96 set_spr_addr ok6,lr
97 or_spr_immed 0x02000000,fsr0 ; enable inexact fp_exception
98 fsqrts fr32,fr2 ; fp_exception - inexact
99 test_gr_immed 6,gr15 ; handler called
100 test_fr_fr fr2,fr3 ; fr2 updated
101
102 set_fr_iimmed 0xdead,0xbeef,fr2
103 set_spr_addr ok7,lr
104 fsqrts fr32,fr2 ; fp_exception - inexact again
105 test_gr_immed 7,gr15 ; handler called
106 test_fr_fr fr2,fr3 ; fr2 updated
107
108 pass
109
110 ; exception handler 1 -- bad insn
111 ok1:
112 test_spr_immed 1,esfr1 ; esr0 active
113 test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set
114 test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set
115 test_spr_addr bad,epcr0
116 bra ret
117
118 ; exception handler 2 - fp_exception: divide by 0
119 ok2:
120 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is set
121 test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set
122 test_spr_bits 0xfc00,10,0x4,fsr0 ; fsr0.aexc is still set
123
124 test_spr_bits 0x80000000,31,0x0,fqst2 ; fq2.miv is set
125 test_spr_bits 0x18000,15,0x0,fqst2 ; fq2.sie is set
126 test_spr_bits 0x380,7,0x1,fqst2 ; fq2.ftt is set
127 test_spr_bits 0x7e,1,0x4,fqst2 ; fq2.cexc is set
128 test_spr_bits 0x1,0,0x1,fqst2 ; fq2.valid is set
129 test_spr_immed 0x85e40241,fqop2 ; fq2.opc
130 bra ret
131
132 ; exception handler 3 - fp_exception: register exception
133 ok3:
134 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is set
135 test_spr_bits 0xe0000,17,0x6,fsr0 ; fsr0.ftt is set
136 test_spr_bits 0xfc00,10,0x0,fsr0 ; fsr0.aexc is clear
137
138 test_spr_bits 0x80000000,31,0x0,fqst2 ; fq2.miv is set
139 test_spr_bits 0x18000,15,0x0,fqst2 ; fq2.sie is set
140 test_spr_bits 0x380,7,0x6,fqst2 ; fq2.ftt is set
141 test_spr_bits 0x7e,1,0x0,fqst2 ; fq2.cexc is set
142 test_spr_bits 0x1,0,0x1,fqst2 ; fq2.valid is set
143 test_spr_immed 0x83581000,fqop2 ; fq2.opc
144 bra ret
145
146 ; exception handler 4 - fp_exception: another register exception
147 ok4:
148 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is set
149 test_spr_bits 0xe0000,17,0x6,fsr0 ; fsr0.ftt is set
150 test_spr_bits 0xfc00,10,0x0,fsr0 ; fsr0.aexc is still clear
151
152 test_spr_bits 0x80000000,31,0x0,fqst3 ; fq3.miv is set
153 test_spr_bits 0x18000,15,0x0,fqst3 ; fq3.sie is set
154 test_spr_bits 0x380,7,0x6,fqst3 ; fq3.ftt is set
155 test_spr_bits 0x7e,1,0x0,fqst3 ; fq3.cexc is set
156 test_spr_bits 0x1,0,0x1,fqst3 ; fq3.valid is set
157 test_spr_immed 0x92ec1000,fqop3 ; fq3.opc
158 bra ret
159
160 ; exception handler 5 - fp_exception: sequence violation
161 ok5:
162 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is set
163 test_spr_bits 0xe0000,17,0x4,fsr0 ; fsr0.ftt is set
164 test_spr_bits 0xfc00,10,0x0,fsr0 ; fsr0.aexc is still clear
165
166 test_spr_bits 0x80000000,31,0x0,fqst3 ; fq3.miv is set
167 test_spr_bits 0x18000,15,0x0,fqst3 ; fq3.sie is set
168 test_spr_bits 0x380,7,0x4,fqst3 ; fq3.ftt is set
169 test_spr_bits 0x7e,1,0x0,fqst3 ; fq3.cexc is set
170 test_spr_bits 0x1,0,0x1,fqst3 ; fq3.valid is set
171 test_spr_immed 0x97e400ca,fqop3 ; fq3.opc
172 bra ret
173
174 ; exception handler 6 - fp_exception: inexact
175 ok6:
176 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is set
177 test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set
178 test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is still set
179
180 test_spr_bits 0x80000000,31,0x0,fqst0 ; fq0.miv is set
181 test_spr_bits 0x18000,15,0x0,fqst0 ; fq0.sie is set
182 test_spr_bits 0x380,7,0x1,fqst0 ; fq0.ftt is set
183 test_spr_bits 0x7e,1,0x2,fqst0 ; fq0.cexc is set
184 test_spr_bits 0x1,0,0x1,fqst0 ; fq0.valid is set
185 test_spr_immed 0x85e40160,fqop0 ; fq0.opc
186 bra ret
187
188 ; exception handler 7 - fp_exception: inexact again
189 ok7:
190 test_spr_bits 0x100000,20,0x1,fsr0 ; fsr0.qne is set
191 test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set
192 test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is still set
193
194 test_spr_bits 0x80000000,31,0x0,fqst1 ; fq1.miv is set
195 test_spr_bits 0x18000,15,0x0,fqst1 ; fq1.sie is set
196 test_spr_bits 0x380,7,0x1,fqst1 ; fq1.ftt is set
197 test_spr_bits 0x7e,1,0x2,fqst1 ; fq1.cexc is set
198 test_spr_bits 0x1,0,0x1,fqst1 ; fq1.valid is set
199 test_spr_immed 0x85e40160,fqop1 ; fq1.opc
200 bra ret
201
202 ret:
203 inc_gr_immed 1,gr15
204 movsg pcsr,gr60
205 add gr60,gr20,gr60
206 movgs gr60,pcsr
207 rett 0
208 fail
209
This page took 0.03525 seconds and 4 git commands to generate.