binutils/
[external/binutils.git] / sim / testsuite / sim / h8300 / mul.s
1 # Hitachi H8 testcase 'muls', 'muls/u', mulu', 'mulu/u', 'mulxs', 'mulxu'
2 # mach(): all
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         start
14
15 .if (sim_cpu == h8sx)   
16 muls_w_reg_reg: 
17         set_grs_a5a5
18
19         ;; muls.w rs, rd
20         mov.w   #32, r1
21         mov.w   #-2, r2
22         set_ccr_zero
23         muls.w  r2, r1
24
25         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
26         test_neg_set
27         test_carry_clear
28         test_zero_clear
29         test_ovf_clear
30         
31         test_gr_a5a5    0
32         test_h_gr16     -64     r1
33         test_h_gr32     0xa5a5fffe      er2
34         test_gr_a5a5    3
35         test_gr_a5a5    4
36         test_gr_a5a5    5
37         test_gr_a5a5    6
38         test_gr_a5a5    7
39
40 muls_w_imm4_reg:
41         set_grs_a5a5
42
43         ;; muls.w xx:4, rd
44         mov.w   #-32, r1
45         set_ccr_zero
46         muls.w  #2:4, r1
47
48         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
49         test_neg_set
50         test_carry_clear
51         test_zero_clear
52         test_ovf_clear
53
54         test_gr_a5a5    0
55         test_h_gr16     -64     r1
56         test_gr_a5a5    2
57         test_gr_a5a5    3
58         test_gr_a5a5    4
59         test_gr_a5a5    5
60         test_gr_a5a5    6
61         test_gr_a5a5    7
62
63 muls_l_reg_reg: 
64         set_grs_a5a5
65
66         ;; muls.l ers, erd
67         mov.l   #320000, er1
68         mov.l   #-2, er2
69         set_ccr_zero
70         muls.l  er2, er1
71
72         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
73         test_neg_set
74         test_carry_clear
75         test_zero_clear
76         test_ovf_clear
77         
78         test_gr_a5a5    0
79         test_h_gr32     -640000 er1
80         test_h_gr32     -2      er2
81         test_gr_a5a5    3
82         test_gr_a5a5    4
83         test_gr_a5a5    5
84         test_gr_a5a5    6
85         test_gr_a5a5    7
86
87 muls_l_imm4_reg:
88         set_grs_a5a5
89
90         ;; muls.l xx:4, rd
91         mov.l   #-320000, er1
92         set_ccr_zero
93         muls.l  #2:4, er1
94
95         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
96         test_neg_set
97         test_carry_clear
98         test_zero_clear
99         test_ovf_clear
100
101         test_gr_a5a5    0
102         test_h_gr32     -640000 er1
103         test_gr_a5a5    2
104         test_gr_a5a5    3
105         test_gr_a5a5    4
106         test_gr_a5a5    5
107         test_gr_a5a5    6
108         test_gr_a5a5    7
109
110 muls_u_l_reg_reg:
111         set_grs_a5a5
112
113         ;; muls/u.l ers, erd
114         mov.l   #0x10000000, er1
115         mov.l   #-16, er2
116         set_ccr_zero
117         muls/u.l        er2, er1
118
119         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
120         test_neg_set
121         test_carry_clear
122         test_zero_clear
123         test_ovf_clear
124         
125         test_gr_a5a5    0
126         test_h_gr32     -1      er1
127         test_h_gr32     -16     er2
128         test_gr_a5a5    3
129         test_gr_a5a5    4
130         test_gr_a5a5    5
131         test_gr_a5a5    6
132         test_gr_a5a5    7
133
134 muls_u_l_imm4_reg:
135         set_grs_a5a5
136
137         ;; muls/u.l xx:4, rd
138         mov.l   #0xffffffff, er1
139         set_ccr_zero
140         muls/u.l        #2:4, er1
141
142         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
143         test_neg_set
144         test_carry_clear
145         test_zero_clear
146         test_ovf_clear
147
148         test_gr_a5a5    0
149         test_h_gr32     -1      er1
150         test_gr_a5a5    2
151         test_gr_a5a5    3
152         test_gr_a5a5    4
153         test_gr_a5a5    5
154         test_gr_a5a5    6
155         test_gr_a5a5    7
156
157 mulu_w_reg_reg: 
158         set_grs_a5a5
159
160         ;; mulu.w rs, rd
161         mov.w   #32, r1
162         mov.w   #-2, r2
163         set_ccr_zero
164         mulu.w  r2, r1
165
166         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
167         test_cc_clear
168         
169         test_gr_a5a5    0
170         test_h_gr16     -64     r1
171         test_h_gr32     0xa5a5fffe      er2
172         test_gr_a5a5    3
173         test_gr_a5a5    4
174         test_gr_a5a5    5
175         test_gr_a5a5    6
176         test_gr_a5a5    7
177
178 mulu_w_imm4_reg:
179         set_grs_a5a5
180
181         ;; mulu.w xx:4, rd
182         mov.w   #32, r1
183         set_ccr_zero
184         mulu.w  #-2:4, r1
185
186         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
187         test_cc_clear
188
189         test_gr_a5a5    0
190         test_h_gr16     0x1c0   r1
191         test_gr_a5a5    2
192         test_gr_a5a5    3
193         test_gr_a5a5    4
194         test_gr_a5a5    5
195         test_gr_a5a5    6
196         test_gr_a5a5    7
197
198 mulu_l_reg_reg: 
199         set_grs_a5a5
200
201         ;; mulu.l ers, erd
202         mov.l   #320000, er1
203         mov.l   #-2, er2
204         set_ccr_zero
205         mulu.l  er2, er1
206
207         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
208         test_cc_clear
209         
210         test_gr_a5a5    0
211         test_h_gr32     -640000 er1
212         test_h_gr32     -2      er2
213         test_gr_a5a5    3
214         test_gr_a5a5    4
215         test_gr_a5a5    5
216         test_gr_a5a5    6
217         test_gr_a5a5    7
218
219 mulu_l_imm4_reg:
220         set_grs_a5a5
221
222         ;; mulu.l xx:4, rd
223         mov.l   #320000, er1
224         set_ccr_zero
225         mulu.l  #-2:4, er1
226
227         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
228         test_cc_clear
229
230         test_gr_a5a5    0
231         test_h_gr32     0x445c00        er1
232         test_gr_a5a5    2
233         test_gr_a5a5    3
234         test_gr_a5a5    4
235         test_gr_a5a5    5
236         test_gr_a5a5    6
237         test_gr_a5a5    7
238
239 mulu_u_l_reg_reg:
240         set_grs_a5a5
241
242         ;; mulu/u.l ers, erd
243         mov.l   #0x10000000, er1
244         mov.l   #16, er2
245         set_ccr_zero
246         mulu/u.l        er2, er1
247
248         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
249         test_cc_clear
250         
251         test_gr_a5a5    0
252         test_h_gr32     1       er1
253         test_h_gr32     16      er2
254         test_gr_a5a5    3
255         test_gr_a5a5    4
256         test_gr_a5a5    5
257         test_gr_a5a5    6
258         test_gr_a5a5    7
259
260 mulu_u_l_imm4_reg:
261         set_grs_a5a5
262
263         ;; mulu/u.l xx:4, rd
264         mov.l   #0xffffffff, er1
265         set_ccr_zero
266         mulu/u.l        #2:4, er1
267
268         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
269         test_cc_clear
270
271         test_gr_a5a5    0
272         test_h_gr32     0x1     er1
273         test_gr_a5a5    2
274         test_gr_a5a5    3
275         test_gr_a5a5    4
276         test_gr_a5a5    5
277         test_gr_a5a5    6
278         test_gr_a5a5    7
279 .endif
280
281 .if (sim_cpu)                   ; not equal to zero ie. not h8
282 mulxs_b_reg_reg:
283         set_grs_a5a5
284
285         ;; mulxs.b rs, rd
286         mov.b   #32, r1l
287         mov.b   #-2, r2l
288         set_ccr_zero
289         mulxs.b r2l, r1
290
291         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
292         test_neg_set
293         test_carry_clear
294         test_zero_clear
295         test_ovf_clear
296         
297         test_gr_a5a5    0
298         test_h_gr16     -64     r1
299         test_h_gr32     0xa5a5a5fe      er2
300         test_gr_a5a5    3
301         test_gr_a5a5    4
302         test_gr_a5a5    5
303         test_gr_a5a5    6
304         test_gr_a5a5    7
305
306 .if (sim_cpu == h8sx)   
307 mulxs_b_imm4_reg:
308         set_grs_a5a5
309
310         ;; mulxs.b xx:4, rd
311         mov.w   #-32, r1
312         set_ccr_zero
313         mulxs.b #2:4, r1
314
315         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
316         test_neg_set
317         test_carry_clear
318         test_zero_clear
319         test_ovf_clear
320
321         test_gr_a5a5    0
322         test_h_gr16     -64     r1
323         test_gr_a5a5    2
324         test_gr_a5a5    3
325         test_gr_a5a5    4
326         test_gr_a5a5    5
327         test_gr_a5a5    6
328         test_gr_a5a5    7
329 .endif                          ; h8sx
330
331 mulxs_w_reg_reg:        
332         set_grs_a5a5
333
334         ;; mulxs.w ers, erd
335         mov.w   #0x1000,  r1
336         mov.w   #-0x1000, r2
337         set_ccr_zero
338         mulxs.w r2, er1
339
340         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
341         test_neg_set
342         test_carry_clear
343         test_zero_clear
344         test_ovf_clear
345         
346         test_gr_a5a5    0
347         test_h_gr32     0xff000000      er1
348         test_h_gr32     0xa5a5f000      er2
349         test_gr_a5a5    3
350         test_gr_a5a5    4
351         test_gr_a5a5    5
352         test_gr_a5a5    6
353         test_gr_a5a5    7
354
355 .if (sim_cpu == h8sx)
356 mulxs_w_imm4_reg:
357         set_grs_a5a5
358
359         ;; mulxs.w xx:4, rd
360         mov.w   #-1, r1
361         set_ccr_zero
362         mulxs.w #2:4, er1
363
364         ;; test ccr             ; H=0 N=1 Z=0 V=0 C=0
365         test_neg_set
366         test_carry_clear
367         test_zero_clear
368         test_ovf_clear
369
370         test_gr_a5a5    0
371         test_h_gr32     -2      er1
372         test_gr_a5a5    2
373         test_gr_a5a5    3
374         test_gr_a5a5    4
375         test_gr_a5a5    5
376         test_gr_a5a5    6
377         test_gr_a5a5    7
378 .endif                          ; h8sx
379 .endif                          ; not h8
380
381 mulxu_b_reg_reg:
382         set_grs_a5a5
383
384         ;; mulxu.b rs, rd
385         mov.b   #32, r1l
386         mov.b   #-2, r2l
387         set_ccr_zero
388         mulxu.b r2l, r1
389
390         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
391         test_cc_clear
392         
393         test_gr_a5a5    0
394         test_h_gr16     0x1fc0  r1
395         test_h_gr16     0xa5fe  r2
396 .if (sim_cpu)
397         test_h_gr32     0xa5a5a5fe      er2
398 .endif
399         test_gr_a5a5    3
400         test_gr_a5a5    4
401         test_gr_a5a5    5
402         test_gr_a5a5    6
403         test_gr_a5a5    7
404
405 .if (sim_cpu)                   ; not h8
406 .if (sim_cpu == h8sx)
407 mulxu_b_imm4_reg:
408         set_grs_a5a5
409
410         ;; mulxu.b xx:4, rd
411         mov.b   #-32, r1l
412         set_ccr_zero
413         mulxu.b #2:4, r1
414
415         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
416         test_cc_clear
417
418         test_gr_a5a5    0
419         test_h_gr16     0x1c0   r1
420         test_gr_a5a5    2
421         test_gr_a5a5    3
422         test_gr_a5a5    4
423         test_gr_a5a5    5
424         test_gr_a5a5    6
425         test_gr_a5a5    7
426 .endif                          ; h8sx
427
428 mulxu_w_reg_reg:        
429         set_grs_a5a5
430
431         ;; mulxu.w ers, erd
432         mov.w   #0x1000,  r1
433         mov.w   #-0x1000, r2
434         set_ccr_zero
435         mulxu.w r2, er1
436
437         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
438         test_cc_clear
439         
440         test_gr_a5a5    0
441         test_h_gr32     0x0f000000      er1
442         test_h_gr32     0xa5a5f000      er2
443         test_gr_a5a5    3
444         test_gr_a5a5    4
445         test_gr_a5a5    5
446         test_gr_a5a5    6
447         test_gr_a5a5    7
448
449 .if (sim_cpu == h8sx)
450 mulxu_w_imm4_reg:
451         set_grs_a5a5
452
453         ;; mulxu.w xx:4, rd
454         mov.w   #-1, r1
455         set_ccr_zero
456         mulxu.w #2:4, er1
457
458         ;; test ccr             ; H=0 N=0 Z=0 V=0 C=0
459         test_cc_clear
460
461         test_gr_a5a5    0
462         test_h_gr32     0x1fffe er1
463         test_gr_a5a5    2
464         test_gr_a5a5    3
465         test_gr_a5a5    4
466         test_gr_a5a5    5
467         test_gr_a5a5    6
468         test_gr_a5a5    7
469 .endif                          ; h8sx
470 .endif                          ; not h8
471
472         pass
473
474         exit 0