1 # frv testcase to generate fp_exception
3 .include "testutils.inc"
11 ; clear the packing bit if the insn at 'pack:'. We can't simply use
12 ; '.p' because the assembler will catch the error.
14 and_gr_immed 0x7fffffff,gr10
19 and_spr_immed -4081,tbr ; clear tbr.tt
21 inc_gr_immed 0x070,gr17 ; address of exception handler
23 inc_gr_immed 0x060,gr17 ; address of exception handler
28 inc_gr_immed -4,sp ; for alignment
30 set_gr_immed 0,gr20 ; PC increment
34 set_gr_immed 4,gr20 ; PC increment
35 badst1: stdfi fr1,@(sp,0) ; misaligned reg -- slot I0
39 set_gr_immed 8,gr20 ; PC increment
41 badst2: lddfi @(sp,0),fr9 ; misaligned reg -- slot I1
45 set_gr_immed 20,gr20 ; PC increment
50 fnegs fr10,fr13 ; packing violation
54 set_gr_immed 4,gr20 ; PC increment
55 bad: fmadds fr16,fr4,fr1 ; unimplemented
58 and_spr_immed 0xfbffffff,fsr0 ; disable div/0 fp_exception
59 set_fr_iimmed 0x7f7f,0xffff,fr0
60 set_fr_iimmed 0x0000,0x0000,fr1
61 fdivs fr0,fr1,fr2 ; div/0 -- no exception
62 test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is never set
63 test_spr_bits 0xfc00,10,0x4,fsr0 ; fsr0.aexc is still set
64 test_spr_bits 0xe0000,17,0x0,fsr0 ; fsr0.ftt is clear
67 set_gr_immed 0,gr20 ; PC increment
68 or_spr_immed 0x04000000,fsr0 ; enable div/0 fp_exception
69 set_fr_iimmed 0xdead,0xbeef,fr2
70 div0: fdivs fr0,fr1,fr2 ; fp_exception - div/0
71 test_fr_iimmed 0xdeadbeef,fr2 ; fr2 not updated
74 and_spr_immed 0xfdffffff,fsr0 ; disable inexact fp_exception
75 fsqrts fr32,fr2 ; inexact -- no exception
76 test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is never set
77 test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is set
78 test_spr_bits 0xe0000,17,0x0,fsr0 ; fsr0.ftt is clear
80 set_fr_fr fr2,fr3 ; sqrt 2
81 set_fr_iimmed 0xdead,0xbeef,fr2
83 or_spr_immed 0x02000000,fsr0 ; enable inexact fp_exception
84 inxt1: fsqrts fr32,fr2 ; fp_exception - inexact
85 test_gr_immed 6,gr15 ; handler called
86 test_fr_fr fr2,fr3 ; fr2 updated
88 set_fr_iimmed 0xdead,0xbeef,fr2
90 inxt2: fsqrts fr32,fr2 ; fp_exception - inexact again
91 test_gr_immed 7,gr15 ; handler called
92 test_fr_fr fr2,fr3 ; fr2 updated
96 ; exception handler 1 -- illegal_instruction: bad insn
98 test_spr_immed 1,esfr1 ; esr0 active
99 test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set
100 test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set
103 ; exception handler 2 - fp_exception: divide by 0
105 test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is clear
106 test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set
107 test_spr_bits 0xfc00,10,0x4,fsr0 ; fsr0.aexc is still set
109 test_spr_immed 4,esfr1 ; esr2 active
110 test_spr_bits 0x3e,1,0xd,esr2 ; esr2.ec is set
111 test_spr_bits 0x1,0,0x1,esr2 ; esr2.valid is set
112 test_spr_addr div0,epcr2 ; epcr2 is set
115 ; exception handler 3 - illegal_instruction: register exception
117 test_spr_immed 1,esfr1 ; esr0 active
118 test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set
119 test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set
122 ; exception handler 4 - illegal_instruction: register exception
124 test_spr_immed 1,esfr1 ; esr0 active
125 test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set
126 test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set
129 ; exception handler 5 - illegal_instruction: sequence violation
131 test_spr_immed 1,esfr1 ; esr0 active
132 test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set
133 test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set
136 ; exception handler 6 - fp_exception: inexact
138 test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is clear
139 test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set
140 test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is still set
142 test_spr_immed 4,esfr1 ; esr2 active
143 test_spr_bits 0x3e,1,0xd,esr2 ; esr2.ec is set
144 test_spr_bits 0x1,0,0x1,esr2 ; esr2.valid is set
145 test_spr_addr inxt1,epcr2 ; epcr2 is set
148 ; exception handler 7 - fp_exception: inexact again
150 test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is clear
151 test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set
152 test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is still set
154 test_spr_immed 4,esfr1 ; esr2 active
155 test_spr_bits 0x3e,1,0xd,esr2 ; esr2.ec is set
156 test_spr_bits 0x1,0,0x1,esr2 ; esr2.valid is set
157 test_spr_addr inxt2,epcr2 ; epcr2 is set