18c2ecf20Sopenharmony_ci; SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci;
38c2ecf20Sopenharmony_ci; mulsi3 for H8/300H - based on Renesas SH implementation
48c2ecf20Sopenharmony_ci;
58c2ecf20Sopenharmony_ci; by Toshiyasu Morita
68c2ecf20Sopenharmony_ci;
78c2ecf20Sopenharmony_ci; Old code:
88c2ecf20Sopenharmony_ci;
98c2ecf20Sopenharmony_ci; 16b * 16b = 372 states (worst case)
108c2ecf20Sopenharmony_ci; 32b * 32b = 724 states (worst case)
118c2ecf20Sopenharmony_ci;
128c2ecf20Sopenharmony_ci; New code:
138c2ecf20Sopenharmony_ci;
148c2ecf20Sopenharmony_ci; 16b * 16b =  48 states
158c2ecf20Sopenharmony_ci; 16b * 32b =  72 states
168c2ecf20Sopenharmony_ci; 32b * 32b =  92 states
178c2ecf20Sopenharmony_ci;
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci	.global __mulsi3
208c2ecf20Sopenharmony_ci__mulsi3:
218c2ecf20Sopenharmony_ci	mov.w	r1,r2   ; ( 2 states) b * d
228c2ecf20Sopenharmony_ci	mulxu	r0,er2  ; (22 states)
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	mov.w	e0,r3   ; ( 2 states) a * d
258c2ecf20Sopenharmony_ci	beq	L_skip1 ; ( 4 states)
268c2ecf20Sopenharmony_ci	mulxu	r1,er3  ; (22 states)
278c2ecf20Sopenharmony_ci	add.w	r3,e2   ; ( 2 states)
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_ciL_skip1:
308c2ecf20Sopenharmony_ci	mov.w	e1,r3   ; ( 2 states) c * b
318c2ecf20Sopenharmony_ci	beq	L_skip2 ; ( 4 states)
328c2ecf20Sopenharmony_ci	mulxu	r0,er3  ; (22 states)
338c2ecf20Sopenharmony_ci	add.w	r3,e2   ; ( 2 states)
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_ciL_skip2:
368c2ecf20Sopenharmony_ci	mov.l	er2,er0	; ( 2 states)
378c2ecf20Sopenharmony_ci	rts		; (10 states)
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	.end
40