📄 fp_exception-fr550.cgs
字号:
# frv testcase to generate fp_exception# mach: fr550 .include "testutils.inc" float_constants start load_float_constants .global alignalign: ; clear the packing bit if the insn at 'pack:'. We can't simply use ; '.p' because the assembler will catch the error. set_gr_mem pack,gr10 and_gr_immed 0x7fffffff,gr10 set_mem_gr gr10,pack set_gr_addr pack,gr10 flush_data_cache gr10 ; Make the the source register number odd at badst. We can't simply ; code an odd register number because the assembler will catch the ; error. set_gr_mem badst,gr10 or_gr_immed 0x02000000,gr10 set_mem_gr gr10,badst set_gr_addr badst,gr10 flush_data_cache gr10 ; Make the the dest register number odd at badld. We can't simply ; code an odd register number because the assembler will catch the ; error. set_gr_mem badld,gr10 or_gr_immed 0x02000000,gr10 set_mem_gr gr10,badld set_gr_addr badld,gr10 flush_data_cache gr10 and_spr_immed -4081,tbr ; clear tbr.tt set_gr_spr tbr,gr17 inc_gr_immed 0x070,gr17 ; address of exception handler set_bctrlr_0_0 gr17 inc_gr_immed 0x060,gr17 ; address of exception handler set_bctrlr_0_0 gr17 set_spr_immed 128,lcr set_spr_addr ok1,lr set_psr_et 1 inc_gr_immed -4,sp ; for alignment set_gr_immed 0,gr20 ; PC increment set_gr_immed 0,gr15 set_spr_addr ok3,lr set_gr_immed 4,gr20 ; PC incrementbadst: stdfi fr0,@(sp,0) ; misaligned reg -- slot I0 test_gr_immed 1,gr15 set_spr_addr ok4,lr set_gr_immed 8,gr20 ; PC increment nop.pbadld: lddfi @(sp,0),fr8 ; misaligned reg -- slot I1 test_gr_immed 2,gr15 set_spr_addr ok5,lr set_gr_immed 20,gr20 ; PC increment fnegs.p fr9,fr9 fnegs.p fr9,fr10 fnegs.p fr9,fr11pack: fnegs fr10,fr12 fnegs fr10,fr13 ; packing violation test_gr_immed 3,gr15 set_spr_addr ok1,lr set_gr_immed 4,gr20 ; PC incrementbad: .word 0x83e502c4 ; fmadds fr16,fr4,fr1 (unimplemented) test_gr_immed 4,gr15 and_spr_immed 0xfbffffff,fsr0 ; disable div/0 fp_exception set_fr_iimmed 0x7f7f,0xffff,fr0 set_fr_iimmed 0x0000,0x0000,fr1 fdivs fr0,fr1,fr2 ; div/0 -- no exception test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is never set test_spr_bits 0xfc00,10,0x4,fsr0 ; fsr0.aexc is still set test_spr_bits 0xe0000,17,0x0,fsr0 ; fsr0.ftt is clear set_spr_addr ok2,lr set_gr_immed 0,gr20 ; PC increment or_spr_immed 0x04000000,fsr0 ; enable div/0 fp_exception set_fr_iimmed 0xdead,0xbeef,fr2div0: fdivs fr0,fr1,fr2 ; fp_exception - div/0 test_fr_iimmed 0xdeadbeef,fr2 ; fr2 not updated test_gr_immed 5,gr15 and_spr_immed 0xfdffffff,fsr0 ; disable inexact fp_exception fsqrts fr32,fr2 ; inexact -- no exception test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is never set test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is set test_spr_bits 0xe0000,17,0x0,fsr0 ; fsr0.ftt is clear set_fr_fr fr2,fr3 ; sqrt 2 set_fr_iimmed 0xdead,0xbeef,fr2 set_spr_addr ok6,lr or_spr_immed 0x02000000,fsr0 ; enable inexact fp_exceptioninxt1: fsqrts fr32,fr2 ; fp_exception - inexact test_gr_immed 6,gr15 ; handler called test_fr_fr fr2,fr3 ; fr2 updated set_fr_iimmed 0xdead,0xbeef,fr2 set_spr_addr ok7,lrinxt2: fsqrts fr32,fr2 ; fp_exception - inexact again test_gr_immed 7,gr15 ; handler called test_fr_fr fr2,fr3 ; fr2 updated pass; exception handler 1 -- illegal_instruction: bad insnok1: test_spr_immed 1,esfr1 ; esr0 active test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set bra ret; exception handler 2 - fp_exception: divide by 0ok2: test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is clear test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set test_spr_bits 0xfc00,10,0x4,fsr0 ; fsr0.aexc is still set test_spr_immed 4,esfr1 ; esr2 active test_spr_bits 0x3e,1,0xd,esr2 ; esr2.ec is set test_spr_bits 0x1,0,0x1,esr2 ; esr2.valid is set test_spr_addr div0,epcr2 ; epcr2 is set bra ret; exception handler 3 - illegal_instruction: register exceptionok3: test_spr_immed 1,esfr1 ; esr0 active test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set bra ret; exception handler 4 - illegal_instruction: register exceptionok4: test_spr_immed 1,esfr1 ; esr0 active test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set bra ret; exception handler 5 - illegal_instruction: sequence violationok5: test_spr_immed 1,esfr1 ; esr0 active test_spr_bits 0x3e,1,0x5,esr0 ; esr0.ec is set test_spr_bits 0x1,0,0x1,esr0 ; esr0.valid is set bra ret; exception handler 6 - fp_exception: inexactok6: test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is clear test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is still set test_spr_immed 4,esfr1 ; esr2 active test_spr_bits 0x3e,1,0xd,esr2 ; esr2.ec is set test_spr_bits 0x1,0,0x1,esr2 ; esr2.valid is set test_spr_addr inxt1,epcr2 ; epcr2 is set bra ret; exception handler 7 - fp_exception: inexact againok7: test_spr_bits 0x100000,20,0x0,fsr0 ; fsr0.qne is clear test_spr_bits 0xe0000,17,0x1,fsr0 ; fsr0.ftt is set test_spr_bits 0xfc00,10,0x6,fsr0 ; fsr0.aexc is still set test_spr_immed 4,esfr1 ; esr2 active test_spr_bits 0x3e,1,0xd,esr2 ; esr2.ec is set test_spr_bits 0x1,0,0x1,esr2 ; esr2.valid is set test_spr_addr inxt2,epcr2 ; epcr2 is set bra retret: inc_gr_immed 1,gr15 movsg pcsr,gr60 add gr60,gr20,gr60 movgs gr60,pcsr rett 0 fail
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -