Home | History | Annotate | Line # | Download | only in h8300
      1 # Hitachi H8 testcase 'mac'
      2 # mach(): h8300s h8sx
      3 # as(h8300):	--defsym sim_cpu=0
      4 # as(h8300h):	--defsym sim_cpu=1
      5 # as(h8300s):	--defsym sim_cpu=2
      6 # as(h8sx):	--defsym sim_cpu=3
      7 # ld(h8300h):	-m h8300helf
      8 # ld(h8300s):	-m h8300self
      9 # ld(h8sx):	-m h8300sxelf
     10 
     11 	.include "testutils.inc"
     12 
     13 	.data
     14 src1:	.word	0
     15 src2:	.word	0
     16 
     17 array:	.word	0x7fff
     18 	.word	0x7fff
     19 	.word	0x7fff
     20 	.word	0x7fff
     21 	.word	0x7fff
     22 	.word	0x7fff
     23 	.word	0x7fff
     24 	.word	0x7fff
     25 	.word	0x7fff
     26 	.word	0x7fff
     27 	.word	0x7fff
     28 	.word	0x7fff
     29 	.word	0x7fff
     30 	.word	0x7fff
     31 	.word	0x7fff
     32 	.word	0x7fff
     33 
     34 	start
     35 
     36 .if (sim_cpu)
     37 _clrmac:
     38 	set_grs_a5a5
     39 	set_ccr_zero
     40 	clrmac
     41 	test_cc_clear
     42 	test_grs_a5a5
     43 	;; Now see if the mac is actually clear...
     44 	stmac	mach, er0
     45 	test_zero_set
     46 	test_neg_clear
     47 	test_ovf_clear
     48 	test_h_gr32 0 er0
     49 	stmac	macl, er1
     50 	test_zero_set
     51 	test_neg_clear
     52 	test_ovf_clear
     53 	test_h_gr32 0 er1
     54 
     55 ld_stmac:
     56 	set_grs_a5a5
     57 	sub.l	er2, er2
     58 	set_ccr_zero
     59 	ldmac	er1, macl
     60 	stmac	macl, er2
     61 	test_ovf_clear
     62 	test_carry_clear
     63 	;; neg and zero are undefined
     64 	test_h_gr32 0xa5a5a5a5 er2
     65 
     66 	sub.l	er2, er2
     67 	set_ccr_zero
     68 	ldmac	er1, mach
     69 	stmac	mach, er2
     70 	test_ovf_clear
     71 	test_carry_clear
     72 	;; neg and zero are undefined
     73 	test_h_gr32 0x0001a5 er2
     74 
     75 	test_gr_a5a5 0		; Make sure other general regs not disturbed
     76 	test_gr_a5a5 1
     77 	test_gr_a5a5 3
     78 	test_gr_a5a5 4
     79 	test_gr_a5a5 5
     80 	test_gr_a5a5 6
     81 	test_gr_a5a5 7
     82 
     83 mac_2x2:
     84 	set_grs_a5a5
     85 	mov.w	#2, r1
     86 	mov.w	r1, @src1
     87 	mov.w	#2, r2
     88 	mov.w	r2, @src2
     89 	mov	#src1, er1
     90 	mov	#src2, er2
     91 	set_ccr_zero
     92 	clrmac
     93 	mac	@er1+, @er2+
     94 	test_cc_clear
     95 
     96 	test_h_gr32 0xa5a5a5a5 er0
     97 	test_h_gr32 src1+2     er1
     98 	test_h_gr32 src2+2     er2
     99 	test_h_gr32 0xa5a5a5a5 er3
    100 	test_h_gr32 0xa5a5a5a5 er4
    101 	test_h_gr32 0xa5a5a5a5 er5
    102 	test_h_gr32 0xa5a5a5a5 er6
    103 	test_h_gr32 0xa5a5a5a5 er7
    104 
    105 	stmac	macl, er0
    106 	test_zero_clear
    107 	test_neg_clear
    108 	test_ovf_clear
    109 	test_h_gr32 4 er0
    110 
    111 	stmac	mach, er0
    112 	test_zero_clear
    113 	test_neg_clear
    114 	test_ovf_clear
    115 	test_h_gr32 0 er0
    116 
    117 mac_same_reg_2x4:
    118 	;; Use same reg for src and dst.  Should be incremented twice,
    119 	;; and fetch values from consecutive locations.
    120 	set_grs_a5a5
    121 	mov.w	#2, r1
    122 	mov.w	r1, @src1
    123 	mov.w	#4, r2
    124 	mov.w	r2, @src2
    125 	mov	#src1, er1
    126 
    127 	set_ccr_zero
    128 	clrmac
    129 	mac	@er1+, @er1+	; same register for src and dst
    130 	test_cc_clear
    131 
    132 	test_h_gr32 0xa5a5a5a5 er0
    133 	test_h_gr32 src1+4     er1
    134 	test_h_gr32 0xa5a50004 er2
    135 	test_h_gr32 0xa5a5a5a5 er3
    136 	test_h_gr32 0xa5a5a5a5 er4
    137 	test_h_gr32 0xa5a5a5a5 er5
    138 	test_h_gr32 0xa5a5a5a5 er6
    139 	test_h_gr32 0xa5a5a5a5 er7
    140 
    141 	stmac	macl, er0
    142 	test_zero_clear
    143 	test_neg_clear
    144 	test_ovf_clear
    145 	test_h_gr32 8 er0
    146 
    147 	stmac	mach, er0
    148 	test_zero_clear
    149 	test_neg_clear
    150 	test_ovf_clear
    151 	test_h_gr32 0 er0
    152 
    153 mac_0x0:
    154 	set_grs_a5a5
    155 	mov.w	#0, r1
    156 	mov.w	r1, @src1
    157 	mov.w	#0, r2
    158 	mov.w	r2, @src2
    159 	mov	#src1, er1
    160 	mov	#src2, er2
    161 	set_ccr_zero
    162 	clrmac
    163 	mac	@er1+, @er2+
    164 	test_cc_clear
    165 
    166 	test_h_gr32 0xa5a5a5a5 er0
    167 	test_h_gr32 src1+2     er1
    168 	test_h_gr32 src2+2     er2
    169 	test_h_gr32 0xa5a5a5a5 er3
    170 	test_h_gr32 0xa5a5a5a5 er4
    171 	test_h_gr32 0xa5a5a5a5 er5
    172 	test_h_gr32 0xa5a5a5a5 er6
    173 	test_h_gr32 0xa5a5a5a5 er7
    174 
    175 	stmac	macl, er0
    176 	test_zero_set		; zero flag is set
    177 	test_neg_clear
    178 	test_ovf_clear
    179 	test_h_gr32 0 er0	; result is zero
    180 
    181 	stmac	mach, er0
    182 	test_zero_set
    183 	test_neg_clear
    184 	test_ovf_clear
    185 	test_h_gr32 0 er0
    186 
    187 mac_neg2x2:
    188 	set_grs_a5a5
    189 	mov.w	#-2, r1
    190 	mov.w	r1, @src1
    191 	mov.w	#2, r2
    192 	mov.w	r2, @src2
    193 	mov	#src1, er1
    194 	mov	#src2, er2
    195 	set_ccr_zero
    196 	clrmac
    197 	mac	@er1+, @er2+
    198 	test_cc_clear
    199 
    200 	test_h_gr32 0xa5a5a5a5 er0
    201 	test_h_gr32 src1+2     er1
    202 	test_h_gr32 src2+2     er2
    203 	test_h_gr32 0xa5a5a5a5 er3
    204 	test_h_gr32 0xa5a5a5a5 er4
    205 	test_h_gr32 0xa5a5a5a5 er5
    206 	test_h_gr32 0xa5a5a5a5 er6
    207 	test_h_gr32 0xa5a5a5a5 er7
    208 
    209 	stmac	macl, er0
    210 	test_zero_clear
    211 	test_neg_set		; neg flag is set
    212 	test_ovf_clear
    213 	test_h_gr32 -4 er0	; result is negative
    214 
    215 	stmac	mach, er0
    216 	test_zero_clear
    217 	test_neg_set
    218 	test_ovf_clear
    219 	test_h_gr32 -1 er0	; negative sign extend
    220 
    221 mac_array:
    222 	;; Use same reg for src and dst, pointing to an array of shorts
    223 	set_grs_a5a5
    224 	mov	#array, er1
    225 
    226 	set_ccr_zero
    227 	clrmac
    228 	mac	@er1+, @er1+	; same register for src and dst
    229 	mac	@er1+, @er1+	; repeat 8 times
    230 	mac	@er1+, @er1+
    231 	mac	@er1+, @er1+
    232 	mac	@er1+, @er1+
    233 	mac	@er1+, @er1+
    234 	mac	@er1+, @er1+
    235 	mac	@er1+, @er1+
    236 	test_cc_clear
    237 
    238 	test_h_gr32 0xa5a5a5a5 er0
    239 	test_h_gr32 array+32     er1
    240 	test_h_gr32 0xa5a5a5a5 er2
    241 	test_h_gr32 0xa5a5a5a5 er3
    242 	test_h_gr32 0xa5a5a5a5 er4
    243 	test_h_gr32 0xa5a5a5a5 er5
    244 	test_h_gr32 0xa5a5a5a5 er6
    245 	test_h_gr32 0xa5a5a5a5 er7
    246 
    247 	stmac	macl, er0
    248 	test_zero_clear
    249 	test_neg_clear
    250 	test_ovf_clear
    251 	test_h_gr32 0xfff80008 er0
    252 
    253 	stmac	mach, er0
    254 	test_zero_clear
    255 	test_neg_clear
    256 	test_ovf_clear
    257 	test_h_gr32 1 er0	; result is greater than 32 bits
    258 
    259 .endif
    260 
    261 	pass
    262 
    263 	exit 0
    264