Home | History | Annotate | Line # | Download | only in fr400
      1 # frv testcase for csdiv $GRi,$GRj,$GRk,$CCi,$cond
      2 # mach: all
      3 
      4 	.include "../testutils.inc"
      5 
      6 	start
      7 
      8 	.global csdiv
      9 csdiv:
     10 	set_spr_immed	0x1b1b,cccr
     11 
     12 	; simple division 12 / 3
     13 	set_gr_immed   	3,gr3
     14 	set_gr_immed   	12,gr1
     15 	csdiv      	gr1,gr3,gr2,cc4,1
     16 	test_gr_immed  	4,gr2
     17 
     18 	; Random example
     19 	set_gr_limmed  	0x0123,0x4567,gr3
     20 	set_gr_limmed  	0xfedc,0xba98,gr1
     21 	csdiv      	gr1,gr3,gr2,cc4,1
     22 	test_gr_immed  	-1,gr2
     23 
     24 	; Special case from the Arch Spec Vol 2
     25 	and_spr_immed	-33,isr		; turn off isr.edem
     26 	; set up exception handler
     27 	set_psr_et	1
     28 	and_spr_immed	-4081,tbr	; clear tbr.tt
     29 	set_gr_spr	tbr,gr17
     30 	inc_gr_immed	0x170,gr17	; address of exception handler
     31 	set_bctrlr_0_0  gr17
     32 	set_spr_immed	128,lcr
     33 	set_gr_immed	0,gr15
     34 
     35 	; divide will cause overflow
     36 	set_spr_addr	ok1,lr
     37 	set_gr_immed  	-1,gr3
     38 	set_gr_limmed  	0x8000,0x0000,gr1
     39 e1:	csdiv      	gr1,gr3,gr2,cc4,1
     40 	test_gr_immed	1,gr15
     41 	test_gr_limmed 	0x8000,0x0000,gr2
     42 
     43 	; Special case from the Arch Spec Vol 2
     44 	or_spr_immed	0x20,isr	; turn on isr.edem
     45 	set_gr_immed  	-1,gr3
     46 	set_gr_limmed  	0x8000,0x0000,gr1
     47 	csdiv      	gr1,gr3,gr2,cc4,1
     48 	test_gr_limmed 	0x7fff,0xffff,gr2
     49 
     50 	; simple division 12 / 3
     51 	set_gr_immed   	3,gr3
     52 	set_gr_immed   	12,gr1
     53 	csdiv      	gr1,gr3,gr2,cc4,0
     54 	test_gr_limmed 	0x7fff,0xffff,gr2
     55 
     56 	; Random example
     57 	set_gr_limmed  	0x0123,0x4567,gr3
     58 	set_gr_limmed  	0xfedc,0xba98,gr1
     59 	csdiv      	gr1,gr3,gr2,cc4,0
     60 	test_gr_limmed 	0x7fff,0xffff,gr2
     61 
     62 	; Special case from the Arch Spec Vol 2
     63 	and_spr_immed	-33,isr		; turn off isr.edem
     64 	set_gr_immed  	-1,gr3
     65 	set_gr_limmed  	0x8000,0x0000,gr1
     66 	csdiv      	gr1,gr3,gr2,cc4,0
     67 	test_gr_limmed 	0x7fff,0xffff,gr2
     68 
     69 	or_spr_immed	0x20,isr	; turn on isr.edem
     70 	set_gr_immed  	-1,gr3
     71 	set_gr_limmed  	0x8000,0x0000,gr1
     72 	csdiv      	gr1,gr3,gr2,cc4,0
     73 	test_gr_limmed 	0x7fff,0xffff,gr2
     74 
     75 	; simple division 12 / 3
     76 	set_gr_immed   	3,gr3
     77 	set_gr_immed   	12,gr1
     78 	csdiv      	gr1,gr3,gr2,cc5,0
     79 	test_gr_immed  	4,gr2
     80 
     81 	; Random example
     82 	set_gr_limmed  	0x0123,0x4567,gr3
     83 	set_gr_limmed  	0xfedc,0xba98,gr1
     84 	csdiv      	gr1,gr3,gr2,cc5,0
     85 	test_gr_immed  	-1,gr2
     86 
     87 	; Special case from the Arch Spec Vol 2
     88 	and_spr_immed	-33,isr		; turn off isr.edem
     89 	; divide will cause overflow
     90 	set_spr_addr	ok1,lr
     91 	set_gr_immed  	-1,gr3
     92 	set_gr_limmed  	0x8000,0x0000,gr1
     93 e2:	csdiv      	gr1,gr3,gr2,cc5,0
     94 	test_gr_immed	2,gr15
     95 	test_gr_limmed 	0x8000,0x0000,gr2
     96 
     97 	; Special case from the Arch Spec Vol 2
     98 	or_spr_immed	0x20,isr	; turn on isr.edem
     99 	set_gr_immed  	-1,gr3
    100 	set_gr_limmed  	0x8000,0x0000,gr1
    101 	csdiv      	gr1,gr3,gr2,cc5,0
    102 	test_gr_limmed 	0x7fff,0xffff,gr2
    103 
    104 	; simple division 12 / 3
    105 	set_gr_immed   	3,gr3
    106 	set_gr_immed   	12,gr1
    107 	csdiv      	gr1,gr3,gr2,cc5,1
    108 	test_gr_limmed 	0x7fff,0xffff,gr2
    109 
    110 	; Random example
    111 	set_gr_limmed  	0x0123,0x4567,gr3
    112 	set_gr_limmed  	0xfedc,0xba98,gr1
    113 	csdiv      	gr1,gr3,gr2,cc5,1
    114 	test_gr_limmed 	0x7fff,0xffff,gr2
    115 
    116 	; Special case from the Arch Spec Vol 2
    117 	and_spr_immed	-33,isr		; turn off isr.edem
    118 	set_gr_immed  	-1,gr3
    119 	set_gr_limmed  	0x8000,0x0000,gr1
    120 	csdiv      	gr1,gr3,gr2,cc5,1
    121 	test_gr_limmed 	0x7fff,0xffff,gr2
    122 
    123 	or_spr_immed	0x20,isr	; turn on isr.edem
    124 	set_gr_immed  	-1,gr3
    125 	set_gr_limmed  	0x8000,0x0000,gr1
    126 	csdiv      	gr1,gr3,gr2,cc5,1
    127 	test_gr_limmed 	0x7fff,0xffff,gr2
    128 
    129 	; simple division 12 / 3
    130 	set_gr_immed   	3,gr3
    131 	set_gr_immed   	12,gr1
    132 	csdiv      	gr1,gr3,gr2,cc6,0
    133 	test_gr_limmed 	0x7fff,0xffff,gr2
    134 
    135 	; Random example
    136 	set_gr_limmed  	0x0123,0x4567,gr3
    137 	set_gr_limmed  	0xfedc,0xba98,gr1
    138 	csdiv      	gr1,gr3,gr2,cc6,0
    139 	test_gr_limmed 	0x7fff,0xffff,gr2
    140 
    141 	; Special case from the Arch Spec Vol 2
    142 	and_spr_immed	-33,isr		; turn off isr.edem
    143 	set_gr_immed  	-1,gr3
    144 	set_gr_limmed  	0x8000,0x0000,gr1
    145 	csdiv      	gr1,gr3,gr2,cc6,0
    146 	test_gr_limmed 	0x7fff,0xffff,gr2
    147 
    148 	or_spr_immed	0x20,isr	; turn on isr.edem
    149 	set_gr_immed  	-1,gr3
    150 	set_gr_limmed  	0x8000,0x0000,gr1
    151 	csdiv      	gr1,gr3,gr2,cc6,0
    152 	test_gr_limmed 	0x7fff,0xffff,gr2
    153 
    154 	; simple division 12 / 3
    155 	set_gr_immed   	3,gr3
    156 	set_gr_immed   	12,gr1
    157 	csdiv      	gr1,gr3,gr2,cc7,1
    158 	test_gr_limmed 	0x7fff,0xffff,gr2
    159 
    160 	; Random example
    161 	set_gr_limmed  	0x0123,0x4567,gr3
    162 	set_gr_limmed  	0xfedc,0xba98,gr1
    163 	csdiv      	gr1,gr3,gr2,cc7,1
    164 	test_gr_limmed 	0x7fff,0xffff,gr2
    165 
    166 	; Special case from the Arch Spec Vol 2
    167 	and_spr_immed	-33,isr		; turn off isr.edem
    168 	set_gr_immed  	-1,gr3
    169 	set_gr_limmed  	0x8000,0x0000,gr1
    170 	csdiv      	gr1,gr3,gr2,cc7,1
    171 	test_gr_limmed 	0x7fff,0xffff,gr2
    172 
    173 	or_spr_immed	0x20,isr	; turn on isr.edem
    174 	set_gr_immed  	-1,gr3
    175 	set_gr_limmed  	0x8000,0x0000,gr1
    176 	csdiv      	gr1,gr3,gr2,cc7,1
    177 	test_gr_limmed 	0x7fff,0xffff,gr2
    178 
    179 	pass
    180 
    181 ok1:	; exception handler for overflow
    182 	test_spr_bits	0x18,3,0x2,isr		; isr.dtt is set
    183 	test_spr_bits	0x0001,0,0x1,esr0	; esr0 is valid
    184 	test_spr_bits	0x003e,1,0x13,esr0	; esr0.ec is set
    185 	inc_gr_immed	1,gr15
    186 	rett		0
    187 	fail
    188