* gas/config/tc-avr.c: Change ISA for devices with USB support to
[external/binutils.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