| ; SPDX-License-Identifier: GPL-2.0 |
| ; |
| ; mulsi3 for H8/300H - based on Renesas SH implementation |
| ; |
| ; by Toshiyasu Morita |
| ; |
| ; Old code: |
| ; |
| ; 16b * 16b = 372 states (worst case) |
| ; 32b * 32b = 724 states (worst case) |
| ; |
| ; New code: |
| ; |
| ; 16b * 16b = 48 states |
| ; 16b * 32b = 72 states |
| ; 32b * 32b = 92 states |
| ; |
| |
| .global __mulsi3 |
| __mulsi3: |
| mov.w r1,r2 ; ( 2 states) b * d |
| mulxu r0,er2 ; (22 states) |
| |
| mov.w e0,r3 ; ( 2 states) a * d |
| beq L_skip1 ; ( 4 states) |
| mulxu r1,er3 ; (22 states) |
| add.w r3,e2 ; ( 2 states) |
| |
| L_skip1: |
| mov.w e1,r3 ; ( 2 states) c * b |
| beq L_skip2 ; ( 4 states) |
| mulxu r0,er3 ; (22 states) |
| add.w r3,e2 ; ( 2 states) |
| |
| L_skip2: |
| mov.l er2,er0 ; ( 2 states) |
| rts ; (10 states) |
| |
| .end |