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 29 L_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 35 L_skip2: 36 mov.l er2,er0 ; ( 2 states) 37 rts ; (10 states) 38 39 .end