* gas/config/tc-avr.c: Change ISA for devices with USB support to
[external/binutils.git] / sim / testsuite / sim / frv / interrupts / fp_exception-fr550.cgs
1 # frv testcase to generate fp_exception
2 # mach: fr550
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 badld. 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         set_gr_immed    4,gr20          ; PC increment
53 badst:  stdfi           fr0,@(sp,0)     ; misaligned reg -- slot I0
54         test_gr_immed   1,gr15
55
56         set_spr_addr    ok4,lr
57         set_gr_immed    8,gr20          ; PC increment
58         nop.p
59 badld:  lddfi           @(sp,0),fr8     ; misaligned reg -- slot I1
60         test_gr_immed   2,gr15
61
62         set_spr_addr    ok5,lr
63         set_gr_immed    20,gr20         ; PC increment
64         fnegs.p         fr9,fr9
65         fnegs.p         fr9,fr10
66         fnegs.p         fr9,fr11
67 pack:   fnegs           fr10,fr12
68         fnegs           fr10,fr13       ; packing violation
69         test_gr_immed   3,gr15
70
71         set_spr_addr    ok1,lr
72         set_gr_immed    4,gr20          ; PC increment
73 bad:    .word           0x83e502c4      ; fmadds fr16,fr4,fr1 (unimplemented)
74         test_gr_immed   4,gr15
75
76         and_spr_immed   0xfbffffff,fsr0         ; disable div/0 fp_exception
77         set_fr_iimmed   0x7f7f,0xffff,fr0
78         set_fr_iimmed   0x0000,0x0000,fr1
79         fdivs           fr0,fr1,fr2             ; div/0 -- no exception
80         test_spr_bits   0x100000,20,0x0,fsr0    ; fsr0.qne is never set
81         test_spr_bits   0xfc00,10,0x4,fsr0      ; fsr0.aexc is still set
82         test_spr_bits   0xe0000,17,0x0,fsr0     ; fsr0.ftt is clear
83
84         set_spr_addr    ok2,lr
85         set_gr_immed    0,gr20                  ; PC increment
86         or_spr_immed    0x04000000,fsr0         ; enable div/0 fp_exception
87         set_fr_iimmed   0xdead,0xbeef,fr2
88 div0:   fdivs           fr0,fr1,fr2             ; fp_exception - div/0
89         test_fr_iimmed  0xdeadbeef,fr2          ; fr2 not updated
90         test_gr_immed   5,gr15
91
92         and_spr_immed   0xfdffffff,fsr0         ; disable inexact fp_exception
93         fsqrts          fr32,fr2                ; inexact -- no exception
94         test_spr_bits   0x100000,20,0x0,fsr0    ; fsr0.qne is never set
95         test_spr_bits   0xfc00,10,0x6,fsr0      ; fsr0.aexc is set
96         test_spr_bits   0xe0000,17,0x0,fsr0     ; fsr0.ftt is clear
97
98         set_fr_fr       fr2,fr3                 ; sqrt 2
99         set_fr_iimmed   0xdead,0xbeef,fr2
100         set_spr_addr    ok6,lr
101         or_spr_immed    0x02000000,fsr0         ; enable inexact fp_exception
102 inxt1:  fsqrts          fr32,fr2                ; fp_exception - inexact
103         test_gr_immed   6,gr15                  ; handler called
104         test_fr_fr      fr2,fr3                 ; fr2 updated
105
106         set_fr_iimmed   0xdead,0xbeef,fr2
107         set_spr_addr    ok7,lr
108 inxt2:  fsqrts          fr32,fr2                ; fp_exception - inexact again
109         test_gr_immed   7,gr15                  ; handler called
110         test_fr_fr      fr2,fr3                 ; fr2 updated
111
112         pass
113
114 ; exception handler 1 -- illegal_instruction: bad insn
115 ok1:
116         test_spr_immed  1,esfr1                 ; esr0 active
117         test_spr_bits   0x3e,1,0x5,esr0         ; esr0.ec is set
118         test_spr_bits   0x1,0,0x1,esr0          ; esr0.valid is set
119         bra             ret
120
121 ; exception handler 2 - fp_exception: divide by 0
122 ok2:
123         test_spr_bits   0x100000,20,0x0,fsr0    ; fsr0.qne is clear
124         test_spr_bits   0xe0000,17,0x1,fsr0     ; fsr0.ftt is set
125         test_spr_bits   0xfc00,10,0x4,fsr0      ; fsr0.aexc is still set
126
127         test_spr_immed  4,esfr1                 ; esr2 active
128         test_spr_bits   0x3e,1,0xd,esr2         ; esr2.ec is set
129         test_spr_bits   0x1,0,0x1,esr2          ; esr2.valid is set
130         test_spr_addr   div0,epcr2              ; epcr2 is set
131         bra             ret
132
133 ; exception handler 3 - illegal_instruction: register exception
134 ok3:
135         test_spr_immed  1,esfr1                 ; esr0 active
136         test_spr_bits   0x3e,1,0x5,esr0         ; esr0.ec is set
137         test_spr_bits   0x1,0,0x1,esr0          ; esr0.valid is set
138         bra             ret
139
140 ; exception handler 4 - illegal_instruction: register exception
141 ok4:
142         test_spr_immed  1,esfr1                 ; esr0 active
143         test_spr_bits   0x3e,1,0x5,esr0         ; esr0.ec is set
144         test_spr_bits   0x1,0,0x1,esr0          ; esr0.valid is set
145         bra             ret
146
147 ; exception handler 5 - illegal_instruction: sequence violation
148 ok5:
149         test_spr_immed  1,esfr1                 ; esr0 active
150         test_spr_bits   0x3e,1,0x5,esr0         ; esr0.ec is set
151         test_spr_bits   0x1,0,0x1,esr0          ; esr0.valid is set
152         bra             ret
153
154 ; exception handler 6 - fp_exception: inexact
155 ok6:
156         test_spr_bits   0x100000,20,0x0,fsr0    ; fsr0.qne is clear
157         test_spr_bits   0xe0000,17,0x1,fsr0     ; fsr0.ftt is set
158         test_spr_bits   0xfc00,10,0x6,fsr0      ; fsr0.aexc is still set
159
160         test_spr_immed  4,esfr1                 ; esr2 active
161         test_spr_bits   0x3e,1,0xd,esr2         ; esr2.ec is set
162         test_spr_bits   0x1,0,0x1,esr2          ; esr2.valid is set
163         test_spr_addr   inxt1,epcr2             ; epcr2 is set
164         bra             ret
165
166 ; exception handler 7 - fp_exception: inexact again
167 ok7:
168         test_spr_bits   0x100000,20,0x0,fsr0    ; fsr0.qne is clear
169         test_spr_bits   0xe0000,17,0x1,fsr0     ; fsr0.ftt is set
170         test_spr_bits   0xfc00,10,0x6,fsr0      ; fsr0.aexc is still set
171
172         test_spr_immed  4,esfr1                 ; esr2 active
173         test_spr_bits   0x3e,1,0xd,esr2         ; esr2.ec is set
174         test_spr_bits   0x1,0,0x1,esr2          ; esr2.valid is set
175         test_spr_addr   inxt2,epcr2             ; epcr2 is set
176         bra             ret
177
178 ret:
179         inc_gr_immed    1,gr15
180         movsg           pcsr,gr60
181         add             gr60,gr20,gr60
182         movgs           gr60,pcsr
183         rett            0
184         fail
185