1; SPDX-License-Identifier: GPL-2.0
2;
3; mulsi3 for H8/300H - based on Renesas SH implementation
4;
5; by Toshiyasu Morita
6;
7; Old code:
8;
9; 16b * 16b = 372 states (worst case)
10; 32b * 32b = 724 states (worst case)
11;
12; New code:
13;
14; 16b * 16b =  48 states
15; 16b * 32b =  72 states
16; 32b * 32b =  92 states
17;
18
19	.global __mulsi3
20__mulsi3:
21	mov.w	r1,r2   ; ( 2 states) b * d
22	mulxu	r0,er2  ; (22 states)
23
24	mov.w	e0,r3   ; ( 2 states) a * d
25	beq	L_skip1 ; ( 4 states)
26	mulxu	r1,er3  ; (22 states)
27	add.w	r3,e2   ; ( 2 states)
28
29L_skip1:
30	mov.w	e1,r3   ; ( 2 states) c * b
31	beq	L_skip2 ; ( 4 states)
32	mulxu	r0,er3  ; (22 states)
33	add.w	r3,e2   ; ( 2 states)
34
35L_skip2:
36	mov.l	er2,er0	; ( 2 states)
37	rts		; (10 states)
38
39	.end
40